irb(main):001:0> module Foo
   irb(main):002:1>   def foo
   irb(main):003:2>     "foo_instance"
   irb(main):004:2>   end
   irb(main):005:1>   def Foo.foo
   irb(main):006:2>     "foo_class"
   irb(main):007:2>   end
   irb(main):008:1> end
   => nil
   irb(main):009:0> class Bar
   irb(main):010:1>   include Foo
   irb(main):011:1> end
   => Bar
   irb(main):012:0> Bar.new.foo
   => "foo_instance"
   irb(main):013:0> Bar.foo
   NoMethodError: undefined method `foo' for Bar:Class
           from (irb):13

How do I get Bar to "inherit" Foo.foo? I've done it before like this:

   irb(main):001:0> module Foo
   irb(main):002:1>   def foo
   irb(main):003:2>     "foo_instance"
   irb(main):004:2>   end
   irb(main):005:1>   def Foo.included(aModule)
   irb(main):006:2>     super
   irb(main):007:2>     aModule.instance_eval do
   irb(main):008:3*       def foo
   irb(main):009:4>         "foo_class"
   irb(main):010:4>       end
   irb(main):011:3>     end
   irb(main):012:2>   end
   irb(main):013:1> end
   => nil
   irb(main):014:0> class Bar
   irb(main):015:1>   include Foo
   irb(main):016:1> end
   => Bar
   irb(main):017:0> Bar.new.foo
   => "foo_instance"
   irb(main):018:0> Bar.foo
   => "foo_class"

But that's rather ugly. Surely there's a better way?

ruby 1.8.0 (2003-08-04) [i686-linux-gnu]

Tim.

-- 
Tim Bates
tim / bates.id.au