diff --git a/lib/middleware/builder.rb b/lib/middleware/builder.rb index d2a57ea..fd04113 100644 --- a/lib/middleware/builder.rb +++ b/lib/middleware/builder.rb @@ -52,12 +52,12 @@ def flatten # of the middleware. # # @param [Class] middleware The middleware class - def use(middleware, *args, &block) + def use(middleware, *args, **kwargs, &block) if middleware.kind_of?(Builder) # Merge in the other builder's stack into our own self.stack.concat(middleware.stack) else - self.stack << [middleware, args, block] + self.stack << [middleware, args, kwargs, block] end self diff --git a/lib/middleware/runner.rb b/lib/middleware/runner.rb index 7ce1d15..962d04f 100644 --- a/lib/middleware/runner.rb +++ b/lib/middleware/runner.rb @@ -42,7 +42,7 @@ def build_call_chain(stack) # is always the empty middleware, which does nothing but return. stack.reverse.inject(EMPTY_MIDDLEWARE) do |next_middleware, current_middleware| # Unpack the actual item - klass, args, block = current_middleware + klass, args, kwargs, block = current_middleware # Default the arguments to an empty array. Otherwise in Ruby 1.8 # a `nil` args will actually pass `nil` into the class. Not what @@ -52,7 +52,7 @@ def build_call_chain(stack) if klass.is_a?(Class) # If the klass actually is a class, then instantiate it with # the app and any other arguments given. - klass.new(next_middleware, *args, &block) + klass.new(next_middleware, *args, **kwargs, &block) elsif klass.respond_to?(:call) # Make it a lambda which calls the item then forwards up # the chain.