Module: MongoMapper::Plugins::Keys::ClassMethods

Defined in:
lib/mongo_mapper/plugins/keys.rb

Instance Method Summary collapse

Instance Method Details

#from_mongo(value) ⇒ Object



49
50
51
52
# File 'lib/mongo_mapper/plugins/keys.rb', line 49

def from_mongo(value)
  return nil if value.nil?
  value.is_a?(self) ? value : load(value)
end

#inherited(descendant) ⇒ Object



11
12
13
14
15
# File 'lib/mongo_mapper/plugins/keys.rb', line 11

def inherited(descendant)
  key :_type, String unless keys.keys.include?(:_type)
  descendant.instance_variable_set(:@keys, keys.dup)
  super
end

#key(*args) ⇒ Object



21
22
23
24
25
26
27
28
29
# File 'lib/mongo_mapper/plugins/keys.rb', line 21

def key(*args)
  Key.new(*args).tap do |key|
    keys[key.name] = key
    create_accessors_for(key)
    create_key_in_descendants(*args)
    create_indexes_for(key)
    create_validations_for(key)
  end
end

#key?(key) ⇒ Boolean

Returns:



31
32
33
# File 'lib/mongo_mapper/plugins/keys.rb', line 31

def key?(key)
  keys.keys.include?(key.to_s)
end

#keysObject



17
18
19
# File 'lib/mongo_mapper/plugins/keys.rb', line 17

def keys
  @keys ||= HashWithIndifferentAccess.new
end

#load(attrs) ⇒ Object

load is overridden in identity map to ensure same objects are loaded



55
56
57
58
59
60
61
62
# File 'lib/mongo_mapper/plugins/keys.rb', line 55

def load(attrs)
  begin
    klass = attrs['_type'].present? ? attrs['_type'].constantize : self
    klass.new(attrs, true)
  rescue NameError
    new(attrs, true)
  end
end

#object_id_key?(name) ⇒ Boolean

Returns:



39
40
41
42
# File 'lib/mongo_mapper/plugins/keys.rb', line 39

def object_id_key?(name)
  key = keys[name.to_s]
  key && key.type == ObjectId
end

#to_mongo(instance) ⇒ Object



44
45
46
47
# File 'lib/mongo_mapper/plugins/keys.rb', line 44

def to_mongo(instance)
  return nil if instance.nil?
  instance.to_mongo
end

#using_object_id?Boolean

Returns:



35
36
37
# File 'lib/mongo_mapper/plugins/keys.rb', line 35

def using_object_id?
  object_id_key?(:_id)
end