From 4dba4c959eee2ff2dae46b536b03e136eb751cfb Mon Sep 17 00:00:00 2001 From: lulalala Date: Sun, 4 Sep 2022 14:09:19 +0800 Subject: [PATCH] Fix keyword argument passing in Ruby 3 https://www.ruby-lang.org/en/news/2019/12/12/separation-of-positional-and-keyword-arguments-in-ruby-3-0/ --- lib/middleware/builder.rb | 4 ++-- lib/middleware/runner.rb | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) 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.