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

Instance Method Summary collapse

Instance Method Details

#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.

Examples:

Load the model.

Mongoid.load_model("/mongoid/behavior")

Parameters:

  • file (String)

    The base filename.



50
51
52
53
54
55
56
# File 'lib/mongoid/loadable.rb', line 50

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.

Examples:

Load all the application models from default model paths.

Mongoid.load_models

Load all application models from a non-standard set of paths.

Mongoid.load_models(%w( ./models ./admin/models ))

Parameters:

  • paths (Array) (defaults to: model_paths)

    The list of paths that should be looked in for model files. These must either be absolute paths, or relative to the current working directory.



26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/mongoid/loadable.rb', line 26

def load_models(paths = model_paths)
  paths.each do |path|
    if preload_models.resizable?
      files = preload_models.map { |model| "#{path}/#{model.underscore}.rb" }
    else
      files = Dir.glob("#{path}/**/*.rb")
    end

    files.sort.each do |file|
      load_model(file.gsub(/^#{path}\// , "").gsub(/\.rb$/, ""))
    end
  end
end

#model_pathsArray<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`.

Returns:

  • (Array<String>)

    the array of model paths



68
69
70
71
72
# File 'lib/mongoid/loadable.rb', line 68

def model_paths
  @model_paths ||= defined?(Rails) ?
    Rails.application.config.paths["app/models"].expanded :
    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.

Parameters:

  • paths (Array<String>)

    The list of model paths



78
79
80
# File 'lib/mongoid/loadable.rb', line 78

def model_paths=(paths)
  @model_paths = paths
end