class Dry::Effects::Effects::State
Public Class Methods
new(scope, default: Undefined, writer: true, as: scope)
click to toggle source
Calls superclass method
# File lib/dry/effects/effects/state.rb, line 24 def initialize(scope, default: Undefined, writer: true, as: scope) super() read = State.new(type: :state, name: :read, scope: scope) write = State.new(type: :state, name: :write, scope: scope) module_eval do if Undefined.equal?(default) define_method(as) do |&block| if block Undefined.default(::Dry::Effects.yield(read) { Undefined }, &block) else value = ::Dry::Effects.yield(read) { raise Errors::MissingStateError, read } Undefined.default(value) { raise Errors::UndefinedStateError, read } end end else define_method(as) do |&block| if block Undefined.default(::Dry::Effects.yield(read) { Undefined }, &block) else Undefined.default(::Dry::Effects.yield(read) { Undefined }, default) end end end if writer define_method(:"#{as}=") do |value| ::Dry::Effects.yield(write.(value: value)) end end end end