Here are some different ways to require stuff in ruby. The funny ones courtesy of why the lucky stiff.
require "rubygems" require "open-uri" require "yaml"
[ "rubygems", "open-uri", "yaml" ].each { |s| require s }
%w[rubygems open-uri yaml].map(&method(:require))
File.dirname(__FILE__)
What got me looking at require was how annoying it is to use the File.dirname(__FILE__) syntax all the time in init.rb’s, like:
require File.dirname(__FILE__) + "/parser/black_cat" require File.dirname(__FILE__) + "/parser/dar" require File.dirname(__FILE__) + "/parser/dc_nine" require File.dirname(__FILE__) + "/parser/iota" require File.dirname(__FILE__) + "/parser/jammin_java"
I am always just verbose with requires, I don’t know why. It gets even less readable if you start using File.join(...). I was poking around in the rails source to see how they do requires and they use $::
$:.unshift(File.dirname(__FILE__)) unless $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__))) require 'action_controller/base' require 'action_controller/request' require 'action_controller/rescue' ...
$:
What is $:?
irb(main):001:0> $: => ["/usr/local/lib/ruby/site_ruby/1.8", "/usr/local/lib/ruby/site_ruby/universal-darwin8.0", "/usr/local/lib/ruby/site_ruby/1.8/universal-darwin8.0", "/usr/local/lib/ruby/site_ruby", "/usr/local/lib/ruby/1.8", "/usr/local/lib/ruby/1.8/universal-darwin8.0", "/usr/local/lib/ruby/1.8/universal-darwin8.0", "."]
Its the load path. It turns out $LOAD_PATH is a synonym. So that would take me:
$LOAD_PATH.unshift(File.dirname(__FILE__)) require "parser/black_cat" require "parser/dar" require "parser/dc_nine" require "parser/iota" require "parser/jammin_java"
But is this a bad idea? What if the load path gets large? Do we care?


