Sha256: 5024a44c3cda183aeb4e83dfd235e3343a3ca4437ba44d944ea5ee18d5a3162c

Contents?: true

Size: 448 Bytes

Versions: 6

Compression:

Stored size: 448 Bytes

Contents

# frozen_string_literal: true

module Dry
  module Transaction
    # @api private
    class Stack
      RETURN = -> x { x }

      def initialize(steps)
        @stack = compile(steps)
      end

      def call(m)
        @stack.(m)
      end

      private

      def compile(steps)
        steps.reverse.reduce(RETURN) do |next_step, step|
          proc { |m| m.bind { |value| step.(value, next_step) } }
        end
      end
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
dry-transaction-0.16.0 lib/dry/transaction/stack.rb
dry-transaction-0.15.0 lib/dry/transaction/stack.rb
dry-transaction-0.14.0 lib/dry/transaction/stack.rb
dry-transaction-0.13.3 lib/dry/transaction/stack.rb
dry-transaction-0.13.2 lib/dry/transaction/stack.rb
dry-transaction-0.13.1 lib/dry/transaction/stack.rb