Module: Mongoid::Loadable
- Included in:
- Mongoid
- Defined in:
- lib/mongoid/loadable.rb
Overview
Defines how Mongoid can autoload all defined models.
Constant Summary collapse
- 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 
- 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 
Instance Method Summary collapse
- 
  
    
      #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). 
- 
  
    
      #ignore_patterns  ⇒ Array<String> 
    
    
  
  
  
  
  
  
  
  
  
    Returns the array of glob patterns that determine whether a given path should be ignored by the model loader. 
- 
  
    
      #ignore_patterns=(patterns)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    Sets the ignore patterns to the given array of patterns. 
- 
  
    
      #ignored?(file_path)  ⇒ true | false 
    
    
  
  
  
  
  
  
  
  
  
    Returns true if the given file path matches any of the ignore patterns. 
- 
  
    
      #load_model(file)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  private
  
    A convenience method for loading a model’s file. 
- 
  
    
      #load_models(paths = model_paths)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    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. 
- 
  
    
      #model_paths  ⇒ Array<String> 
    
    
  
  
  
  
  
  
  
  
  
    Returns the array of paths where the application’s model definitions are located. 
- 
  
    
      #model_paths=(paths)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    Sets the model paths to the given array of paths. 
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).
| 63 64 65 66 67 68 69 70 71 72 73 74 75 | # 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).
| 51 52 53 | # File 'lib/mongoid/loadable.rb', line 51 def files_under_paths(paths) paths.flat_map { |path| files_under_path(path) } end | 
#ignore_patterns ⇒ Array<String>
Returns the array of glob patterns that determine whether a given path should be ignored by the model loader.
| 115 116 117 | # File 'lib/mongoid/loadable.rb', line 115 def ignore_patterns @ignore_patterns ||= DEFAULT_IGNORE_PATTERNS.dup end | 
#ignore_patterns=(patterns) ⇒ Object
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.
| 132 133 134 | # File 'lib/mongoid/loadable.rb', line 132 def ignore_patterns=(patterns) @ignore_patterns = patterns end | 
#ignored?(file_path) ⇒ true | false
Returns true if the given file path matches any of the ignore patterns.
| 142 143 144 | # File 'lib/mongoid/loadable.rb', line 142 def ignored?(file_path) ignore_patterns.any? { |pattern| File.fnmatch?(pattern, file_path) } end | 
#load_model(file) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
A convenience method for loading a model’s file. If Rails’ ‘require_dependency` method exists, it will be used; otherwise `require` will be used.
| 87 88 89 90 91 92 93 | # 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) ⇒ Object
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.
| 33 34 35 36 37 38 39 40 41 | # 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 | 
#model_paths ⇒ Array<String>
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. ‘config.paths`); 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`.
| 105 106 107 108 109 | # 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) ⇒ Object
Sets the model paths to the given array of paths. These are the paths where the application’s model definitions are located.
| 123 124 125 | # File 'lib/mongoid/loadable.rb', line 123 def model_paths=(paths) @model_paths = paths end |