Skip to content

Commit b2dd340

Browse files
committed
Fix keyword argument separation warnings on Ruby 2.7+
Do so in a way that is also compatible with previous versions.
1 parent dc1fda3 commit b2dd340

File tree

2 files changed

+20
-1
lines changed

2 files changed

+20
-1
lines changed

lib/forwardable.rb

+4-1
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,9 @@ def def_instance_delegator(accessor, method, ali = method)
183183
gen = Forwardable._delegator_method(self, accessor, method, ali)
184184

185185
# If it's not a class or module, it's an instance
186-
(Module === self ? self : singleton_class).module_eval(&gen)
186+
mod = Module === self ? self : singleton_class
187+
mod.module_eval(&gen)
188+
mod.send(:ruby2_keywords, ali) if RUBY_VERSION >= '2.7'
187189
end
188190

189191
alias delegate instance_delegate
@@ -301,6 +303,7 @@ def def_single_delegator(accessor, method, ali = method)
301303
gen = Forwardable._delegator_method(self, accessor, method, ali)
302304

303305
instance_eval(&gen)
306+
singleton_class.send(:ruby2_keywords, ali) if RUBY_VERSION >= '2.7'
304307
end
305308

306309
alias delegate single_delegate

test/test_forwardable.rb

+16
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,10 @@ def delegated1
1616
def delegated2
1717
RETURNED2
1818
end
19+
20+
def delegated1_kw(**kw)
21+
[RETURNED1, kw]
22+
end
1923
end
2024

2125
def test_def_instance_delegator
@@ -38,6 +42,18 @@ def test_def_instance_delegator_constant
3842
end
3943
end
4044

45+
def test_def_instance_delegator_kw
46+
%i[def_delegator def_instance_delegator].each do |m|
47+
cls = forwardable_class do
48+
__send__ m, :@receiver, :delegated1_kw
49+
end
50+
51+
ary = cls.new.delegated1_kw b: 1
52+
assert_same RETURNED1, ary[0]
53+
assert_equal({b: 1}, ary[1])
54+
end
55+
end
56+
4157
def test_def_instance_delegator_using_args_method_as_receiver
4258
%i[def_delegator def_instance_delegator].each do |m|
4359
cls = forwardable_class(

0 commit comments

Comments
 (0)