summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeremy Evans <code@jeremyevans.net>2019-12-01 19:57:06 -0800
committerHiroshi SHIBATA <hsbt@ruby-lang.org>2019-12-11 20:23:53 +0900
commit0dcd3340fb5f91112ce66c53315eff92b9f10fb7 (patch)
tree819f79f5c9b93c40272ef6923a3d6f47676f96f2
parentc2f6aa4e4810f8f2aabc35bf4c98ee030ff504b9 (diff)
[ruby/forwardable] 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. https://github.com/ruby/forwardable/commit/a52ef3451e
-rw-r--r--lib/forwardable.rb8
-rw-r--r--test/test_forwardable.rb8
2 files changed, 12 insertions, 4 deletions
diff --git a/lib/forwardable.rb b/lib/forwardable.rb
index e8333a359e..4cfade470a 100644
--- a/lib/forwardable.rb
+++ b/lib/forwardable.rb
@@ -160,6 +160,7 @@ module Forwardable
# +accessor.method+. +accessor+ should be a method name, instance
# variable name, or constant name. Use the full path to the
# constant if providing the constant name.
+ # Returns the name of the method defined.
#
# class MyQueue
# CONST = 1
@@ -184,8 +185,9 @@ module Forwardable
# If it's not a class or module, it's an instance
mod = Module === self ? self : singleton_class
- mod.module_eval(&gen)
+ ret = mod.module_eval(&gen)
mod.send(:ruby2_keywords, ali) if RUBY_VERSION >= '2.7'
+ ret
end
alias delegate instance_delegate
@@ -299,11 +301,13 @@ module SingleForwardable
# Defines a method _method_ which delegates to _accessor_ (i.e. it calls
# the method of the same name in _accessor_). If _new_name_ is
# provided, it is used as the name for the delegate method.
+ # Returns the name of the method defined.
def def_single_delegator(accessor, method, ali = method)
gen = Forwardable._delegator_method(self, accessor, method, ali)
- instance_eval(&gen)
+ ret = instance_eval(&gen)
singleton_class.send(:ruby2_keywords, ali) if RUBY_VERSION >= '2.7'
+ ret
end
alias delegate single_delegate
diff --git a/test/test_forwardable.rb b/test/test_forwardable.rb
index dc1408e8ed..deb0b5d5cf 100644
--- a/test/test_forwardable.rb
+++ b/test/test_forwardable.rb
@@ -24,11 +24,13 @@ class TestForwardable < Test::Unit::TestCase
def test_def_instance_delegator
%i[def_delegator def_instance_delegator].each do |m|
+ ret = nil
cls = forwardable_class do
- __send__ m, :@receiver, :delegated1
+ ret = __send__ m, :@receiver, :delegated1
end
assert_same RETURNED1, cls.new.delegated1
+ assert_equal :delegated1, ret
end
end
@@ -185,11 +187,13 @@ class TestForwardable < Test::Unit::TestCase
def test_class_single_delegator
%i[def_delegator def_single_delegator].each do |m|
+ ret = nil
cls = single_forwardable_class do
- __send__ m, :@receiver, :delegated1
+ ret = __send__ m, :@receiver, :delegated1
end
assert_same RETURNED1, cls.delegated1
+ assert_equal :delegated1, ret
end
end