class Dry::Effects::Effects::Cache
Public Class Methods
new(scope = nil, shared: false, **kw)
click to toggle source
Calls superclass method
# File lib/dry/effects/effects/cache.rb, line 13 def initialize(scope = nil, shared: false, **kw) super() if !kw.empty? scope, as = kw.to_a[0] elsif scope.is_a?(::Hash) scope, as = scope.to_a[0] else as = :cache end fetch_or_store = CacheEffect.new( type: :cache, name: :fetch_or_store, scope: scope ) key = key(shared) module_eval do Array(as).each do |meth| define_method(meth) do |*args, &block| if block eff = fetch_or_store.(key.(self, args), block) else eff = fetch_or_store.(key.(self, args, method: meth), -> { super(*args) }) end ::Dry::Effects.yield(eff) end end end end
Public Instance Methods
cache_key(instance, args, method: Undefined)
click to toggle source
# File lib/dry/effects/effects/cache.rb, line 63 def cache_key(instance, args, method: Undefined) if Undefined.equal?(method) [instance, args] else [instance, method, args] end end
key(shared)
click to toggle source
# File lib/dry/effects/effects/cache.rb, line 47 def key(shared) if shared method(:shared_cache_key) else method(:cache_key) end end