模块:Mongoid::Loadable

包含在:
Mongoid
定义于:
lib/mongoid/loadable.rb

Overview

定义 Mongoid 如何自动加载所有定义的模型。

常量摘要折叠

DEFAULT_MODEL_PATHS =

应在其中查找模型类的默认路径列表。 如果存在 Rails,则会使用“应用/models”路径。 (请参阅#model_paths。)

%w( ./app/models ./lib/models ).冻结
DEFAULT_IGNORE_PATTERNS =

加载模型时要忽略的匹配路径的默认通配符模式列表。 默认为 ' /models/concerns/ ',Rails 将其用于模型扩展(无序加载时会导致错误)。

请参阅#ignore_patterns。

%w( */models/concerns/* ).冻结

实例方法摘要折叠

实例方法详细信息

# files_under_path (path) ⇒ Array<String>

给定单个路径,返回该路径下的所有 Ruby 文件(或者,如果“preload_models”是模型名称列表,则仅返回这些命名模型的文件)。

参数:

  • 路径 ( string )

    搜索路径

返回:

  • ( Array<String> )

    规范化文件名,适合通过“require_dependency”或“require”加载。



63
64
65
66
67
68
69
70
71
72
73
74
75
# File 'lib/mongoid/loadable.rb', 第63行

def files_under_path(路径)
  的知识 = if preload_models.可调整大小?
      preload_models.
        map { |模型| " #{ path } / #{ model . underscore } .rb " }.
        SELECT { |file_name| file.存在吗?(file_name) }
    else
      目录.glob(" #{ path } /**/*.rb ").
        拒绝 { |file_name| 忽略?(file_name) }
    end

  # 从每个条目中去掉路径和后缀
  的知识.map { |文件| 文件.gsub(/^#{path}\// , " ").gsub(/\.rb$/, " ") }
end

# files_under_paths (paths) ⇒ Array<String>

给定路径列表,返回该路径下的所有 Ruby 文件(或者,如果 'preload_models` 是模型名称列表,则仅返回这些命名模型的文件)。

参数:

  • paths ( Array<String> )

    要搜索的路径列表

返回:

  • ( Array<String> )

    规范化文件名,适合通过“require_dependency”或“require”加载。



51
52
53
# File 'lib/mongoid/loadable.rb', 第51行

def files_under_paths(paths)
  paths.flat_map { |路径| files_under_path(路径) }
end

#ignore_patternsArray<String>

返回通配符模式大量,用于确定模型加载器是否应忽略给定路径。

返回:

  • ( Array<String> )

    忽略模式大量



115
116
117
# File 'lib/mongoid/loadable.rb', 第115行

def ignore_patterns
  @ignore_patterns ||= DEFAULT_IGNORE_PATTERNS.dup
end

#ignore_patterns= (patterns) 对象

将忽略模式设置为给定的模式大量。 这些通配符模式可确定模型加载器是否应忽略给定路径。

参数:

  • 模式 ( Array<String> )

    通配符模式列表



132
133
134
# File 'lib/mongoid/loadable.rb', 第132行

def ignore_patterns=(模式)
  @ignore_patterns = 模式
end

# 忽略? (file_path) ⇒ true | false

如果给定文件路径与任何忽略模式匹配,则返回 true。

参数:

  • FILE_PATH ( string )

    要考虑的文件路径

返回:

  • ( true | false )

    是否应忽略给定的文件路径。



142
143
144
# File 'lib/mongoid/loadable.rb', 第142行

def 忽略?(FILE_PATH)
  ignore_patterns.任何? { |模式| file.fnmatch?(模式, FILE_PATH) }
end

# load_model (文件) ⇒对象

此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。

一种加载模型文件的便捷方法。 如果 Rails 的 'require_dependency' 方法存在,则会使用该方法;否则将使用“require”。

例子:

加载模型。

Mongoid.load_model("/mongoid/behavior")

参数:

  • 文件 ( string )

    基本文件名。



87
88
89
90
91
92
93
# File 'lib/mongoid/loadable.rb', 第87行

def load_model(文件)
  if 定义?(require_dependency)
    require_dependency(文件)
  else
    require(文件)
  end
end

# load_models (paths = model_paths) ⇒对象

搜索模型路径列表以获取每个模型并引用它,以便索引和继承在开发和生产中都能发挥作用,并获得相同的结果。

例子:

从默认模型路径加载所有应用程序模型。

Mongoid.load_models

从一设立非标准路径加载所有应用程序模型。

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

参数:

  • paths 数组 (默认为: model_paths

    应查找模型文件的路径列表。 这些必须是绝对路径,或是相对于当前工作目录的路径。



33
34
35
36
37
38
39
40
41
# File 'lib/mongoid/loadable.rb', 第33行

def load_models(paths = model_paths)
  的知识 = files_under_paths(paths)

  的知识.sort. do |文件|
    load_model(文件)
  end

  nil
end

# model_pathsArray<String>

返回应用程序的模型定义所在路径的大量。 如果 Rails 已加载,则默认为配置的“应用/models”路径(例如 ' config.paths `); 否则,默认为“%w(./ 应用/models ./lib/models)”。

请注意,这些路径是模型所在目录层次结构的;不必指明每个子目录,只要这些根路径位于 '$LOAD_PATH` 中即可。

返回:

  • ( Array<String> )

    模型路径大量



105
106
107
108
109
# File 'lib/mongoid/loadable.rb', 第105行

def model_paths
  @model_paths ||= 定义?(Rails) ?
    Rails.应用程序.config.paths[" 应用/models "].已扩展 :
    DEFAULT_MODEL_PATHS
end

# model_paths= (paths) ⇒对象

将模型路径设置为给定的路径大量。 这些是应用程序的模型定义所在的路径。

参数:

  • paths ( Array<String> )

    模型路径列表



123
124
125
# File 'lib/mongoid/loadable.rb', 第123行

def model_paths=(paths)
  @model_paths = paths
end