On 05/01/2011 10:55 AM, Alexey Muranov wrote:
> Hello, i have another question.
>
> I have a strange situation which i have not resolved yet where for some
> reason i have to wrap several classes in a module, otherwise the program
> doesn't work as expected (by me of course).
> Can anybody please tell me the following: is it possible to read class
> definition from another file and wrap them in a module?
>
> Here is an example:
>
> I have several classes defined in a file models.rb:
>
>      class Person
>        ...
>      end
>
>      class Address
>        ...
>      end
>
> I want to load or require this file in another file, say program.rb, so
> that the classes were wrapped together in a module M, like
>
>      module M
>        load "models.rb"
>      end
>
>      p = M::Person.new
>
> but this doesn't work (M::Person is an uninitialized constant, according
> to an error message).

The basic trick is module_eval. Here's a library that does that for you 
and has a few other features:

http://redshift.sourceforge.net/script

Your program.rb would be this:

   require 'script'
   M = Script.load "models.rb" # M is now a module
   person = M::Person.new