Forum: Ruby require wackyness

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.
Vincent D. (Guest)
on 2009-01-03 01:38
Hi,

First time poster here ... picking up Ruby again after neglecting it for
> 2 years after some rails work. But, instead of Rails, this time I want
to properly understand Ruby. Sadly though progress is slow ... mainly
due to the following problem:

I have a root directory containing 2 folders (lib & spec). lib contains
a couple of sub-folders and I want all of the folders known to Ruby so
that it knows where to look when I require the files. But somehow this
isn't working. Probably making a beginner mistake ... Here is what I
have:

lib/classes/movie.rb:

class Movie
#...
end

spec/spec_helper.rb:

paths = %w(classes, logic, logic/scrapers)
paths.each do |p|
  $LOAD_PATH <<
File.expand_path("#{File.dirname(__FILE__)}/../lib/#{p}")
end
puts $LOAD_PATH

spec/imdb_movie_scraper_spec.rb:

$LOAD_PATH << File.expand_path(File.dirname(__FILE__))

require 'spec_helper'
require 'imdb_movie_scraper'
require 'movie'
#...

Here is what I do:
in the root directory (directory containing lib and spec):
spec spec/imdb_movie_scraper_spec.rb -c

and it gives me the following annoying error:
/Library/Ruby/Site/1.8/rubygems/custom_require.rb:31:in
`gem_original_require': no such file to load -- movie (LoadError)
  from /Library/Ruby/Site/1.8/rubygems/custom_require.rb:31:in `require'
  from ./spec/imdb_movie_scraper_spec.rb:6 (yes, this is include 'movie'

I know that spec_helper launched since it outputs the $LOAD_PATH just
above the error.

HOW is this possible? The file movie.rb is obviously defined in
/Users/spobo/Code/movie-crawler/lib/classes and this is included in
$LOAD_PATH.

What am I missing here? Debugging and figuring out this stuff any longer
and my shiny new laptop will go from 60 to 0 in 0.01 second flat against
the wall. *aaaaaaaar* it's frustrating!!
Rob B. (Guest)
on 2009-01-03 02:44
(Received via mailing list)
On Jan 2, 2009, at 6:37 PM, Vincent Ds wrote:
> contains
>
> spec/spec_helper.rb:
>
> paths = %w(classes, logic, logic/scrapers)
You almost certainly do not want those commas:
  paths = %w( classes logic logic/scrapers)
>
> /Library/Ruby/Site/1.8/rubygems/custom_require.rb:31:in
> /Users/spobo/Code/movie-crawler/lib/classes and this is included in
> $LOAD_PATH.
>
> What am I missing here? Debugging and figuring out this stuff any
> longer
> and my shiny new laptop will go from 60 to 0 in 0.01 second flat
> against
> the wall. *aaaaaaaar* it's frustrating!!
> --


If you want *all* the directories under lib/ to be in the LOAD_PATH,
you could do:

Dir['../lib/**/**'].each do |dir|
   $LOAD_PATH << File.expand_path(dir)
end
puts $LOAD_PATH

Then you'd pick up ALL the future directories under lib/, too!

-Rob

Rob B.    http://agileconsultingllc.com
removed_email_address@domain.invalid
Vincent D. (Guest)
on 2009-01-03 14:38
Rob B. wrote:
> On Jan 2, 2009, at 6:37 PM, Vincent Ds wrote:
>> contains
>>
>> spec/spec_helper.rb:
>>
>> paths = %w(classes, logic, logic/scrapers)
> You almost certainly do not want those commas:
>   paths = %w( classes logic logic/scrapers)
>>
>> /Library/Ruby/Site/1.8/rubygems/custom_require.rb:31:in
>> /Users/spobo/Code/movie-crawler/lib/classes and this is included in
>> $LOAD_PATH.
>>
>> What am I missing here? Debugging and figuring out this stuff any
>> longer
>> and my shiny new laptop will go from 60 to 0 in 0.01 second flat
>> against
>> the wall. *aaaaaaaar* it's frustrating!!
>> --
>
>
> If you want *all* the directories under lib/ to be in the LOAD_PATH,
> you could do:
>
> Dir['../lib/**/**'].each do |dir|
>    $LOAD_PATH << File.expand_path(dir)
> end
> puts $LOAD_PATH
>
> Then you'd pick up ALL the future directories under lib/, too!
>
> -Rob
>
> Rob B.    http://agileconsultingllc.com
> removed_email_address@domain.invalid
Aha!

Rob, Thx! It was indeed the beginner mistake of using the commas where
there shouldn't be any. The ways of other programming languages are
still blocking my thinking :p

The suggestion you made of including every directory under lib... looks
good. I'll try it out. Thx for restoring my fait in Ruby :D I knew it
had to be me and not Ruby that was playing tricks on me :p
This topic is locked and can not be replied to.