class LunaPark::Extensions::Injector::Dependencies
Hash for define dependencies in {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
Public Class Methods
try_convert(obj)
click to toggle source
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
Calls superclass method
# File lib/luna_park/extensions/injector/dependencies.rb, line 38 def try_convert(obj) super.nil? ? nil : new.replace(super) end
Also aliased as: wrap
Public Instance Methods
[]=(key, _val)
click to toggle source
Calls superclass method
# File lib/luna_park/extensions/injector/dependencies.rb, line 54 def []=(key, _val) cache.delete(key) super end
call_with_cache(key)
click to toggle source
Run dependency code and cache result.
use_case.dependencies[:messenger] # => #<Proc:0x0000564a0d90d438@t.rb:34> use_case.dependencies.call_with_cache(:messenger) # => 'Foobar'
# 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
Private Instance Methods
cache()
click to toggle source
# File lib/luna_park/extensions/injector/dependencies.rb, line 61 def cache @cache ||= {} end