类:Mongoid::ModelResolver

继承:
对象
  • 对象
显示全部
扩展方式:
可转发
定义于:
lib/mongoid/model_resolver.rb

Overview

用于根据判别键解析模型类的默认类。 给定一个键,它将返回相应的模型类(如果有)。 默认下,它会查找名称与给定键匹配的类,但可能会提供其他映射。

还可以实例化多个解析程序,甚至实现自己的解析程序,以便不同的类集可以使用独立的解析机制。

常量摘要折叠

INSTANCE_MUTEX =

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

用于实例'.实例`方法是线程安全的。

互斥锁.new

类方法摘要折叠

实例方法摘要折叠

构造函数详情

# 初始化 ModelResolver

实例化一个新的 ModelResolver实例。



75
76
77
78
# File 'lib/mongoid/model_resolver.rb', line 75

def 初始化
  @key_to_model = {}
  @model_to_keys = {}
end

类方法详细信息

。实例⇒ Mongoid::ModelResolver

返回 ModelResolver 的默认实例。

返回:



27
28
29
# File 'lib/mongoid/model_resolver.rb', line 27

def 实例
  @instance ||= INSTANCE_MUTEX.同步 { @instance ||= new }
end

register_resolver (resolver, name) ⇒ 对象

用给定名称注册给定解析程序。

参数:

  • 解析器 ( Mongoid::ModelResolver::Interface )

    要注册的解析程序。

  • 名称 ( string | Symbol )

    用于注册解析程序的标识符。



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

def register_resolver(解析器, 名称)
  解析器[名称.to_sym] = 解析器
  self
end

。解析程序 (identifier_or_object = : 默认) ⇒ Mongoid::ModelResolver::Interface

返回与该参数对应的解析程序实例。

参数:

  • identifier_or_object nil | true | false 符号 | 字符串 | Mongoid::ModelResolver::Interface (默认为: 默认 )—

    当 nil 或 false 时,返回 nil。 如果为 true 或: 默认,则对应于默认解析程序。 如果是任何其他符号或字符串,则对应于使用该标识符注册的解析程序。 否则,它本身一定是解析程序实例。

返回:

  • ( Mongoid::ModelResolver::Interface )

    与给定参数对应的解析程序实例。

引发:

  • Mongoid::Errors::UnrecognizedResolver 如果给定的标识符是符号或字符串,并且与任何已注册的解析程序都不匹配。



52
53
54
55
56
57
58
59
60
61
62
# File 'lib/mongoid/model_resolver.rb', line 52

def 解析器(identifier_or_object = :default)
  案例 identifier_or_object
  when nil, false then nil
  when true, :default then 实例
  when 字符串, 符号
    解析器.获取(identifier_or_object.to_sym) do |key|
      提高 Mongoid::Errors::UnrecognizedResolver, key
    end
  else identifier_or_object
  end
end

。解析器 Hash<Symbol => Mongoid::ModelResolver::Interface>

返回已注册解析程序的映射。 此处不包括默认解析程序。

返回:

  • ( Hash<Symbol => Mongoid::ModelResolver::Interface> )

    解析程序实例的哈希值,由符号标识符映射。



36
37
38
# File 'lib/mongoid/model_resolver.rb', line 36

def 解析器
  @resolvers ||= {}
end

实例方法详细信息

#register (klass, *keys) 对象

使用给定的键注册给定的模型类。 除了给定的键之外,类名本身也将作为标识类的键包含在内。 密钥按优先级顺序给出,优先级最高的密钥在最前面,优先级最低的在最后。 如果未明确给出类名,则类名始终具有最低优先级。

如果多次调用,则较新的键比较旧的键具有更高的优先级。 所有重复的键都将被删除。

参数:

  • klass ( Mongoid::Document )

    要注册的文档类

  • *keys ( Array<String> )

    用作别名的键列表(可选)



90
91
92
93
94
95
96
97
98
99
100
101
# File 'lib/mongoid/model_resolver.rb', line 90

def 报名(klass, *密钥)
  default_key = klass.名称

  @model_to_keys[klass] = [ *密钥, *@model_to_keys[klass], default_key ].uniq
  @key_to_model[default_key] = klass

  密钥. do |key|
    @key_to_model[key] = klass
  end

  self
end