From f9ef9a02a1264d032dbfe4fe5b0fe79241d93cb2 Mon Sep 17 00:00:00 2001 From: Ryuta Kamizono Date: Wed, 22 Jan 2020 12:36:47 +0900 Subject: [PATCH] Fix `use` with kwargs Rails also has similar issue and is already fixed in https://github.com/rails/rails/pull/38091. --- lib/rack/builder.rb | 1 + test/spec_builder.rb | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/rack/builder.rb b/lib/rack/builder.rb index dcd40c76a..ebfa1f118 100644 --- a/lib/rack/builder.rb +++ b/lib/rack/builder.rb @@ -101,6 +101,7 @@ def use(middleware, *args, &block) end @use << proc { |app| middleware.new(app, *args, &block) } end + ruby2_keywords(:use) if respond_to?(:ruby2_keywords, true) # Takes an argument that is an object that responds to #call and returns a Rack response. # The simplest form of this is a lambda object: diff --git a/test/spec_builder.rb b/test/spec_builder.rb index 853fb7b12..06918616d 100644 --- a/test/spec_builder.rb +++ b/test/spec_builder.rb @@ -8,7 +8,7 @@ require 'rack/urlmap' class NothingMiddleware - def initialize(app) + def initialize(app, **) @app = app end def call(env) @@ -45,7 +45,7 @@ def builder_to_app(&block) it "doesn't dupe env even when mapping" do app = builder_to_app do - use NothingMiddleware + use NothingMiddleware, noop: :noop map '/' do |outer_env| run lambda { |inner_env| inner_env['new_key'] = 'new_value'