delegate.rb: fixed keyword arguments in DelegateClass

`Delegator.delegating_block` should delegate keyword arguments
separately.  [ruby-core:96949]

(cherry picked from commit 9bcf4f3db2)
This commit is contained in:
Nobuyoshi Nakada 2020-01-21 11:47:04 +09:00 committed by NARUSE, Yui
parent e70d52b0c3
commit d07a6dc10e
2 changed files with 9 additions and 1 deletions

View file

@ -334,7 +334,7 @@ def Delegator.delegating_block(mid) # :nodoc:
lambda do |*args, &block| lambda do |*args, &block|
target = self.__getobj__ target = self.__getobj__
target.__send__(mid, *args, &block) target.__send__(mid, *args, &block)
end end.ruby2_keywords
end end
# #

View file

@ -330,4 +330,12 @@ class TestDelegateClass < Test::Unit::TestCase
assert_equal(1, delegate.bar) assert_equal(1, delegate.bar)
assert_raise(NoMethodError, /undefined method `foo' for/) { delegate.foo } assert_raise(NoMethodError, /undefined method `foo' for/) { delegate.foo }
end end
def test_keyword_argument
k = EnvUtil.labeled_class("Target") do
def test(a, k:) [a, k]; end
end
a = DelegateClass(k).new(k.new)
assert_equal([1, 0], a.test(1, k: 0))
end
end end