module MongoMapper::Plugins::Keys::ClassMethods
Public Instance Methods
dealias_key(name)
click to toggle source
# File lib/mongo_mapper/plugins/keys.rb, line 49 def dealias_key(name) key = keys[name.to_s] key && key.abbr || k end
dealias_keys(hash)
click to toggle source
# File lib/mongo_mapper/plugins/keys.rb, line 39 def dealias_keys(hash) out = {} hash.each do |k, v| key = keys[k.to_s] name = key && key.abbr || k out[name] = k.to_s.match(/^\$/) && v.is_a?(Hash) ? dealias_keys(v) : v end out end
defined_keys()
click to toggle source
# File lib/mongo_mapper/plugins/keys.rb, line 31 def defined_keys @defined_keys ||= Hash[*unaliased_keys.select {|k, v| !v.dynamic? }.flatten(1)] end
dynamic_keys()
click to toggle source
# File lib/mongo_mapper/plugins/keys.rb, line 27 def dynamic_keys @dynamic_keys ||= Hash[*unaliased_keys.select {|k, v| v.dynamic? }.flatten(1)] end
from_mongo(value)
click to toggle source
# File lib/mongo_mapper/plugins/keys.rb, line 112 def from_mongo(value) value && (value.instance_of?(self) ? value : load(value)) end
inherited(descendant)
click to toggle source
Calls superclass method
# File lib/mongo_mapper/plugins/keys.rb, line 18 def inherited(descendant) descendant.instance_variable_set(:@keys, keys.dup) super end
key(*args)
click to toggle source
# File lib/mongo_mapper/plugins/keys.rb, line 57 def key(*args) Key.new(*args).tap do |key| keys[key.name] = key keys[key.abbr] = key if key.abbr create_accessors_for(key) if key.valid_ruby_name? && !key.reserved_name? create_key_in_descendants(*args) create_indexes_for(key) create_validations_for(key) @dynamic_keys = @defined_keys = @unaliased_keys = @object_id_keys = nil end end
key?(key)
click to toggle source
# File lib/mongo_mapper/plugins/keys.rb, line 92 def key?(key) keys.key? key.to_s end
keys()
click to toggle source
# File lib/mongo_mapper/plugins/keys.rb, line 23 def keys @keys ||= {} end
load(attrs, with_cast = false)
click to toggle source
load is overridden in identity map to ensure same objects are loaded
# File lib/mongo_mapper/plugins/keys.rb, line 117 def load(attrs, with_cast = false) return nil if attrs.nil? begin attrs['_type'] ? attrs['_type'].constantize : self rescue NameError self end.allocate.initialize_from_database(attrs, with_cast) end
object_id_key?(name)
click to toggle source
# File lib/mongo_mapper/plugins/keys.rb, line 104 def object_id_key?(name) object_id_keys.include?(name.to_sym) end
object_id_keys()
click to toggle source
# File lib/mongo_mapper/plugins/keys.rb, line 100 def object_id_keys @object_id_keys ||= unaliased_keys.keys.select { |key| keys[key].type == ObjectId }.map(&:to_sym) end
persisted_name(name)
click to toggle source
# File lib/mongo_mapper/plugins/keys.rb, line 83 def persisted_name(name) if key = keys[name.to_s] key.persisted_name else name end end
Also aliased as: abbr
remove_key(name)
click to toggle source
# File lib/mongo_mapper/plugins/keys.rb, line 69 def remove_key(name) if key = keys[name.to_s] keys.delete key.name keys.delete key.abbr remove_method key.name if respond_to? "#{key.name}" remove_method "#{key.name}=" if respond_to? "#{key.name}=" remove_method "#{key.name}?" if respond_to? "#{key.name}?" remove_method "#{key.name}_before_type_cast" if respond_to? "#{key.name}_before_type_cast" remove_key_in_descendants key.name remove_validations_for key.name @dynamic_keys = @defined_keys = @unaliased_keys = @object_id_keys = nil end end
to_mongo(instance)
click to toggle source
# File lib/mongo_mapper/plugins/keys.rb, line 108 def to_mongo(instance) instance && instance.to_mongo end
unaliased_keys()
click to toggle source
# File lib/mongo_mapper/plugins/keys.rb, line 35 def unaliased_keys @unaliased_keys ||= Hash[*keys.select {|k, v| k == v.name }.flatten(1)] end
using_object_id?()
click to toggle source
# File lib/mongo_mapper/plugins/keys.rb, line 96 def using_object_id? object_id_key?(:_id) end
Private Instance Methods
accessors_module()
click to toggle source
# File lib/mongo_mapper/plugins/keys.rb, line 138 def accessors_module if key_accessors_module_defined? const_get 'MongoMapperKeys' else const_set 'MongoMapperKeys', Module.new end end
callback_filter(callback)
click to toggle source
# File lib/mongo_mapper/plugins/keys.rb, line 266 def callback_filter(callback) callback.filter end
create_accessors_for(key) { || ... }
click to toggle source
# File lib/mongo_mapper/plugins/keys.rb, line 146 def create_accessors_for(key) if key.read_accessor? accessors_module.module_eval(<<-end_eval, __FILE__, __LINE__+1) def #{key.name} read_key(:#{key.name}) end def #{key.name}_before_type_cast read_key_before_type_cast(:#{key.name}) end end_eval end if key.write_accessor? accessors_module.module_eval(<<-end_eval, __FILE__, __LINE__+1) def #{key.name}=(value) write_key(:#{key.name}, value) end end_eval end if key.predicate_accessor? accessors_module.module_eval(<<-end_eval, __FILE__, __LINE__+1) def #{key.name}? read_key(:#{key.name}).present? end end_eval end if block_given? accessors_module.module_eval do yield end end include accessors_module end
create_indexes_for(key)
click to toggle source
# File lib/mongo_mapper/plugins/keys.rb, line 192 def create_indexes_for(key) if key.options[:index] && !key.embeddable? warn "[DEPRECATION] :index option when defining key #{key.name.inspect} is deprecated. Put indexes in `db/indexes.rb`" ensure_index key.name end end
create_key_in_descendants(*args)
click to toggle source
# File lib/mongo_mapper/plugins/keys.rb, line 184 def create_key_in_descendants(*args) descendants.each { |descendant| descendant.key(*args) } end
create_validations_for(key)
click to toggle source
# File lib/mongo_mapper/plugins/keys.rb, line 199 def create_validations_for(key) attribute = key.name.to_sym if key.options[:required] if key.type == Boolean validates_inclusion_of attribute, :in => [true, false] else validates_presence_of(attribute) end end if key.options[:unique] validates_uniqueness_of(attribute) end if key.options[:numeric] number_options = key.type == Integer ? {:only_integer => true} : {} validates_numericality_of(attribute, number_options) end if key.options[:format] validates_format_of(attribute, :with => key.options[:format]) end if key.options[:in] validates_inclusion_of(attribute, :in => key.options[:in]) end if key.options[:not_in] validates_exclusion_of(attribute, :in => key.options[:not_in]) end if key.options[:length] length_options = case key.options[:length] when Integer {:minimum => 0, :maximum => key.options[:length]} when Range {:within => key.options[:length]} when Hash key.options[:length] end validates_length_of(attribute, length_options) end end
key_accessors_module_defined?()
click to toggle source
# File lib/mongo_mapper/plugins/keys.rb, line 128 def key_accessors_module_defined? # :nocov: if IS_RUBY_1_9 const_defined?('MongoMapperKeys') else const_defined?('MongoMapperKeys', false) end # :nocov: end
remove_key_in_descendants(name)
click to toggle source
# File lib/mongo_mapper/plugins/keys.rb, line 188 def remove_key_in_descendants(name) descendants.each { |descendant| descendant.remove_key(name) } end
remove_validate_callbacks(a_name)
click to toggle source
# File lib/mongo_mapper/plugins/keys.rb, line 252 def remove_validate_callbacks(a_name) chain = _validate_callbacks.dup.reject do |callback| f = callback_filter(callback) f.respond_to?(:attributes) && f.attributes == a_name end reset_callbacks(:validate) chain.each do |callback| set_callback 'validate', callback_filter(callback) end end
remove_validations_for(name)
click to toggle source
# File lib/mongo_mapper/plugins/keys.rb, line 244 def remove_validations_for(name) name = name.to_sym a_name = [name] _validators.reject!{ |key, _| key == name } remove_validate_callbacks a_name end