Forum: Ruby Problem seeing classes in rubygem

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Wes G. (Guest)
on 2006-03-23 18:51
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
Ross B. (Guest)
on 2006-03-23 19:35
(Received via mailing list)
On Fri, 2006-03-24 at 01:51 +0900, Wes G. wrote:
> 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.
Daniel H. (Guest)
on 2006-03-23 19:41
(Received via mailing list)
On Mar 23, 2006, at 5:51 PM, Wes G. 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 V. (Guest)
on 2006-03-23 19:52
(Received via mailing list)
On 3/23/06, Ross B. <removed_email_address@domain.invalid> wrote:
> >
> > 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.

> 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?
Ross B. (Guest)
on 2006-03-23 20:47
(Received via mailing list)
On Fri, 2006-03-24 at 02:52 +0900, Mark V. wrote:
> > > on line 4 of my test case below.
> 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.
This topic is locked and can not be replied to.