From b2dd340988ea80b7381c66db170125a7a62fe4d9 Mon Sep 17 00:00:00 2001 From: Jeremy Evans Date: Sat, 7 Sep 2019 12:41:16 -0700 Subject: [PATCH] Fix keyword argument separation warnings on Ruby 2.7+ Do so in a way that is also compatible with previous versions. --- lib/forwardable.rb | 5 ++++- test/test_forwardable.rb | 16 ++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/lib/forwardable.rb b/lib/forwardable.rb index 924c605..e8333a3 100644 --- a/lib/forwardable.rb +++ b/lib/forwardable.rb @@ -183,7 +183,9 @@ def def_instance_delegator(accessor, method, ali = method) gen = Forwardable._delegator_method(self, accessor, method, ali) # If it's not a class or module, it's an instance - (Module === self ? self : singleton_class).module_eval(&gen) + mod = Module === self ? self : singleton_class + mod.module_eval(&gen) + mod.send(:ruby2_keywords, ali) if RUBY_VERSION >= '2.7' end alias delegate instance_delegate @@ -301,6 +303,7 @@ def def_single_delegator(accessor, method, ali = method) gen = Forwardable._delegator_method(self, accessor, method, ali) instance_eval(&gen) + singleton_class.send(:ruby2_keywords, ali) if RUBY_VERSION >= '2.7' end alias delegate single_delegate diff --git a/test/test_forwardable.rb b/test/test_forwardable.rb index 2c0face..dc1408e 100644 --- a/test/test_forwardable.rb +++ b/test/test_forwardable.rb @@ -16,6 +16,10 @@ def delegated1 def delegated2 RETURNED2 end + + def delegated1_kw(**kw) + [RETURNED1, kw] + end end def test_def_instance_delegator @@ -38,6 +42,18 @@ def test_def_instance_delegator_constant end end + def test_def_instance_delegator_kw + %i[def_delegator def_instance_delegator].each do |m| + cls = forwardable_class do + __send__ m, :@receiver, :delegated1_kw + end + + ary = cls.new.delegated1_kw b: 1 + assert_same RETURNED1, ary[0] + assert_equal({b: 1}, ary[1]) + end + end + def test_def_instance_delegator_using_args_method_as_receiver %i[def_delegator def_instance_delegator].each do |m| cls = forwardable_class(