mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Fix that Hash#to_xml and Array#to_xml shouldn't modify their options hashes [#672 state:resolved]
Signed-off-by: Pratik Naik <pratiknaik@gmail.com>
This commit is contained in:
parent
870750ed4b
commit
1382f4de1f
4 changed files with 16 additions and 0 deletions
|
@ -159,6 +159,7 @@ class Array
|
||||||
raise "Not all elements respond to to_xml" unless all? { |e| e.respond_to? :to_xml }
|
raise "Not all elements respond to to_xml" unless all? { |e| e.respond_to? :to_xml }
|
||||||
require 'builder' unless defined?(Builder)
|
require 'builder' unless defined?(Builder)
|
||||||
|
|
||||||
|
options = options.dup
|
||||||
options[:root] ||= all? { |e| e.is_a?(first.class) && first.class.to_s != "Hash" } ? ActiveSupport::Inflector.pluralize(ActiveSupport::Inflector.underscore(first.class.name)) : "records"
|
options[:root] ||= all? { |e| e.is_a?(first.class) && first.class.to_s != "Hash" } ? ActiveSupport::Inflector.pluralize(ActiveSupport::Inflector.underscore(first.class.name)) : "records"
|
||||||
options[:children] ||= options[:root].singularize
|
options[:children] ||= options[:root].singularize
|
||||||
options[:indent] ||= 2
|
options[:indent] ||= 2
|
||||||
|
|
|
@ -86,6 +86,7 @@ class Hash
|
||||||
def to_xml(options = {})
|
def to_xml(options = {})
|
||||||
require 'builder' unless defined?(Builder)
|
require 'builder' unless defined?(Builder)
|
||||||
|
|
||||||
|
options = options.dup
|
||||||
options[:indent] ||= 2
|
options[:indent] ||= 2
|
||||||
options.reverse_merge!({ :builder => Builder::XmlMarkup.new(:indent => options[:indent]),
|
options.reverse_merge!({ :builder => Builder::XmlMarkup.new(:indent => options[:indent]),
|
||||||
:root => "hash" })
|
:root => "hash" })
|
||||||
|
|
|
@ -302,6 +302,13 @@ class ArrayToXmlTests < Test::Unit::TestCase
|
||||||
xml = [].to_xml
|
xml = [].to_xml
|
||||||
assert_match(/type="array"\/>/, xml)
|
assert_match(/type="array"\/>/, xml)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_to_xml_dups_options
|
||||||
|
options = {:skip_instruct => true}
|
||||||
|
[].to_xml(options)
|
||||||
|
# :builder, etc, shouldn't be added to options
|
||||||
|
assert_equal({:skip_instruct => true}, options)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
class ArrayExtractOptionsTests < Test::Unit::TestCase
|
class ArrayExtractOptionsTests < Test::Unit::TestCase
|
||||||
|
|
|
@ -880,6 +880,13 @@ class HashToXmlTest < Test::Unit::TestCase
|
||||||
assert_equal 30, alert_at.min
|
assert_equal 30, alert_at.min
|
||||||
assert_equal 45, alert_at.sec
|
assert_equal 45, alert_at.sec
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_to_xml_dups_options
|
||||||
|
options = {:skip_instruct => true}
|
||||||
|
{}.to_xml(options)
|
||||||
|
# :builder, etc, shouldn't be added to options
|
||||||
|
assert_equal({:skip_instruct => true}, options)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
class QueryTest < Test::Unit::TestCase
|
class QueryTest < Test::Unit::TestCase
|
||||||
|
|
Loading…
Reference in a new issue