[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Problem seeing classes in rubygem

Wes Gamble

3/23/2006 4:51:00 PM

Ruby 1.8.2

I am trying to take advantage of a Rubygem named RubyfulSoup (a port of
the PHP BeautifulSoup module).

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"})

Does anyone understand why the class name inside of the rubyful_soup.rb
file cannot be seen successfully?

Thanks,
Wes

--
Posted via http://www.ruby-....


4 Answers

Ross Bamford

3/23/2006 5:36:00 PM

0

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 -
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.

--
Ross Bamford - rosco@roscopeco.REMOVE.co.uk



Daniel Harple

3/23/2006 5:41:00 PM

0


On Mar 23, 2006, at 5:51 PM, Wes Gamble wrote:

> Ruby 1.8.2
>
> I am trying to take advantage of a Rubygem named RubyfulSoup (a
> port of
> the PHP BeautifulSoup module).

Python actually.

> require 'rubygems'
> require_gem 'rubyful_soup', '>= 1.0.4'

Unless you _really need_ version 1.0.4, you can drop this and just do
require 'rubyful_soup'.

-- Daniel



Mark Volkmann

3/23/2006 5:52:00 PM

0

On 3/23/06, Ross Bamford <rossrt@roscopeco.co.uk> 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.


Ross Bamford

3/23/2006 6:48:00 PM

0

On Fri, 2006-03-24 at 02:52 +0900, Mark Volkmann wrote:
> On 3/23/06, Ross Bamford <rossrt@roscopeco.co.uk> 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.
>

Oops, yes, typo there.

> 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.

Yes, in fact I think that's what the Gems team now recommend.

--
Ross Bamford - rosco@roscopeco.REMOVE.co.uk