aboutsummaryrefslogtreecommitdiffstats
path: root/actionview/lib/action_view/helpers/form_options_helper.rb
diff options
context:
space:
mode:
authorMatthew Draper <matthew@trebex.net>2018-08-22 23:39:07 +0930
committerMatthew Draper <matthew@trebex.net>2018-08-23 00:08:35 +0930
commit047a893da7a43b8e115b854c73735b9e6475838e (patch)
tree66cef1a720dfa5cf9f1f4f35f117da9ae7c6e66d /actionview/lib/action_view/helpers/form_options_helper.rb
parent9eee4c1ed92050edbee08f16be78d355fb19c2f5 (diff)
parent0853cdffa2f09f02e854baed35c3323b6b35006f (diff)
downloadrails-047a893da7a43b8e115b854c73735b9e6475838e.tar.gz
rails-047a893da7a43b8e115b854c73735b9e6475838e.tar.bz2
rails-047a893da7a43b8e115b854c73735b9e6475838e.zip
Merge pull request #33547 from Ana06/patch-1
Use public_send in value_for_collection
Diffstat (limited to 'actionview/lib/action_view/helpers/form_options_helper.rb')
-rw-r--r--actionview/lib/action_view/helpers/form_options_helper.rb12
1 files changed, 10 insertions, 2 deletions
diff --git a/actionview/lib/action_view/helpers/form_options_helper.rb b/actionview/lib/action_view/helpers/form_options_helper.rb
index 7884a8d997..2b9d55a019 100644
--- a/actionview/lib/action_view/helpers/form_options_helper.rb
+++ b/actionview/lib/action_view/helpers/form_options_helper.rb
@@ -794,7 +794,7 @@ module ActionView
def extract_values_from_collection(collection, value_method, selected)
if selected.is_a?(Proc)
collection.map do |element|
- element.send(value_method) if selected.call(element)
+ public_or_deprecated_send(element, value_method) if selected.call(element)
end.compact
else
selected
@@ -802,7 +802,15 @@ module ActionView
end
def value_for_collection(item, value)
- value.respond_to?(:call) ? value.call(item) : item.send(value)
+ value.respond_to?(:call) ? value.call(item) : public_or_deprecated_send(item, value)
+ end
+
+ def public_or_deprecated_send(item, value)
+ item.public_send(value)
+ rescue NoMethodError
+ raise unless item.respond_to?(value, true) && !item.respond_to?(value)
+ ActiveSupport::Deprecation.warn "Using private methods from view helpers is deprecated (calling private #{item.class}##{value})"
+ item.send(value)
end
def prompt_text(prompt)