I’m using Ruby 1.9.3 on Windows. So I want to add methods to be availble in console via Kernel class. Start console.
module Foo
def bar
puts "Method is in scope!!!"
end
end
After add this to Kernel (which is part of Object class)
irb(main):008:0> Kernel.send(:include, Foo)
=> Kernel
irb(main):009:0> bar
"NameError: undefined local variable or method `bar' for main:Object"
# did not work, we need to re-include Kernel in Object class
irb(main):010:0> Object.send(:include, Kernel)
=> Object
irb(main):011:0> bar
Method is in scope!!!
=> nil
irb(main):012:0>
This should have worked only with Kernel.send(:include, Foo) or am I wrong? Am I missing something?
Yes, in this case you should extend
Objectdirectly. But if you’re so inclined, you can extendKernel, just don’t forget to re-include it to Object again.Also, see this answer for a much more thorough explanation.