Sha256: ce9146792580127827cbfebb892b44058c08edcdbdd935bbb9b6f4699e798fcf

Contents?: true

Size: 1.1 KB

Versions: 3

Compression:

Stored size: 1.1 KB

Contents

module Lita
  # Stores Rack middleware for later use in a +Rack::Builder+.
  # @since 4.0.2
  # @api private
  class MiddlewareRegistry
    # A Rack middleware and its initialization arguments.
    class MiddlewareWrapper < Struct.new(:middleware, :args, :block); end

    extend Forwardable

    def_delegators :@registry, :each, :empty?

    def initialize
      @registry = []
    end

    # Adds a Rack middleware with no initialization arguments.
    # @param middleware [#call] A Rack middleware.
    # @return [void]
    def push(middleware)
      @registry << MiddlewareWrapper.new(middleware, [], nil)
    end
    alias_method :<<, :push

    # Adds a Rack middleware with initialization argumens. Uses the same interface as
    # +Rack::Builder#use+.
    # @param middleware [#call] A Rack middleware.
    # @param args [Array] Arbitrary initialization arguments for the middleware.
    # @yield An optional block to be passed to the constructor of the middleware.
    # @return [void]
    def use(middleware, *args)
      @registry << MiddlewareWrapper.new(middleware, args, (proc if block_given?))
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
lita-4.0.4 lib/lita/middleware_registry.rb
lita-4.0.3 lib/lita/middleware_registry.rb
lita-4.0.2 lib/lita/middleware_registry.rb