Sha256: 597b8ca6e29849fdce697d7a10d49a188bd334bbec83615d0b0e80c80710f1a8
Contents?: true
Size: 1.66 KB
Versions: 1
Compression:
Stored size: 1.66 KB
Contents
# frozen_string_literal: true require "dry/effects/provider" require "dry/effects/instructions/raise" module Dry module Effects module Providers class Env < Provider[:env] include ::Dry::Equalizer(:values, :dynamic, inspect: false) Locate = Effect.new(type: :env, name: :locate) param :values, default: -> { EMPTY_HASH } attr_reader :parent def read(key) parent.fetch(key) { fetch(key) } end def fetch(key) values.fetch(key) do if key.is_a?(::String) && ::ENV.key?(key) ::ENV[key] else yield end end end protected :fetch # Locate handler in the stack # # @return [Provider] # @api private def locate self end # Yield the block with the handler installed # # @api private def call(values = EMPTY_HASH, options = EMPTY_HASH) unless values.empty? @values = @values.merge(values) end if options.fetch(:overridable, false) @parent = ::Dry::Effects.yield(Locate) { EMPTY_HASH } else @parent = EMPTY_HASH end yield end # @param [Effect] effect # @return [Boolean] # @api public def provide?(effect) if super !effect.name.equal?(:read) || key?(effect.payload[0]) else false end end def key?(key) values.key?(key) || key.is_a?(::String) && ::ENV.key?(key) || parent.key?(key) end end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
dry-effects-0.2.0 | lib/dry/effects/providers/env.rb |