Sha256: 8bcec92bcf86f8e6ae815d716bc5a829fc7f5fb4ec12f8dadd8f0c0ed107118b

Contents?: true

Size: 582 Bytes

Versions: 12

Compression:

Stored size: 582 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

12 entries across 12 versions & 1 rubygems

Version Path
upperkut-0.7.0 lib/upperkut/middleware.rb
upperkut-0.6.0 lib/upperkut/middleware.rb
upperkut-0.5.2 lib/upperkut/middleware.rb
upperkut-0.5.1 lib/upperkut/middleware.rb
upperkut-0.5.0 lib/upperkut/middleware.rb
upperkut-0.4.6 lib/upperkut/middleware.rb
upperkut-0.4.5 lib/upperkut/middleware.rb
upperkut-0.4.4 lib/upperkut/middleware.rb
upperkut-0.4.3 lib/upperkut/middleware.rb
upperkut-0.4.2 lib/upperkut/middleware.rb
upperkut-0.4.1 lib/upperkut/middleware.rb
upperkut-0.4.0 lib/upperkut/middleware.rb