From: Austin Ziegler Date: 2005-05-08T03:32:35+09:00 Subject: Wrapped Modules Last night, I was asked about loading objects into a namespace. Thinking about it, I came up with this: module Kernel def require_wrap(resource, mod) old_lf = $LOADED_FEATURES.dup topconst = Module.constants res = require resource (Module.constants - topconst).each do |const| mod.__send__(:const_set, const, Object.__send__(:remove_const, const)) end $LOADED_FEATURES.replace(old_lf) ensure res end end module My; end module Your; end require_wrap 'cgi', My require_wrap 'cgi', Your puts My::CGI.escape("hello, world") puts Your::CGI.escape("hello, world") I don't know if this is useful -- and it has a few drawbacks. First, I have no clue whether it will work with deep nesting and references. Second, it won't work on modifications to already existing classes. Third, the class name is reported as if it were at the top level. The better choice to solve the third is to do what Jim Weirich suggested: read the file as a string and module_eval it. But I throw this out for discussion in any case. -austin -- Austin Ziegler * halostatue@gmail.com * Alternate: austin@halostatue.ca