Module: Toy::IdentityMap

Extended by:
ActiveSupport::Concern
Defined in:
lib/toy/identity_map.rb

Defined Under Namespace

Modules: ClassMethods

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.clearObject



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

def self.clear
  repository.clear
end

.enabledObject



10
11
12
# File 'lib/toy/identity_map.rb', line 10

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

.enabled=(flag) ⇒ Object



6
7
8
# File 'lib/toy/identity_map.rb', line 6

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

.enabled?Boolean

Returns:



14
15
16
# File 'lib/toy/identity_map.rb', line 14

def self.enabled?
  enabled == true
end

.include?(object) ⇒ Boolean

Returns:



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

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

.repositoryObject



18
19
20
# File 'lib/toy/identity_map.rb', line 18

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

.useObject



30
31
32
33
34
35
36
37
# File 'lib/toy/identity_map.rb', line 30

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

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

.withoutObject



39
40
41
42
43
44
45
# File 'lib/toy/identity_map.rb', line 39

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

  yield if block_given?
ensure
  self.enabled = old
end

Instance Method Details

#add_to_identity_mapObject



74
75
76
# File 'lib/toy/identity_map.rb', line 74

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

#deleteObject



70
71
72
# File 'lib/toy/identity_map.rb', line 70

def delete(*)
  super.tap { remove_from_identity_map }
end

#remove_from_identity_mapObject



78
79
80
# File 'lib/toy/identity_map.rb', line 78

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

#saveObject



66
67
68
# File 'lib/toy/identity_map.rb', line 66

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