Class: Strobe::IdentityMap
- Inherits:
-
Object
- Object
- Strobe::IdentityMap
- Defined in:
- lib/strobe/identity_map.rb
Class Method Summary collapse
- .current ⇒ Object
- .forget(klass, key) ⇒ Object
- .identify(klass, key) ⇒ Object
- .reset! ⇒ Object
- .wrap ⇒ Object
Instance Method Summary collapse
- #[](klass, key) ⇒ Object
- #[]=(klass, key, val) ⇒ Object
-
#initialize ⇒ IdentityMap
constructor
A new instance of IdentityMap.
- #reset! ⇒ Object
Constructor Details
#initialize ⇒ IdentityMap
Returns a new instance of IdentityMap.
32 33 34 |
# File 'lib/strobe/identity_map.rb', line 32 def initialize reset! end |
Class Method Details
.current ⇒ Object
28 29 30 |
# File 'lib/strobe/identity_map.rb', line 28 def self.current Thread.current[:__strobe_im] end |
.forget(klass, key) ⇒ Object
20 21 22 |
# File 'lib/strobe/identity_map.rb', line 20 def self.forget(klass, key) current && key && current[klass, key] = nil end |
.identify(klass, key) ⇒ Object
10 11 12 13 14 15 16 17 18 |
# File 'lib/strobe/identity_map.rb', line 10 def self.identify(klass, key) return yield unless current && key inst = current[klass, key] return inst if inst current[klass, key] = yield if block_given? end |
.reset! ⇒ Object
24 25 26 |
# File 'lib/strobe/identity_map.rb', line 24 def self.reset! current && current.reset! end |
.wrap ⇒ Object
3 4 5 6 7 8 |
# File 'lib/strobe/identity_map.rb', line 3 def self.wrap Thread.current[:__strobe_im] = new yield ensure Thread.current[:__strobe_im] = nil end |
Instance Method Details
#[](klass, key) ⇒ Object
36 37 38 39 |
# File 'lib/strobe/identity_map.rb', line 36 def [](klass, key) key = klass.key.typecast(key) if klass.respond_to?(:key) @map[klass.to_s][key] end |
#[]=(klass, key, val) ⇒ Object
41 42 43 44 |
# File 'lib/strobe/identity_map.rb', line 41 def []=(klass, key, val) key = klass.key.typecast(key) if klass.respond_to?(:key) @map[klass.to_s][key] = val end |
#reset! ⇒ Object
46 47 48 |
# File 'lib/strobe/identity_map.rb', line 46 def reset! @map = Hash.new { |h,k| h[k] = {} } end |