Module: Hoodie::IdentityMap

Defined in:
lib/hoodie/identity_map.rb

Defined Under Namespace

Modules: ClassMethods

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.clearObject



38
39
40
# File 'lib/hoodie/identity_map.rb', line 38

def self.clear
  repository.clear
end

.enabledObject



26
27
28
# File 'lib/hoodie/identity_map.rb', line 26

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

.enabled=(flag) ⇒ Object



22
23
24
# File 'lib/hoodie/identity_map.rb', line 22

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

.enabled?Boolean

Returns:

  • (Boolean)


30
31
32
# File 'lib/hoodie/identity_map.rb', line 30

def self.enabled?
  enabled == true
end

.include?(object) ⇒ Boolean

Returns:

  • (Boolean)


42
43
44
# File 'lib/hoodie/identity_map.rb', line 42

def self.include?(object)
  repository.keys.include?(object.id)
end

.repositoryObject



34
35
36
# File 'lib/hoodie/identity_map.rb', line 34

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

.useObject



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

def self.use
  old, self.enabled = enabled, true
  yield if block_given?
ensure
  self.enabled = old
  clear
end

.withoutObject



54
55
56
57
58
59
# File 'lib/hoodie/identity_map.rb', line 54

def self.without
  old, self.enabled = enabled, false
  yield if block_given?
ensure
  self.enabled = old
end

Instance Method Details

#add_to_identity_mapObject



88
89
90
# File 'lib/hoodie/identity_map.rb', line 88

def add_to_identity_map
  IdentityMap.repository[id] = self if IdentityMap.enabled?
end

#deleteObject



84
85
86
# File 'lib/hoodie/identity_map.rb', line 84

def delete
  super.tap { remove_from_identity_map }
end

#remove_from_identity_mapObject



92
93
94
# File 'lib/hoodie/identity_map.rb', line 92

def remove_from_identity_map
  IdentityMap.repository.delete(id) if IdentityMap.enabled?
end

#save(options = {}) ⇒ Object



80
81
82
# File 'lib/hoodie/identity_map.rb', line 80

def save(options={})
  super.tap { |result| add_to_identity_map if result }
end