aboutsummaryrefslogtreecommitdiffstats
path: root/activesupport
diff options
context:
space:
mode:
authorMatthew Draper <matthew@trebex.net>2017-07-06 00:25:40 +0930
committerMatthew Draper <matthew@trebex.net>2017-07-06 00:26:16 +0930
commit019238385cae6bc0454155c0c4bf23325d9a6204 (patch)
treed7df325f08593d52ecbe41f6871586301917ddb5 /activesupport
parent990a4dbbca5b7a8cf3d01861cb66deae456d370e (diff)
parent8eea74c965b0f66eac3848f1eaaf495d5dc1092e (diff)
downloadrails-019238385cae6bc0454155c0c4bf23325d9a6204.tar.gz
rails-019238385cae6bc0454155c0c4bf23325d9a6204.tar.bz2
rails-019238385cae6bc0454155c0c4bf23325d9a6204.zip
Merge pull request #29687 from k3rni/private-prefixed-delegate
Return prefixed method names from `Module.delegate`, if using prefixes
Diffstat (limited to 'activesupport')
-rw-r--r--activesupport/lib/active_support/core_ext/module/delegation.rb2
-rw-r--r--activesupport/test/core_ext/module_test.rb38
2 files changed, 39 insertions, 1 deletions
diff --git a/activesupport/lib/active_support/core_ext/module/delegation.rb b/activesupport/lib/active_support/core_ext/module/delegation.rb
index 04f34e553d..13bb8070ae 100644
--- a/activesupport/lib/active_support/core_ext/module/delegation.rb
+++ b/activesupport/lib/active_support/core_ext/module/delegation.rb
@@ -174,7 +174,7 @@ class Module
to = to.to_s
to = "self.#{to}" if DELEGATION_RESERVED_METHOD_NAMES.include?(to)
- methods.each do |method|
+ methods.map do |method|
# Attribute writer methods only accept one argument. Makes sure []=
# methods still accept two arguments.
definition = /[^\]]=$/.match?(method) ? "arg" : "*args, &block"
diff --git a/activesupport/test/core_ext/module_test.rb b/activesupport/test/core_ext/module_test.rb
index a4d4444d69..cba60ef013 100644
--- a/activesupport/test/core_ext/module_test.rb
+++ b/activesupport/test/core_ext/module_test.rb
@@ -392,4 +392,42 @@ class ModuleTest < ActiveSupport::TestCase
event = Event.new(Tester.new)
assert_equal 1, event.foo
end
+
+ def test_private_delegate
+ location = Class.new do
+ def initialize(place)
+ @place = place
+ end
+
+ private *delegate(:street, :city, to: :@place)
+ end
+
+ place = location.new(Somewhere.new("Such street", "Sad city"))
+
+ assert_not place.respond_to?(:street)
+ assert_not place.respond_to?(:city)
+
+ assert place.respond_to?(:street, true) # Asking for private method
+ assert place.respond_to?(:city, true)
+ end
+
+ def test_private_delegate_prefixed
+ location = Class.new do
+ def initialize(place)
+ @place = place
+ end
+
+ private *delegate(:street, :city, to: :@place, prefix: :the)
+ end
+
+ place = location.new(Somewhere.new("Such street", "Sad city"))
+
+ assert_not place.respond_to?(:street)
+ assert_not place.respond_to?(:city)
+
+ assert_not place.respond_to?(:the_street)
+ assert place.respond_to?(:the_street, true)
+ assert_not place.respond_to?(:the_city)
+ assert place.respond_to?(:the_city, true)
+ end
end