From: Joel VanderWerf Date: 2011-05-02T04:04:07+09:00 Subject: Re: Wrap external source file in a module 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