Sha256: 4916a172e59f3d8550710c6d1eea4d8a3a46af1798e2917d4d9d892a51f03e5c

Contents?: true

Size: 583 Bytes

Versions: 9

Compression:

Stored size: 583 Bytes

Contents

module Upperkut
  module Middleware
    class Chain
      attr_reader :items

      def initialize
        @items = []
      end

      def add(item)
        return @items if @items.include?(item)

        @items << item
      end

      def remove(item)
        @items.delete(item)
      end

      def invoke(*args)
        chain = @items.map(&:new)

        traverse_chain = lambda do
          if chain.empty?
            yield
          else
            chain.shift.call(*args, &traverse_chain)
          end
        end

        traverse_chain.call
      end
    end
  end
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
upperkut-1.0.4 lib/upperkut/middleware.rb
upperkut-1.0.2 lib/upperkut/middleware.rb
upperkut-1.0.0.rc lib/upperkut/middleware.rb
upperkut-0.8.1 lib/upperkut/middleware.rb
upperkut-0.8.0 lib/upperkut/middleware.rb
upperkut-0.7.5 lib/upperkut/middleware.rb
upperkut-0.7.4 lib/upperkut/middleware.rb
upperkut-0.7.2 lib/upperkut/middleware.rb
upperkut-0.7.1 lib/upperkut/middleware.rb