aboutsummaryrefslogtreecommitdiffstats
path: root/activesupport/lib/active_support/core_ext
diff options
context:
space:
mode:
authorDavid Heinemeier Hansson <david@loudthinking.com>2007-06-01 06:48:09 +0000
committerDavid Heinemeier Hansson <david@loudthinking.com>2007-06-01 06:48:09 +0000
commit846e8587273743b5cc46708b3c0f047bb501fe02 (patch)
treed180fd4e04b1177b9771bfbeb29cce323b4adae2 /activesupport/lib/active_support/core_ext
parent83ce4c59be3d5f1f1246b46f53370f5f65fd0dc5 (diff)
downloadrails-846e8587273743b5cc46708b3c0f047bb501fe02.tar.gz
rails-846e8587273743b5cc46708b3c0f047bb501fe02.tar.bz2
rails-846e8587273743b5cc46708b3c0f047bb501fe02.zip
Added proper handling of arrays (closes #8537) [hasmanyjosh]
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@6924 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
Diffstat (limited to 'activesupport/lib/active_support/core_ext')
-rw-r--r--activesupport/lib/active_support/core_ext/array/conversions.rb2
-rw-r--r--activesupport/lib/active_support/core_ext/hash/conversions.rb14
2 files changed, 15 insertions, 1 deletions
diff --git a/activesupport/lib/active_support/core_ext/array/conversions.rb b/activesupport/lib/active_support/core_ext/array/conversions.rb
index a4d056e81c..6950e21027 100644
--- a/activesupport/lib/active_support/core_ext/array/conversions.rb
+++ b/activesupport/lib/active_support/core_ext/array/conversions.rb
@@ -63,7 +63,7 @@ module ActiveSupport #:nodoc:
opts = options.merge({ :root => children })
- options[:builder].tag!(root) {
+ options[:builder].tag!(root, options[:skip_types] ? {} : {:type => "array"}) {
yield options[:builder] if block_given?
each { |e| e.to_xml(opts.merge!({ :skip_instruct => true })) }
}
diff --git a/activesupport/lib/active_support/core_ext/hash/conversions.rb b/activesupport/lib/active_support/core_ext/hash/conversions.rb
index 2334bb671b..2cccd9c30e 100644
--- a/activesupport/lib/active_support/core_ext/hash/conversions.rb
+++ b/activesupport/lib/active_support/core_ext/hash/conversions.rb
@@ -163,6 +163,20 @@ module ActiveSupport #:nodoc:
else
content
end
+ elsif value['type'] == 'array'
+ child_key, entries = value.detect { |k,v| k != 'type' } # child_key is throwaway
+ if entries.nil?
+ []
+ else
+ case entries.class.to_s # something weird with classes not matching here. maybe singleton methods breaking is_a?
+ when "Array"
+ entries.collect { |v| typecast_xml_value(v) }
+ when "Hash"
+ [typecast_xml_value(entries)]
+ else
+ raise "can't typecast #{entries.inspect}"
+ end
+ end
elsif value['type'] == 'string' && value['nil'] != 'true'
""
else