aboutsummaryrefslogtreecommitdiffstats
path: root/activesupport
diff options
context:
space:
mode:
authorRick Olson <technoweenie@gmail.com>2006-09-01 16:09:18 +0000
committerRick Olson <technoweenie@gmail.com>2006-09-01 16:09:18 +0000
commite4a4287c971f6e61f59815988f5fc69176cb14de (patch)
treebf1237a7899e023ff9bf54d449af4ad517265cc6 /activesupport
parent5f175edde59e65b991d84fe30cad2b102fc7347b (diff)
downloadrails-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
Diffstat (limited to 'activesupport')
-rw-r--r--activesupport/CHANGELOG5
-rw-r--r--activesupport/lib/active_support/core_ext/hash/conversions.rb2
-rw-r--r--activesupport/test/core_ext/hash_ext_test.rb24
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>