1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00

AM::Errors: allow :full_messages parameter for #as_json

This commit is contained in:
Bogdan Gusiev 2012-02-17 12:12:10 +02:00
parent decafdd57a
commit 534dc4ca1a
3 changed files with 26 additions and 3 deletions

View file

@ -1,3 +1,5 @@
* `AM::Errors#to_json`: support `:full_messages` parameter *Bogdan Gusiev*
* Trim down Active Model API by removing `valid?` and `errors.full_messages` *José Valim*
## Rails 3.2.0 (January 20, 2012) ##

View file

@ -206,12 +206,23 @@ module ActiveModel
end
# Returns an Hash that can be used as the JSON representation for this object.
# Options:
# * <tt>:full_messages</tt> - determines if json object should contain
# full messages or not. Default: <tt>false</tt>.
def as_json(options=nil)
to_hash
to_hash(options && options[:full_messages])
end
def to_hash
messages.dup
def to_hash(full_messages = false)
if full_messages
messages = {}
self.messages.each do |attribute, array|
messages[attribute] = array.map{|message| full_message(attribute, message) }
end
messages
else
self.messages.dup
end
end
# Adds +message+ to the error messages on +attribute+. More than one error can be added to the same

View file

@ -184,6 +184,16 @@ class ErrorsTest < ActiveModel::TestCase
assert_equal ["is invalid"], hash[:email]
end
test 'should return a JSON hash representation of the errors with full messages' do
person = Person.new
person.errors.add(:name, "can not be blank")
person.errors.add(:name, "can not be nil")
person.errors.add(:email, "is invalid")
hash = person.errors.as_json(:full_messages => true)
assert_equal ["name can not be blank", "name can not be nil"], hash[:name]
assert_equal ["email is invalid"], hash[:email]
end
test "generate_message should work without i18n_scope" do
person = Person.new
assert !Person.respond_to?(:i18n_scope)