Require wackyness

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

···

--
Posted via http://www.ruby-forum.com/\.

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)

You almost certainly do not want those commas:
  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!!
--

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 Biedenharn http://agileconsultingllc.com
Rob@AgileConsultingLLC.com

···

On Jan 2, 2009, at 6:37 PM, Vincent Ds wrote:

Rob Biedenharn 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 Biedenharn http://agileconsultingllc.com
Rob@AgileConsultingLLC.com

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:

···

On Jan 2, 2009, at 6:37 PM, Vincent Ds wrote:

--
Posted via http://www.ruby-forum.com/\.