Ruby's Mix-in chaining not working properly

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!!!"

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

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 Object directly. But if you're so inclined, you can extend Kernel, just don't forget to re-include it to Object again.

module Foo
  def bar
    puts "Method is in scope!!!"

Kernel.send :include, Foo
# bar at this point will generate error

Object.send :include, Kernel
# >> Method is in scope!!!

Also, see this answer for a much more thorough explanation.

Need Your Help