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
wrap(obj)
Alias for: try_convert

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