see: "programming ruby", section "classes and objects" irb(main):022:0> def callf(obj) irb(main):023:1> obj.f irb(main):024:1> end nil irb(main):025:0> s="hello" "hello" irb(main):026:0> callf(s) NameError: undefined method `f' for "hello":String from (irb):23:in `callf' from (irb):26 irb(main):027:0> class < def f irb(main):029:2> p "i am s.f!" irb(main):030:2> end irb(main):031:1> end nil irb(main):032:0> callf(s) "i am s.f!" nil irb(main):033:0> ### class method inheritance 21:04 -!- multi_io [~olaf@swangoose.isst.fhg.de] has joined #ruby-lang 21:08 < multi_io> hmm.. it appears that class methods defined in a module (using "def self.bla ... end") are not inherited by classes that include that module, but class methods defined in a class are inherited by classes deriving from that class. Is that right? 21:10 < sam-> multi_io: that's correct. To get class methods from a module, you need to extend the module, not include it 21:12 < multi_io> sam-: you mean I need to extend (with the module) the class that should receive the module's class methods? 21:15 < sam-> multi_io: right, except it's actually the instance methods of the module which become class methods on the class that extends the module 21:15 < sam-> module Foo; def bar() "baz" end end 21:15 < sam-> class Quux; extend Foo; end 21:15 < sam-> Quux.bar #=> "baz" 21:16 < multi_io> sam-: OK 21:17 < sam-> the best way to figure it out is to open up irb and play around 21:22 < multi_io> sam-: I do that all the time, of course :) 21:23 < sam-> I love irb :) 21:23 * flowhase too 21:23 < flowhase> especially since i found irb/completion.rb 21:24 < multi_io> I just saw in the Rails sourcecode that one can override self.append_features to transparently add the class methods on "include" too. 21:25 < sam-> yes 21:25 < sam-> the preferred way to do that in 1.8+ is to implement Module#included