diff options
author | Rick Olson <technoweenie@gmail.com> | 2006-09-01 16:09:18 +0000 |
---|---|---|
committer | Rick Olson <technoweenie@gmail.com> | 2006-09-01 16:09:18 +0000 |
commit | e4a4287c971f6e61f59815988f5fc69176cb14de (patch) | |
tree | bf1237a7899e023ff9bf54d449af4ad517265cc6 | |
parent | 5f175edde59e65b991d84fe30cad2b102fc7347b (diff) | |
download | rails-e4a4287c971f6e61f59815988f5fc69176cb14de.tar.gz rails-e4a4287c971f6e61f59815988f5fc69176cb14de.tar.bz2 rails-e4a4287c971f6e61f59815988f5fc69176cb14de.zip |
Fix cases where empty xml nodes weren't being translated to nil in Hash.create_from_xml [Rick Olson]
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@4895 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
-rw-r--r-- | activesupport/CHANGELOG | 5 | ||||
-rw-r--r-- | activesupport/lib/active_support/core_ext/hash/conversions.rb | 2 | ||||
-rw-r--r-- | activesupport/test/core_ext/hash_ext_test.rb | 24 |
3 files changed, 30 insertions, 1 deletions
diff --git a/activesupport/CHANGELOG b/activesupport/CHANGELOG index 1d15c27fef..cf66ee470e 100644 --- a/activesupport/CHANGELOG +++ b/activesupport/CHANGELOG @@ -1,5 +1,10 @@ *SVN* +* Fix cases where empty xml nodes weren't being translated to nil in Hash.create_from_xml [Rick Olson] + + <written-on type="date"></written-on> # => { :type => 'date' } # WRONG + <written-on type="date"></written-on> # => nil # RIGHT + * Tighten rescue clauses. #5985 [james@grayproductions.net] * Inflections: don't singularize -ies plurals. [foamdino@gmail.com, Mark Van Holstyn] diff --git a/activesupport/lib/active_support/core_ext/hash/conversions.rb b/activesupport/lib/active_support/core_ext/hash/conversions.rb index 38992f2926..fdc5a165b0 100644 --- a/activesupport/lib/active_support/core_ext/hash/conversions.rb +++ b/activesupport/lib/active_support/core_ext/hash/conversions.rb @@ -101,7 +101,7 @@ module ActiveSupport #:nodoc: else content end else - value.empty? || value['nil'] == 'true' ? nil : value.inject({}) do |h,(k,v)| + (value.blank? || value['type'] || value['nil'] == 'true') ? nil : value.inject({}) do |h,(k,v)| h[k] = typecast_xml_value(v) h end diff --git a/activesupport/test/core_ext/hash_ext_test.rb b/activesupport/test/core_ext/hash_ext_test.rb index f0a50ec5fe..d2372dcc32 100644 --- a/activesupport/test/core_ext/hash_ext_test.rb +++ b/activesupport/test/core_ext/hash_ext_test.rb @@ -339,6 +339,30 @@ class HashToXmlTest < Test::Unit::TestCase assert_equal expected_topic_hash, Hash.create_from_xml(topic_xml)["topic"] end + def test_single_record_from_xml_with_nil_values + topic_xml = <<-EOT + <topic> + <title></title> + <id type="integer"></id> + <approved type="boolean"></approved> + <written-on type="date"></written-on> + <viewed-at type="datetime"></viewed-at> + <parent-id></parent-id> + </topic> + EOT + + expected_topic_hash = { + :title => nil, + :id => nil, + :approved => nil, + :written_on => nil, + :viewed_at => nil, + :parent_id => nil + }.stringify_keys + + assert_equal expected_topic_hash, Hash.create_from_xml(topic_xml)["topic"] + end + def test_multiple_records_from_xml topics_xml = <<-EOT <topics> |