Understanding Ruby's load paths

I'm a little confused about why my project can't load the files it needs, it's a really simple project tree:

processor/
  bin/
  lib/
    processor.rb
    processor/
      mapper.rb
      reducer.rb

and my processor.rb file looks like

require 'processor/mapper'
require 'processor/reducer'

class Processor

end

And just for testing it that file mapper looks like:

class Mapper
  def run
    puts "running map"
  end
end

But running ruby lib/processor.rb results in:

<internal:lib/rubygems/custom_require>:29:in `require': no such file to load -- processor/mapper (LoadError)
    from <internal:lib/rubygems/custom_require>:29:in `require'
    from lib/processor.rb:3:in `<class:Processor>'
    from lib/processor.rb:2:in `<main>'    

Ruby's $LOAD_PATH will not include your lib directory by default (even though that's where the file you're running is located).

You can either tell the ruby interpreter to include it:

ruby -Ilib lib/processor.rb

Or you can add the lib folder to the load path:

$LOAD_PATH.unshift(File.dirname(__FILE__))
require  'processor/mapper'
...

Ruby 1.9 no longer includes "." in the load path. Do require "#{File.dirname(__FILE__)}/processor/mapper" or use require_relative.

You can always determine the current load path by inspecting $LOAD_PATH (or $:)

(edited: $LOAD_PATH not $:LOAD_PATH)