Class: LunaPark::Extensions::Injector::Dependencies

Inherits:
Hash
  • Object
show all
Defined in:
lib/luna_park/extensions/injector/dependencies.rb

Overview

Hash for define dependencies in LunaPark::Extensions::Injector extension.

Main difference between Hash and Dependencies it is memorization;

# hash example
i = 0

hash = { i: -> { i += 1 } }
hash[:i].call # => 1
hash[:i].call # => 2

# dependencies
i = 0

dependencies =  Dependencies.wrap(i: -> { i += 1 })
dependencies.call_with_cache(:i) # => 1
dependencies.call_with_cache(:i) # => 1

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.try_convert(obj) ⇒ Object Also known as: wrap

Dependencies.try_convert(obj) -> hash or nil

Try to convert obj into a hash, using to_hash method. Returns converted hash or nil if obj cannot be converted for any reason.

See Hash.try_convert

Dependencies.try_convert({1=>2})   # => {1=>2}
Dependencies.try_convert("1=>2")   # => nil


38
39
40
# File 'lib/luna_park/extensions/injector/dependencies.rb', line 38

def try_convert(obj)
  super.nil? ? nil : new.replace(super)
end

Instance Method Details

#[]=(key, _val) ⇒ Object



54
55
56
57
# File 'lib/luna_park/extensions/injector/dependencies.rb', line 54

def []=(key, _val)
  cache.delete(key)
  super
end

#call_with_cache(key) ⇒ Object

Run dependency code and cache result.

use_case.dependencies[:messenger] # => #<Proc:[email protected]:34>
use_case.dependencies.call_with_cache(:messenger) # => 'Foobar'


50
51
52
# File 'lib/luna_park/extensions/injector/dependencies.rb', line 50

def call_with_cache(key)
  cache.key?(key) ? cache[key] : cache[key] = fetch(key).call
end