From 010a10f3a115602a40c6ad4b502f1158c9d40161 Mon Sep 17 00:00:00 2001 From: Jamis Buck Date: Fri, 21 Apr 2006 17:04:00 +0000 Subject: Add ActiveRecord::Errors#to_xml git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@4243 5ecf4fe2-1ee6-0310-87b1-e25e094e27de --- activerecord/CHANGELOG | 2 ++ activerecord/lib/active_record/validations.rb | 12 ++++++++++++ activerecord/test/validations_test.rb | 9 +++++++++ 3 files changed, 23 insertions(+) diff --git a/activerecord/CHANGELOG b/activerecord/CHANGELOG index a8141cd9d7..dd5dbdc71c 100644 --- a/activerecord/CHANGELOG +++ b/activerecord/CHANGELOG @@ -1,5 +1,7 @@ *SVN* +* Add ActiveRecord::Errors#to_xml [Jamis Buck] + * Properly quote index names in migrations (closes #4764) [John Long] * Fix the HasManyAssociation#count method so it uses the new ActiveRecord::Base#count syntax, while maintaining backwards compatibility. [Rick] diff --git a/activerecord/lib/active_record/validations.rb b/activerecord/lib/active_record/validations.rb index d31b53b941..9e58599f81 100755 --- a/activerecord/lib/active_record/validations.rb +++ b/activerecord/lib/active_record/validations.rb @@ -156,6 +156,18 @@ module ActiveRecord alias_method :count, :size alias_method :length, :size + + # Return an XML representation of this error object. + def to_xml(options={}) + options[:root] ||= "errors" + options[:indent] ||= 2 + options[:builder] ||= Builder::XmlMarkup.new(:indent => options[:indent]) + + options[:builder].instruct! unless options.delete(:skip_instruct) + options[:builder].errors do |e| + full_messages.each { |msg| e.error(msg) } + end + end end diff --git a/activerecord/test/validations_test.rb b/activerecord/test/validations_test.rb index b73058a64b..6ef455459b 100755 --- a/activerecord/test/validations_test.rb +++ b/activerecord/test/validations_test.rb @@ -995,6 +995,15 @@ class ValidationsTest < Test::Unit::TestCase r.topic = Topic.find :first assert r.valid? end + + def test_errors_to_xml + r = Reply.new :title => "Wrong Create" + assert !r.valid? + xml = r.errors.to_xml(:skip_instruct => true) + assert_equal "", xml.first(8) + assert xml.include?("Title is Wrong Create") + assert xml.include?("Content Empty") + end end -- cgit v1.2.3