From: Devin Mullins Date: 2005-12-16T16:08:05+09:00 Subject: [ANN] scoped_require 0.0 ... and from the substratum, it arises ... One-liner: scoped_require provides an optional parameter to Kernel#require to allow you to shove the created modules/classes into some sandboxy container module. I use it to prevent namespace collision with an external library. It's a hack. Heed the version number. Example usage: require 'rubygems' require_gem 'rubyful_soup' # luckily this doesn't have autorequire set require 'rubyful_soup', :module => :Soup # here's the magic assert_equal 'constant', defined? Soup::BeautifulSoup Browse or get at: http://opensvn.csie.org/twifkak/trunk/scoped_require/scoped_require.rb See the unit tests for usage. If you wanna run the unit tests, export the whole scoped_require directory. And have the rubyful_soup gem installed. Weirdo. Several-liner: So, I was writing a Rails app, and I was using RubyfulSoup to parse in some documents and feed some metadata into the database. Hoorah. (Thanks for the library, by the way!) Then, I decided, "I should implement folksonomy!" As any standard human would do, I created a model object called Tag, and went on creating my tagging functionality. I decide to run all of my tests again. Woo! Big honkin' error in the feeder code. See, it seems that RubyfulSoup defines a class called Tag and shoves it in the top-level space -- or, at least, tries to, before getting a "base class mismatch" error. Well, I could contact the author and tell him to move his class out of my way, but I'm antisocial, and besides, I want it to work *now*! I could put my class in a module, but I WILL NOT SUCCUMB. No, no, I will put *his* classes in a module. And I'll do it without touching his code. (Look, ma, no CM issues!) Well, being the na�ve and lazy fellow I am, I try the simplest approach: module Soup require 'rubyful_soup' end *whimper* It doesn't work. I eventually settle on this can of ugly: module Soup eval IO.read('sgml_parser.rb') $" << 'sgml_parser.rb' eval IO.read('rubyful_soup.rb') end Yeah. Cry. So I packaged up that can of ugly into a pretty little #require override, so that I never have to think about it again. Judging by http://www.rcrchive.net/rcr/show/289, I'm not the only person who had the desire for this capability. Is this "library" useful to other people? Would it be, if I got rid of the need for a require_gem first? Or is this just some weird thing that only helps me? Do you have suggestions for making it suck less? Is it sad that my test code is prettier than my real code? Is there a library out there that already does this, but better? Will I become famous and wealthy thanks to this library (please oh please oh please)? Thanks, Devin Yeah, I don't mean to pick on RubyfulSoup so much... 's just on the brain...