aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRafael França <rafaelmfranca@gmail.com>2016-09-27 10:09:48 -0300
committerGitHub <noreply@github.com>2016-09-27 10:09:48 -0300
commitf2f6a39ccae1508c69874c6952f7d12270b876af (patch)
tree49ba0491ed6b0d76e25c1340f419cb485bc6267b
parent7750b049eedfc639e3d5b8f06b51743d71962dd2 (diff)
parent33fd23e0772fab8932b66486e2c4993376db7f94 (diff)
downloadrails-f2f6a39ccae1508c69874c6952f7d12270b876af.tar.gz
rails-f2f6a39ccae1508c69874c6952f7d12270b876af.tar.bz2
rails-f2f6a39ccae1508c69874c6952f7d12270b876af.zip
Merge pull request #26640 from Shopify/fix-am-errors-to-hash-default-proc
Do not leak the Errors default proc when calling to_hash or as_json
-rw-r--r--activemodel/lib/active_model/errors.rb2
-rw-r--r--activemodel/test/cases/errors_test.rb10
2 files changed, 11 insertions, 1 deletions
diff --git a/activemodel/lib/active_model/errors.rb b/activemodel/lib/active_model/errors.rb
index 191039f598..72746e194e 100644
--- a/activemodel/lib/active_model/errors.rb
+++ b/activemodel/lib/active_model/errors.rb
@@ -280,7 +280,7 @@ module ActiveModel
messages[attribute] = array.map { |message| full_message(attribute, message) }
end
else
- messages.dup
+ without_default_proc(messages)
end
end
diff --git a/activemodel/test/cases/errors_test.rb b/activemodel/test/cases/errors_test.rb
index 3288b5543c..95ca1f3969 100644
--- a/activemodel/test/cases/errors_test.rb
+++ b/activemodel/test/cases/errors_test.rb
@@ -250,6 +250,16 @@ class ErrorsTest < ActiveModel::TestCase
assert_equal({ name: ["cannot be blank"] }, person.errors.to_hash)
end
+ test "to_hash returns a hash without default proc" do
+ person = Person.new
+ assert_nil person.errors.to_hash.default_proc
+ end
+
+ test "as_json returns a hash without default proc" do
+ person = Person.new
+ assert_nil person.errors.as_json.default_proc
+ end
+
test "full_messages creates a list of error messages with the attribute name included" do
person = Person.new
person.errors.add(:name, "cannot be blank")