Module: MongoMapper::Plugins::Keys::ClassMethods
- Defined in:
- lib/mongo_mapper/plugins/keys.rb
Instance Method Summary collapse
- #dealias_key(name) ⇒ Object
- #dealias_keys(hash) ⇒ Object (also: #dealias, #unalias)
- #defined_keys ⇒ Object
- #dynamic_keys ⇒ Object
- #from_mongo(value) ⇒ Object
- #inherited(descendant) ⇒ Object
- #key(*args) ⇒ Object
- #key?(key) ⇒ Boolean
- #keys ⇒ Object
-
#load(attrs, with_cast = false) ⇒ Object
load is overridden in identity map to ensure same objects are loaded.
- #object_id_key?(name) ⇒ Boolean
- #object_id_keys ⇒ Object
- #persisted_name(name) ⇒ Object (also: #abbr)
- #remove_key(name) ⇒ Object
- #to_mongo(instance) ⇒ Object
- #unaliased_keys ⇒ Object
- #using_object_id? ⇒ Boolean
Instance Method Details
#dealias_key(name) ⇒ Object
49 50 51 52 |
# 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) ⇒ Object Also known as: dealias, unalias
39 40 41 42 43 44 45 46 47 |
# 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 ⇒ Object
31 32 33 |
# 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 ⇒ Object
27 28 29 |
# 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) ⇒ Object
112 113 114 |
# File 'lib/mongo_mapper/plugins/keys.rb', line 112 def from_mongo(value) value && (value.instance_of?(self) ? value : load(value)) end |
#inherited(descendant) ⇒ Object
18 19 20 21 |
# File 'lib/mongo_mapper/plugins/keys.rb', line 18 def inherited(descendant) descendant.instance_variable_set(:@keys, keys.dup) super end |
#key(*args) ⇒ Object
57 58 59 60 61 62 63 64 65 66 67 |
# 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) ⇒ Boolean
92 93 94 |
# File 'lib/mongo_mapper/plugins/keys.rb', line 92 def key?(key) keys.key? key.to_s end |
#keys ⇒ Object
23 24 25 |
# File 'lib/mongo_mapper/plugins/keys.rb', line 23 def keys @keys ||= {} end |
#load(attrs, with_cast = false) ⇒ Object
load is overridden in identity map to ensure same objects are loaded
117 118 119 120 121 122 123 124 |
# 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) ⇒ Boolean
104 105 106 |
# 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 ⇒ Object
100 101 102 |
# 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) ⇒ Object Also known as: abbr
83 84 85 86 87 88 89 |
# 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 |
#remove_key(name) ⇒ Object
69 70 71 72 73 74 75 76 77 78 79 80 81 |
# 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) ⇒ Object
108 109 110 |
# File 'lib/mongo_mapper/plugins/keys.rb', line 108 def to_mongo(instance) instance && instance.to_mongo end |
#unaliased_keys ⇒ Object
35 36 37 |
# 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? ⇒ Boolean
96 97 98 |
# File 'lib/mongo_mapper/plugins/keys.rb', line 96 def using_object_id? object_id_key?(:_id) end |