class Dry::Effects::DryAutoEffectsStrategies::Static

Private Instance Methods

define_readers(dynamic = false) click to toggle source
# File lib/dry/effects/extensions/auto_inject.rb, line 27
def define_readers(dynamic = false) # rubocop:disable Style/OptionalBooleanParameter
  map = dependency_map.to_h
  cache = ::Concurrent::Map.new
  instance_mod.class_exec do
    map.each do |name, identifier|
      resolve = ::Dry::Effects::Constructors::Resolve(identifier)

      if dynamic
        define_method(name) { ::Dry::Effects.yield(resolve) }
      else
        define_method(name) do
          cache.fetch_or_store(name) do
            ::Dry::Effects.yield(resolve)
          end
        end
      end
    end
  end
  self
end