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
上级 596112dc
*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 XmlSerialization
# <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 XmlSerialization
# 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 @@ def serialize
add_attributes
add_includes
add_procs
yield builder if block_given?
end
end
......
......@@ -56,6 +56,14 @@ def test_should_allow_attribute_filtering
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
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册