From: Mark Volkmann Date: 2006-03-24T02:52:15+09:00 Subject: Re: Problem seeing classes in rubygem On 3/23/06, Ross Bamford wrote: > On Fri, 2006-03-24 at 01:51 +0900, Wes Gamble wrote: > > I have installed the gem correctly (it shows up when I do gem -list) and > > my require_gem statement succeeds. > > > > However, when I go to instantiate one of the classes defined in this > > gem, the call fails with: > > > > unitialized constant: BeautifulSoup > > > > on line 4 of my test case below. > > > > Here is my test case: > > > > require 'rubygems' > > require_gem 'rubyful_soup', '>= 1.0.4' > > > > parser = BeautifulSoup.new(%{"kajsdlfkjads"}) > > require_gem does (by default) actually require anything inside the gem - I assume you meant "doesn't" above. A caveat is what you mention below regarding autorequire. > it's just used to tell Gems about version constraints you want to have. > You'll still have to require 'rubyful_soup' to actually load it. > > note 1: In normal use, Gems patches require to automatically load gems > as needed, so you could have just had "require 'rubyful_soup'" and the > latest installed version would be installed. If you really do need that > version constraint, however, I think you have to keep the require_gem. > > note 2: Gems does support an 'autorequire' attribute in a gem's spec > that allows it to automatically require a given file when the Gem itself > is required, but this is deprecated and rubyful soup doesn't appear to > use it. Based on what you've said it seems that 1) There is no point in using require_gem unless you want to specify version constraints instead of just using the newest version of the gem. 2) Since autorequire is being deprecated, you should never just use require_gem. You should also use a require to pull in a specific file within the gem. Does anyone disagree with these recommendations? -- R. Mark Volkmann Object Computing, Inc.