Requiring the same file and capturing the constants

file1.txt

···

-----------------
class Person
end
module Speak
end

The task is to printout all the constants listed in the file. In this
case there are Person and Speak.

I need to handle two cases.
1) The system loads the file for the first time. I guess in this case I
can use ObjectSpace.each_object or ObjectSpace.some_method from API to
get before and after picture. Subtract the before picture and I will get
the constants.

2) The second case is when file1.txt is already loaded into the
application. So in this case I can't do before and after thing. How can
I get constants in this case without before and after picture.

Thanks
--
Posted via http://www.ruby-forum.com/.

Raj Singh wrote:

file1.txt
-----------------
class Person
end
module Speak
end

The task is to printout all the constants listed in the file. In this
case there are Person and Speak.

I need to handle two cases.
1) The system loads the file for the first time. I guess in this case I
can use ObjectSpace.each_object or ObjectSpace.some_method from API to
get before and after picture. Subtract the before picture and I will get
the constants.

2) The second case is when file1.txt is already loaded into the
application. So in this case I can't do before and after thing. How can
I get constants in this case without before and after picture.

Thanks

If you have control over *how* the file is loaded, you can do this, using http://redshift.sourceforge.net/script:

[~/tmp] cat file.rb
class Person
end
module Speak
end
[~/tmp] cat main.rb
require 'script'
mod = Script.load 'file.rb'
p mod.constants
[~/tmp] ruby main.rb
["Person", "Speak"]

The trick is really just reading the file, creating a module, and calling module_eval on that with the contents of the file.

···

--
       vjoel : Joel VanderWerf : path berkeley edu : 510 665 3407