Directory Structure of Ruby Program
Ruby does not enforce any particular directory structure. Loading code from different files is performed by require, require_relative or load. The filesystem structure is not related to the module structure, because all constants (including classes and modules) from loaded files are imported into the global namespace.
Ruby looks for the files passed to require
in the directories enumerated in $LOAD_PATH
constant. If the file is not found, LoadError exception is raised and can be caught. This allows implementation of “optional library” pattern:
begin
require 'somelibrary'
rescue LoadError
warn "You need to install somelibrary to access <some functionality>"
end
There are soft community conventions, suggesting one class or module per file and correspondence between filesystem and module structure (e.g. require 'library_name/namespace/class_name'
should load LibraryName::Namespace::ClassName
), though it is neither required nor enforced by default.
See also: