diff --git a/lib/sinatra/base.rb b/lib/sinatra/base.rb index 4b5fbb0ce2..20ff0b418d 100644 --- a/lib/sinatra/base.rb +++ b/lib/sinatra/base.rb @@ -1947,6 +1947,8 @@ def self.delegate(*methods) return super(*args, &block) if respond_to? method_name Delegator.target.send(method_name, *args, &block) end + # ensure keyword argument passing is compatible with ruby >= 2.7 + ruby2_keywords(method_name) if respond_to?(:ruby2_keywords, true) private method_name end end diff --git a/test/delegator_test.rb b/test/delegator_test.rb index bd4425eb63..daf2c46d17 100644 --- a/test/delegator_test.rb +++ b/test/delegator_test.rb @@ -88,6 +88,17 @@ def target assert_equal '', response.body end + it "delegates before with keyword arguments correctly" do + delegation_app do + set(:foo) do |something| + something + end + before(foo: 'bar') do + :nothing + end + end + end + it "registers extensions with the delegation target" do app, mixin = mirror, Module.new Sinatra.register mixin