Class: Mongoid::ModelResolver
Relationships & Source Files | |
Super Chains via Extension / Inclusion / Inheritance | |
Class Chain:
self,
Forwardable
|
|
Inherits: | Object |
Defined in: | lib/mongoid/model_resolver.rb |
Overview
The default class for resolving model classes based on discriminant keys. Given a key, it will return the corresponding model class, if any. By default, it looks for classes with names that match the given keys, but additional mappings may be provided.
It is also possible to instantiate multiple resolvers—and even implement your own—so that different sets of classes can use independent resolution mechanics.
Constant Summary
-
INSTANCE_MUTEX =
Internal use only
The mutex instance used to make the .instance method thread-safe.
Mutex.new
Class Method Summary
-
.instance ⇒ Mongoid::ModelResolver
Returns the default instance of the
ModelResolver
. -
.new ⇒ ModelResolver
constructor
Instantiates a new
ModelResolver
instance. -
.register_resolver(resolver, name)
Register the given resolver under the given name.
-
.resolver(identifier_or_object = :default) ⇒ Mongoid::ModelResolver::Interface
Returns the resolver instance that corresponds to the argument.
-
.resolvers ⇒ Hash<Symbol => Mongoid::ModelResolver::Interface>
Returns the map of registered resolvers.
Instance Method Summary
-
#register(klass, *keys)
Registers the given model class with the given keys.
Constructor Details
.new ⇒ ModelResolver
Instantiates a new ModelResolver
instance.
# File 'lib/mongoid/model_resolver.rb', line 75
def initialize @key_to_model = {} @model_to_keys = {} end
Class Method Details
.instance ⇒ ModelResolver
Returns the default instance of the ModelResolver
.
# File 'lib/mongoid/model_resolver.rb', line 27
def instance @instance ||= INSTANCE_MUTEX.synchronize { @instance ||= new } end
.register_resolver(resolver, name)
Register the given resolver under the given name.
.resolver(identifier_or_object = :default) ⇒ Mongoid::ModelResolver::Interface
Returns the resolver instance that corresponds to the argument.
# File 'lib/mongoid/model_resolver.rb', line 52
def resolver(identifier_or_object = :default) case identifier_or_object when nil, false then nil when true, :default then instance when String, Symbol resolvers.fetch(identifier_or_object.to_sym) do |key| raise Mongoid::Errors::UnrecognizedResolver, key end else identifier_or_object end end
.resolvers ⇒ Hash<Symbol => Mongoid::ModelResolver::Interface
>
Returns the map of registered resolvers. The default resolver is not included here.
# File 'lib/mongoid/model_resolver.rb', line 36
def resolvers @resolvers ||= {} end
Instance Method Details
#register(klass, *keys)
Registers the given model class with the given keys. In addition to the given keys, the class name itself will be included as a key to identify the class. Keys are given in priority order, with highest priority keys first and lowest last. The class name, if not given explicitly, is always given lowest priority.
If called more than once, newer keys have higher priority than older keys. All duplicate keys will be removed.
# File 'lib/mongoid/model_resolver.rb', line 90
def register(klass, *keys) default_key = klass.name @model_to_keys[klass] = [ *keys, *@model_to_keys[klass], default_key ].uniq @key_to_model[default_key] = klass keys.each do |key| @key_to_model[key] = klass end self end