Question about modules

Hi group,

I have a main.rb file which is the entry point for a system. It loads a lot of other ruby files using 'require'. I would like to put this whole system inside a module 'X' basically for namespacing purposes.

My question is: is it possible to just place the whole of main.rb in module X and then expect all classes and methods etc that get created via require to be automatically imported into that module (ie just specify the module once in main.rb)? It would be great if this was possible as I wouldn't have to wrap every single file in module X statements (and wouldn't that create a nested module X inside the outer module X??)

Any help much appreciated,
James

Hi group,

I have a main.rb file which is the entry point for a system. It loads a lot of other ruby files using 'require'. I would like to put this whole system inside a module 'X' basically for namespacing purposes.

My question is: is it possible to just place the whole of main.rb in module X and then expect all classes and methods etc that get created via require to be automatically imported into that module (ie just specify the module once in main.rb)?

No.

It would be great if this was possible as I wouldn't have to wrap every single file in module X statements (and wouldn't that create a nested module X inside the outer module X??)

No. You have to explicitly nest every individual file unless you want
to start using eval or other tricks to save the work of typing.

Actually for the typing you may be able to do something like this (untested):

find lib/x -type f -name \*.rb -print0 | xargs -r0 -n 1 ruby -p '-i~'
-e 'BEGIN { puts "module X" }; END { puts "end"}'

Kind regards

robert

···

On Thu, Feb 17, 2011 at 12:53 PM, James French <James.French@naturalmotion.com> wrote:

--
remember.guy do |as, often| as.you_can - without end
http://blog.rubybestpractices.com/

Hi group,

I have a main.rb file which is the entry point for a system. It loads a lot of other ruby files using 'require'. I would like to put this whole system inside a module 'X' basically for namespacing purposes.

My question is: is it possible to just place the whole of main.rb in module X and then expect all classes and methods etc that get created via require to be automatically imported into that module (ie just specify the module once in main.rb)?

No.

It would be great if this was possible as I wouldn't have to wrap every single file in module X statements (and wouldn't that create a nested module X inside the outer module X??)

No. You have to explicitly nest every individual file unless you want
to start using eval or other tricks to save the work of typing.

Actually for the typing you may be able to do something like this (untested):

find lib/x -type f -name \*.rb -print0 | xargs -r0 -n 1 ruby -p '-i~'
-e 'BEGIN { puts "module X" }; END { puts "end"}'

Kind regards

robert

···

-----Original Message-----
From: Robert Klemme [mailto:shortcutter@googlemail.com]
Sent: 17 February 2011 12:24
To: ruby-talk ML
Subject: Re: question about modules

On Thu, Feb 17, 2011 at 12:53 PM, James French <James.French@naturalmotion.com> wrote:

--
remember.guy do |as, often| as.you_can - without end
http://blog.rubybestpractices.com/

OK. Thank Robert - much appreciated.