mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Added yielding of Builder instance for ActiveRecord::Base#to_xml calls [DHH]
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@6519 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
This commit is contained in:
parent
596112dcf8
commit
c2f4681ab4
3 changed files with 31 additions and 2 deletions
|
@ -1,5 +1,7 @@
|
|||
*SVN*
|
||||
|
||||
* Added yielding of Builder instance for ActiveRecord::Base#to_xml calls [DHH]
|
||||
|
||||
* Small additions and fixes for ActiveRecord documentation. Closes #7342 [jeremymcanally]
|
||||
|
||||
* Add helpful debugging info to the ActiveRecord::StatementInvalid exception in ActiveRecord::ConnectionAdapters::SqliteAdapter#table_structure. Closes #7925. [court3nay]
|
||||
|
|
|
@ -90,6 +90,23 @@ module ActiveRecord #:nodoc:
|
|||
# <abc>def</abc>
|
||||
# </firm>
|
||||
#
|
||||
# Alternatively, you can also just yield the builder object as part of the to_xml call:
|
||||
#
|
||||
# firm.to_xml do |xml|
|
||||
# xml.creator do
|
||||
# xml.first_name "David"
|
||||
# xml.last_name "Heinemeier Hansson"
|
||||
# end
|
||||
# end
|
||||
#
|
||||
# <firm>
|
||||
# # ... normal attributes as shown above ...
|
||||
# <creator>
|
||||
# <first_name>David</first_name>
|
||||
# <last_name>Heinemeier Hansson</last_name>
|
||||
# </creator>
|
||||
# </firm>
|
||||
#
|
||||
# You may override the to_xml method in your ActiveRecord::Base
|
||||
# subclasses if you need to. The general form of doing this is
|
||||
#
|
||||
|
@ -103,8 +120,9 @@ module ActiveRecord #:nodoc:
|
|||
# end
|
||||
# end
|
||||
# end
|
||||
def to_xml(options = {})
|
||||
XmlSerializer.new(self, options).to_s
|
||||
def to_xml(options = {}, &block)
|
||||
serializer = XmlSerializer.new(self, options)
|
||||
block_given? ? serializer.to_s(&block) : serializer.to_s
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -231,6 +249,7 @@ module ActiveRecord #:nodoc:
|
|||
add_attributes
|
||||
add_includes
|
||||
add_procs
|
||||
yield builder if block_given?
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -56,6 +56,14 @@ class XmlSerializationTest < Test::Unit::TestCase
|
|||
assert_no_match %r{<age}, @xml
|
||||
assert_match %r{<created-at}, @xml
|
||||
end
|
||||
|
||||
def test_should_include_yielded_additions
|
||||
@xml = Contact.new.to_xml do |xml|
|
||||
xml.creator "David"
|
||||
end
|
||||
|
||||
assert_match %r{<creator>David</creator>}, @xml
|
||||
end
|
||||
end
|
||||
|
||||
class DefaultXmlSerializationTest < Test::Unit::TestCase
|
||||
|
|
Loading…
Reference in a new issue