aboutsummaryrefslogtreecommitdiffstats
path: root/activesupport
diff options
context:
space:
mode:
authorbogdanvlviv <bogdanvlviv@gmail.com>2018-02-28 00:05:46 +0200
committerbogdanvlviv <bogdanvlviv@gmail.com>2018-02-28 10:29:12 +0200
commitd0c697e9b17a9f22d645503a39f6d6d167d99b94 (patch)
tree0a07b269764d559126e8b466965b3781f5c5a804 /activesupport
parent3a7a21edb2425d305b8b3b2e173bd53285d55f64 (diff)
downloadrails-d0c697e9b17a9f22d645503a39f6d6d167d99b94.tar.gz
rails-d0c697e9b17a9f22d645503a39f6d6d167d99b94.tar.bz2
rails-d0c697e9b17a9f22d645503a39f6d6d167d99b94.zip
Add separate test to ensure that `delegate` with `:private` option returns correct value
Remove extra comments `# Asking for private method` in activesupport/test/core_ext/module_test.rb Improve docs of using `delegate` with `:private` Update changelog of #31944
Diffstat (limited to 'activesupport')
-rw-r--r--activesupport/CHANGELOG.md7
-rw-r--r--activesupport/lib/active_support/core_ext/module/delegation.rb10
-rw-r--r--activesupport/test/core_ext/module_test.rb22
3 files changed, 23 insertions, 16 deletions
diff --git a/activesupport/CHANGELOG.md b/activesupport/CHANGELOG.md
index be1862279c..a7af51f83e 100644
--- a/activesupport/CHANGELOG.md
+++ b/activesupport/CHANGELOG.md
@@ -1,8 +1,7 @@
## Rails 6.0.0.alpha (Unreleased) ##
-* Add `private: true` option to ActiveSupport's `delegate`.
-
- In order to delegate methods as private methods:
+* Add `:private` option to ActiveSupport's `Module#delegate`
+ in order to delegate methods as private:
class User < ActiveRecord::Base
has_one :profile
@@ -17,8 +16,6 @@
# User.new.date_of_birth
# => NoMethodError: private method `date_of_birth' called for #<User:0x00000008221340>
- More information in #31944.
-
*Tomas Valent*
* `String#truncate_bytes` to truncate a string to a maximum bytesize without
diff --git a/activesupport/lib/active_support/core_ext/module/delegation.rb b/activesupport/lib/active_support/core_ext/module/delegation.rb
index 426e34128f..45d16515d2 100644
--- a/activesupport/lib/active_support/core_ext/module/delegation.rb
+++ b/activesupport/lib/active_support/core_ext/module/delegation.rb
@@ -114,7 +114,7 @@ class Module
# invoice.customer_name # => 'John Doe'
# invoice.customer_address # => 'Vimmersvej 13'
#
- # If you want the delegated method to be a private method,
+ # If you want the delegate methods to be a private,
# use the <tt>:private</tt> option.
#
# class User < ActiveRecord::Base
@@ -127,10 +127,10 @@ class Module
# end
# end
#
- # User.new.age # 2
- # User.new.first_name # Tomas
- # User.new.date_of_birth # NoMethodError: private method `date_of_birth' called for #<User:0x00000008221340>
- # User.new.religion # NoMethodError: private method `religion' called for #<User:0x00000008221340>
+ # User.new.age # => 2
+ # User.new.first_name # => "Tomas"
+ # User.new.date_of_birth # => NoMethodError: private method `date_of_birth' called for #<User:0x00000008221340>
+ # User.new.religion # => NoMethodError: private method `religion' called for #<User:0x00000008221340>
#
# If the target is +nil+ and does not respond to the delegated method a
# +Module::DelegationError+ is raised. If you wish to instead return +nil+,
diff --git a/activesupport/test/core_ext/module_test.rb b/activesupport/test/core_ext/module_test.rb
index 36cfd885d7..04692f1484 100644
--- a/activesupport/test/core_ext/module_test.rb
+++ b/activesupport/test/core_ext/module_test.rb
@@ -482,19 +482,29 @@ class ModuleTest < ActiveSupport::TestCase
def initialize(place)
@place = place
end
- end
- assert_equal %i(the_street the_city),
- location.delegate(:street, :city, to: :@place, prefix: :the, private: true)
+ delegate(:street, :city, to: :@place, prefix: :the, private: true)
+ end
place = location.new(Somewhere.new("Such street", "Sad city"))
- assert_not_respond_to place, :street
- assert_not_respond_to place, :city
-
assert_not_respond_to place, :the_street
assert place.respond_to?(:the_street, true)
assert_not_respond_to place, :the_city
assert place.respond_to?(:the_city, true)
end
+
+ def test_delegate_with_private_option_returns_names_of_delegate_methods
+ location = Class.new do
+ def initialize(place)
+ @place = place
+ end
+ end
+
+ assert_equal [:street, :city],
+ location.delegate(:street, :city, to: :@place, private: true)
+
+ assert_equal [:the_street, :the_city],
+ location.delegate(:street, :city, to: :@place, prefix: :the, private: true)
+ end
end