# Loading Source Files
# Require files to be loaded only once
The Kernel#require (opens new window) method will load files only once (several calls to require
will result in the code in that file being evaluated only once). It will search your ruby $LOAD_PATH
to find the required file if the parameter is not an absolute path. Extensions like .rb
, .so
, .o
or .dll
are optional. Relative paths will be resolved to the current working directory of the process.
require 'awesome_print'
The Kernel#require_relative (opens new window) allows you to load files relative to the file in which require_relative
is called.
# will search in directory myproj relative to current source file.
#
require_relative 'myproj/version'
# Automatically loading source files
The method Kernel#autoload
(opens new window) registers filename to be loaded (using Kernel::require
) the first time that module (which may be a String or a symbol) is accessed.
autoload :MyModule, '/usr/local/lib/modules/my_module.rb'
The method Kernel#autoload? (opens new window) returns filename to be loaded if name is registered as autoload
.
autoload? :MyModule #=> '/usr/local/lib/modules/my_module.rb'
# Loading optional files
When files are not available, the require
family will throw a LoadError
(opens new window). This is an example which illustrates loading optional modules only if they exist.
module TidBits
@@unavailableModules = []
[
{ name: 'CoreExtend', file: 'core_extend/lib/core_extend' } \
, { name: 'Fs' , file: 'fs/lib/fs' } \
, { name: 'Options' , file: 'options/lib/options' } \
, { name: 'Susu' , file: 'susu/lib/susu' } \
].each do |lib|
begin
require_relative lib[ :file ]
rescue LoadError
@@unavailableModules.push lib
end
end
end # module TidBits
# Loading files repeatedly
The Kernel#load (opens new window) method will evaluate the code in the given file. The search path will be constructed as with require
. It will re-evaluate that code on every subsequent call unlike require
. There is no load_relative
.
load `somefile`
# Loading several files
You can use any ruby technique to dynamically create a list of files to load. Illustration of globbing for files starting with test
, loaded in alphabetical order.
Dir[ "#{ __dir__ }**/test*.rb" ) ].sort.each do |source|
require_relative source
end