Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
David Burger authored and lifo committed Aug 9, 2009
1 parent 870750e commit 1382f4d
Show file tree
Hide file tree
Showing 4 changed files with 16 additions and 0 deletions.
Expand Up @@ -159,6 +159,7 @@ def to_xml(options = {})
raise "Not all elements respond to to_xml" unless all? { |e| e.respond_to? :to_xml }
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[:children] ||= options[:root].singularize
options[:indent] ||= 2
Expand Down
Expand Up @@ -86,6 +86,7 @@ def to_query(namespace = nil)
def to_xml(options = {})
require 'builder' unless defined?(Builder)

options = options.dup
options[:indent] ||= 2
options.reverse_merge!({ :builder => Builder::XmlMarkup.new(:indent => options[:indent]),
:root => "hash" })
Expand Down
7 changes: 7 additions & 0 deletions activesupport/test/core_ext/array_ext_test.rb
Expand Up @@ -302,6 +302,13 @@ def test_to_xml_with_empty
xml = [].to_xml
assert_match(/type="array"\/>/, xml)
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

class ArrayExtractOptionsTests < Test::Unit::TestCase
Expand Down
7 changes: 7 additions & 0 deletions activesupport/test/core_ext/hash_ext_test.rb
Expand Up @@ -880,6 +880,13 @@ def test_datetime_xml_type_with_far_future_date
assert_equal 30, alert_at.min
assert_equal 45, alert_at.sec
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

class QueryTest < Test::Unit::TestCase
Expand Down

0 comments on commit 1382f4d

Please sign in to comment.