Sha256: fbfed5d88d5c5efa47e0e7e368c8f4ecf35c0287c51905bc255b40853b4a2942
Contents?: true
Size: 1.3 KB
Versions: 1
Compression:
Stored size: 1.3 KB
Contents
# frozen_string_literal: true module Dry module Effects class Stack extend Initializer include ::Enumerable include ::Dry::Equalizer(:providers) param :providers, default: -> { [] } def call(effect) if effect.is_a?(Effect) && (provider = provider(effect)) if effect.keywords.empty? provider.public_send(effect.name, *effect.payload) else provider.public_send(effect.name, *effect.payload, **effect.keywords) end else yield end rescue ::Exception => e # rubocop:disable Lint/RescueException Instructions::Raise.new(e) end def push(provider) providers.unshift(provider) yield ensure providers.shift end def provider(effect) find { _1.provide?(effect) } end def each(&) providers.each(&) end def size providers.size end def empty? providers.empty? end def dup Stack.new(map(&:dup)) end def to_s if empty? "#<Dry::Effects::Stack>" else stack = map(&:represent).reverse.join("->") "#<Dry::Effects::Stack #{stack}>" end end alias_method :inspect, :to_s end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
dry-effects-0.5.0 | lib/dry/effects/stack.rb |