Sha256: 81ea7c1cca077652e5148622d34010b69018c487909cb8e00a019be856524e50

Contents?: true

Size: 488 Bytes

Versions: 4

Compression:

Stored size: 488 Bytes

Contents

# frozen_string_literal: true

module Wayfarer
  module Middleware
    Chain = Struct.new(:middlewares) do
      extend Forwardable

      def self.empty
        new([])
      end

      delegate push: :middlewares

      def call(task)
        traverse = lambda do |i|
          if middlewares[i]
            middlewares[i].call(task) { traverse.call(i + 1) }
          elsif block_given?
            yield
          end
        end

        traverse.call(0)
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
wayfarer-0.4.7 lib/wayfarer/middleware/chain.rb
wayfarer-0.4.6 lib/wayfarer/middleware/chain.rb
wayfarer-0.4.5 lib/wayfarer/middleware/chain.rb
wayfarer-0.4.4 lib/wayfarer/middleware/chain.rb