aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack
diff options
context:
space:
mode:
authorJon Moss <me@jonathanmoss.me>2016-01-21 17:28:18 -0500
committerJon Moss <me@jonathanmoss.me>2016-01-21 17:28:18 -0500
commit627f736cc0a1a7b32e67303b92b963d4b6d9e68c (patch)
treecea7ae0af777964f584cb4581f5c1013c9c19409 /actionpack
parent06397336b2c9b1de9462f1baa8075573fd3709dd (diff)
downloadrails-627f736cc0a1a7b32e67303b92b963d4b6d9e68c.tar.gz
rails-627f736cc0a1a7b32e67303b92b963d4b6d9e68c.tar.bz2
rails-627f736cc0a1a7b32e67303b92b963d4b6d9e68c.zip
Fix `ActionController::Parameters#==` bug
See bug #21032.
Diffstat (limited to 'actionpack')
-rw-r--r--actionpack/CHANGELOG.md4
-rw-r--r--actionpack/lib/action_controller/metal/strong_parameters.rb6
-rw-r--r--actionpack/test/controller/parameters/accessors_test.rb6
3 files changed, 15 insertions, 1 deletions
diff --git a/actionpack/CHANGELOG.md b/actionpack/CHANGELOG.md
index f6ffe45490..4af5ccbbb8 100644
--- a/actionpack/CHANGELOG.md
+++ b/actionpack/CHANGELOG.md
@@ -1,3 +1,7 @@
+* Fix `ActionController::Parameters==`
+
+ *Jon Moss*
+
* Response etags to always be weak: Prefixes 'W/' to value returned by
`ActionDispatch::Http::Cache::Response#etag=`, such that etags set in
`fresh_when` and `stale?` are weak.
diff --git a/actionpack/lib/action_controller/metal/strong_parameters.rb b/actionpack/lib/action_controller/metal/strong_parameters.rb
index e9aa0aae37..ba03430930 100644
--- a/actionpack/lib/action_controller/metal/strong_parameters.rb
+++ b/actionpack/lib/action_controller/metal/strong_parameters.rb
@@ -160,7 +160,11 @@ module ActionController
if other_hash.respond_to?(:permitted?)
super
else
- @parameters == other_hash
+ if other_hash.is_a?(Hash)
+ @parameters == other_hash.with_indifferent_access
+ else
+ @parameters == other_hash
+ end
end
end
diff --git a/actionpack/test/controller/parameters/accessors_test.rb b/actionpack/test/controller/parameters/accessors_test.rb
index a8f4d877a6..bd43ff7697 100644
--- a/actionpack/test/controller/parameters/accessors_test.rb
+++ b/actionpack/test/controller/parameters/accessors_test.rb
@@ -128,4 +128,10 @@ class ParametersAccessorsTest < ActiveSupport::TestCase
assert_not @params.values_at(:person).first.permitted?
assert_not @params[:person].values_at(:name).first.permitted?
end
+
+ test "equality with another hash works" do
+ hash1 = { foo: :bar }
+ params1 = ActionController::Parameters.new(hash1)
+ assert(params1 == hash1)
+ end
end