Require wackyness


#1

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:inrequire’
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!!


#2

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


#3

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 :stuck_out_tongue:

The suggestion you made of including every directory under lib… looks
good. I’ll try it out. Thx for restoring my fait in Ruby :smiley: I knew it
had to be me and not Ruby that was playing tricks on me :stuck_out_tongue: