Stefan Rusterholz wrote:
> bwv549 wrote:
>> module SomeModule
>>   def happy?
>>     puts 'yes'
>>   end
>> end
>> 
>> #  I can do this:
>> some_object.extend(SomeModule)
>> some_object.happy?   # -> 'yes'
>> 
>> # But I really need to give the class the method (not just instances)
>> # because I have a collection of hundreds of thousands of objects
>> # and need them all to have the method quickly.
>> 
>> # The problem is that I don't know the class that needs to include the
>> method
>> # until runtime!
>> 
>> # This won't work:
>> 
>> some_object.class.include(SomeModule)
>> # -> NoMethodError: private method `include' called for <SomeClass>
>> 
>> # What is the workaround to add a method to a class (known only at
>> runtime)?
>> 
>> Thanks
> 
> You have a misunderstanding here. *All* methods are added to classes at 
> runtime, since that's the only "time" ruby has (there is no compile 
> time). Of course, C-extensions are excluded from this.
> You can always reopen a class:
> class Array
>   def foo; "foo!"; end
> end
> [].foo # => "foo!"
> 
> Regards
> Stefan

That one went off too early, The missing paragraph:
As for your problem: you can use include, e.g. via 
YourClass.send(:include, ModuleName), if you have the classname as 
Symbol or String, see Module#const_get.

Regards
Stefan
-- 
Posted via http://www.ruby-forum.com/.