Module: Mongoid::Loadable
Relationships & Source Files | |
Extension / Inclusion / Inheritance Descendants | |
Extended In:
| |
Defined in: | lib/mongoid/loadable.rb |
Overview
Defines how ::Mongoid
can autoload all defined models.
Constant Summary
-
DEFAULT_IGNORE_PATTERNS =
The default list of glob patterns that match paths to ignore when loading models. Defaults to ‘/models/concerns/’, which
::Rails
uses for extensions to models (and which cause errors when loaded out of order).See #ignore_patterns.
%w( */models/concerns/* ).freeze
-
DEFAULT_MODEL_PATHS =
The default list of paths where model classes should be looked for. If
::Rails
is present, the “app/models” paths will be used instead. (See #model_paths.)%w( ./app/models ./lib/models ).freeze
Instance Attribute Summary
-
#ignore_patterns ⇒ Array<String>
rw
Returns the array of glob patterns that determine whether a given path should be ignored by the model loader.
-
#ignore_patterns=(patterns)
rw
Sets the ignore patterns to the given array of patterns.
-
#model_paths ⇒ Array<String>
rw
Returns the array of paths where the application’s model definitions are located.
-
#model_paths=(paths)
rw
Sets the model paths to the given array of paths.
Instance Method Summary
-
#files_under_path(path) ⇒ Array<String>
Given a single path, returns all ruby files under that path (or, if
preload_models
is a list of model names, returns only the files for those named models). -
#files_under_paths(paths) ⇒ Array<String>
Given a list of paths, return all ruby files under that path (or, if
preload_models
is a list of model names, returns only the files for those named models). -
#ignored?(file_path) ⇒ true | false
Returns true if the given file path matches any of the ignore patterns.
-
#load_model(file)
Internal use only
Internal use only
A convenience method for loading a model’s file.
-
#load_models(paths = model_paths)
Search a list of model paths to get every model and require it, so that indexing and inheritance work in both development and production with the same results.
Instance Attribute Details
#ignore_patterns ⇒ Array<String> (rw)
Returns the array of glob patterns that determine whether a given path should be ignored by the model loader.
# File 'lib/mongoid/loadable.rb', line 115
def ignore_patterns @ignore_patterns ||= DEFAULT_IGNORE_PATTERNS.dup end
#ignore_patterns=(patterns) (rw)
Sets the ignore patterns to the given array of patterns. These are glob patterns that determine whether a given path should be ignored by the model loader or not.
# File 'lib/mongoid/loadable.rb', line 132
def ignore_patterns=(patterns) @ignore_patterns = patterns end
#model_paths ⇒ Array<String> (rw)
Returns the array of paths where the application’s model definitions are located. If Rails is loaded, this defaults to the configured “app/models” paths (e.g. "app/models"
); otherwise, it defaults to ‘%w(./app/models ./lib/models)`.
Note that these paths are the roots of the directory hierarchies where the models are located; it is not necessary to indicate every subdirectory, as long as these root paths are located in $LOAD_PATH
.
# File 'lib/mongoid/loadable.rb', line 105
def model_paths @model_paths ||= defined?(Rails) ? Rails.application.config.paths["app/models"]. : DEFAULT_MODEL_PATHS end
#model_paths=(paths) (rw)
Sets the model paths to the given array of paths. These are the paths where the application’s model definitions are located.
# File 'lib/mongoid/loadable.rb', line 123
def model_paths=(paths) @model_paths = paths end
Instance Method Details
#files_under_path(path) ⇒ Array<String>
Given a single path, returns all ruby files under that path (or, if preload_models
is a list of model names, returns only the files for those named models).
# File 'lib/mongoid/loadable.rb', line 63
def files_under_path(path) files = if preload_models.resizable? preload_models. map { |model| "#{path}/#{model.underscore}.rb" }. select { |file_name| File.exists?(file_name) } else Dir.glob("#{path}/**/*.rb"). reject { |file_name| ignored?(file_name) } end # strip the path and the suffix from each entry files.map { |file| file.gsub(/^#{path}\// , "").gsub(/\.rb$/, "") } end
#files_under_paths(paths) ⇒ Array<String>
Given a list of paths, return all ruby files under that path (or, if preload_models
is a list of model names, returns only the files for those named models).
# File 'lib/mongoid/loadable.rb', line 51
def files_under_paths(paths) paths.flat_map { |path| files_under_path(path) } end
#ignored?(file_path) ⇒ true
| false
Returns true if the given file path matches any of the ignore patterns.
# File 'lib/mongoid/loadable.rb', line 142
def ignored?(file_path) ignore_patterns.any? { |pattern| File.fnmatch?(pattern, file_path) } end
#load_model(file)
A convenience method for loading a model’s file. If Rails’ require_dependency
method exists, it will be used; otherwise require
will be used.
# File 'lib/mongoid/loadable.rb', line 87
def load_model(file) if defined?(require_dependency) require_dependency(file) else require(file) end end
#load_models(paths = model_paths)
Search a list of model paths to get every model and require it, so that indexing and inheritance work in both development and production with the same results.
# File 'lib/mongoid/loadable.rb', line 33
def load_models(paths = model_paths) files = files_under_paths(paths) files.sort.each do |file| load_model(file) end nil end