From: Rob Biedenharn Date: 2009-01-03T09:42:23+09:00 Subject: Re: require wackyness On Jan 2, 2009, at 6:37 PM, Vincent Ds wrote: > 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