Class: Dry::Effects::Effects::State
- Inherits:
-
Module
- Object
- Module
- Dry::Effects::Effects::State
- Defined in:
- lib/dry/effects/effects/state.rb
Direct Known Subclasses
Defined Under Namespace
Classes: State
Instance Method Summary collapse
-
#initialize(scope, default: Undefined, writer: true, as: scope) ⇒ State
constructor
A new instance of State.
Constructor Details
#initialize(scope, default: Undefined, writer: true, as: scope) ⇒ State
Returns a new instance of State.
13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
# File 'lib/dry/effects/effects/state.rb', line 13 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 |