Module: MongoMapper::Plugins::IdentityMap

Extended by:
ActiveSupport::Concern
Included in:
Document
Defined in:
lib/mongo_mapper/plugins/identity_map.rb

Defined Under Namespace

Modules: ClassMethods

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.clearObject



25
26
27
# File 'lib/mongo_mapper/plugins/identity_map.rb', line 25

def self.clear
  repository.clear
end

.enabledObject



13
14
15
# File 'lib/mongo_mapper/plugins/identity_map.rb', line 13

def self.enabled
  Thread.current[:mongo_mapper_identity_map_enabled]
end

.enabled=(flag) ⇒ Object



9
10
11
# File 'lib/mongo_mapper/plugins/identity_map.rb', line 9

def self.enabled=(flag)
  Thread.current[:mongo_mapper_identity_map_enabled] = flag
end

.enabled?Boolean

Returns:



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

def self.enabled?
  enabled == true
end

.include?(document) ⇒ Boolean

Returns:



29
30
31
# File 'lib/mongo_mapper/plugins/identity_map.rb', line 29

def self.include?(document)
  repository.key?(IdentityMap.key(document.class, document._id))
end

.key(model, id) ⇒ Object



33
34
35
# File 'lib/mongo_mapper/plugins/identity_map.rb', line 33

def self.key(model, id)
  "#{model.single_collection_root.name}:#{id}"
end

.repositoryObject



21
22
23
# File 'lib/mongo_mapper/plugins/identity_map.rb', line 21

def self.repository
  Thread.current[:mongo_mapper_identity_map] ||= {}
end

.useObject



37
38
39
40
41
42
43
44
# File 'lib/mongo_mapper/plugins/identity_map.rb', line 37

def self.use
  old, self.enabled = enabled, true

  yield if block_given?
ensure
  self.enabled = old
  clear
end

.withoutObject



46
47
48
49
50
51
52
# File 'lib/mongo_mapper/plugins/identity_map.rb', line 46

def self.without
  old, self.enabled = enabled, false

  yield if block_given?
ensure
  self.enabled = old
end

Instance Method Details

#add_to_identity_mapObject



94
95
96
97
98
99
# File 'lib/mongo_mapper/plugins/identity_map.rb', line 94

def add_to_identity_map
  if IdentityMap.enabled?
    key = IdentityMap.key(self.class, _id)
    IdentityMap.repository[key] = self
  end
end

#deleteObject



90
91
92
# File 'lib/mongo_mapper/plugins/identity_map.rb', line 90

def delete
  super.tap { remove_from_identity_map }
end

#remove_from_identity_mapObject



101
102
103
104
105
106
# File 'lib/mongo_mapper/plugins/identity_map.rb', line 101

def remove_from_identity_map
  if IdentityMap.enabled?
    key = IdentityMap.key(self.class, _id)
    IdentityMap.repository.delete(key)
  end
end

#save(*args) ⇒ Object



86
87
88
# File 'lib/mongo_mapper/plugins/identity_map.rb', line 86

def save(*args)
  super.tap { |result| add_to_identity_map if result }
end