Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit a52ef34

Browse files
committed
Make def_*_delegator return name of method defined (Fixes #10)
This restores compatibility with previous versions. This behavior was previously undefined, but it makes sense for the name of the defined method to be returned.
1 parent e56f0f8 commit a52ef34

File tree

2 files changed

+12
-4
lines changed

2 files changed

+12
-4
lines changed

lib/forwardable.rb

+6-2
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,7 @@ def def_instance_delegators(accessor, *methods)
160160
# +accessor.method+. +accessor+ should be a method name, instance
161161
# variable name, or constant name. Use the full path to the
162162
# constant if providing the constant name.
163+
# Returns the name of the method defined.
163164
#
164165
# class MyQueue
165166
# CONST = 1
@@ -184,8 +185,9 @@ def def_instance_delegator(accessor, method, ali = method)
184185

185186
# If it's not a class or module, it's an instance
186187
mod = Module === self ? self : singleton_class
187-
mod.module_eval(&gen)
188+
ret = mod.module_eval(&gen)
188189
mod.send(:ruby2_keywords, ali) if RUBY_VERSION >= '2.7'
190+
ret
189191
end
190192

191193
alias delegate instance_delegate
@@ -299,11 +301,13 @@ def def_single_delegators(accessor, *methods)
299301
# Defines a method _method_ which delegates to _accessor_ (i.e. it calls
300302
# the method of the same name in _accessor_). If _new_name_ is
301303
# provided, it is used as the name for the delegate method.
304+
# Returns the name of the method defined.
302305
def def_single_delegator(accessor, method, ali = method)
303306
gen = Forwardable._delegator_method(self, accessor, method, ali)
304307

305-
instance_eval(&gen)
308+
ret = instance_eval(&gen)
306309
singleton_class.send(:ruby2_keywords, ali) if RUBY_VERSION >= '2.7'
310+
ret
307311
end
308312

309313
alias delegate single_delegate

test/test_forwardable.rb

+6-2
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,13 @@ def delegated1_kw(**kw)
2424

2525
def test_def_instance_delegator
2626
%i[def_delegator def_instance_delegator].each do |m|
27+
ret = nil
2728
cls = forwardable_class do
28-
__send__ m, :@receiver, :delegated1
29+
ret = __send__ m, :@receiver, :delegated1
2930
end
3031

3132
assert_same RETURNED1, cls.new.delegated1
33+
assert_equal :delegated1, ret
3234
end
3335
end
3436

@@ -185,11 +187,13 @@ def test_def_instance_delegate_using_block_method_as_receiver
185187

186188
def test_class_single_delegator
187189
%i[def_delegator def_single_delegator].each do |m|
190+
ret = nil
188191
cls = single_forwardable_class do
189-
__send__ m, :@receiver, :delegated1
192+
ret = __send__ m, :@receiver, :delegated1
190193
end
191194

192195
assert_same RETURNED1, cls.delegated1
196+
assert_equal :delegated1, ret
193197
end
194198
end
195199

0 commit comments

Comments
 (0)