Sha256: 5c84cabc96a5d75c6c1f38fd14ba6cb3b74cd3d68beab029a597e2b9a097735b
Contents?: true
Size: 1.41 KB
Versions: 1
Compression:
Stored size: 1.41 KB
Contents
# frozen_string_literal: true require "dry/effects/initializer" require "dry/effects/effect" require "dry/effects/instructions/raise" 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 { |p| p.provide?(effect) } end def each(&block) providers.each(&block) 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.2.0 | lib/dry/effects/stack.rb |