[前][次][番号順一覧][スレッド一覧]

ruby-changes:59197

From: Jeremy <ko1@a...>
Date: Thu, 12 Dec 2019 01:11:35 +0900 (JST)
Subject: [ruby-changes:59197] 0dcd3340fb (master): [ruby/forwardable] Make def_*_delegator return name of method defined (Fixes #10)

https://git.ruby-lang.org/ruby.git/commit/?id=0dcd3340fb

From 0dcd3340fb5f91112ce66c53315eff92b9f10fb7 Mon Sep 17 00:00:00 2001
From: Jeremy Evans <code@j...>
Date: Sun, 1 Dec 2019 19:57:06 -0800
Subject: [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

diff --git a/lib/forwardable.rb b/lib/forwardable.rb
index e8333a3..4cfade47 100644
--- a/lib/forwardable.rb
+++ b/lib/forwardable.rb
@@ -160,6 +160,7 @@ module Forwardable https://github.com/ruby/ruby/blob/trunk/lib/forwardable.rb#L160
   # +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 https://github.com/ruby/ruby/blob/trunk/lib/forwardable.rb#L185
 
     # 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 https://github.com/ruby/ruby/blob/trunk/lib/forwardable.rb#L301
   # 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 dc1408e..deb0b5d 100644
--- a/test/test_forwardable.rb
+++ b/test/test_forwardable.rb
@@ -24,11 +24,13 @@ class TestForwardable < Test::Unit::TestCase https://github.com/ruby/ruby/blob/trunk/test/test_forwardable.rb#L24
 
   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 https://github.com/ruby/ruby/blob/trunk/test/test_forwardable.rb#L187
 
   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
 
-- 
cgit v0.10.2


--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]