diff options
author | Krzysztof Zych <krzysztof.zych@rebased.pl> | 2017-07-05 15:38:54 +0200 |
---|---|---|
committer | Krzysztof Zych <krzysztof.zych@rebased.pl> | 2017-07-05 15:38:54 +0200 |
commit | 8eea74c965b0f66eac3848f1eaaf495d5dc1092e (patch) | |
tree | fc890557706e3a17a073ae8a6e699f4c9a4b1f8d /activesupport | |
parent | 990a4dbbca5b7a8cf3d01861cb66deae456d370e (diff) | |
download | rails-8eea74c965b0f66eac3848f1eaaf495d5dc1092e.tar.gz rails-8eea74c965b0f66eac3848f1eaaf495d5dc1092e.tar.bz2 rails-8eea74c965b0f66eac3848f1eaaf495d5dc1092e.zip |
Use `map` in `delegate` so that actual prefixed method names are returned, if using prefix version.
Diffstat (limited to 'activesupport')
-rw-r--r-- | activesupport/lib/active_support/core_ext/module/delegation.rb | 2 | ||||
-rw-r--r-- | activesupport/test/core_ext/module_test.rb | 39 |
2 files changed, 40 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..14e166351a 100644 --- a/activesupport/test/core_ext/module_test.rb +++ b/activesupport/test/core_ext/module_test.rb @@ -392,4 +392,43 @@ 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 |