aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthew Moore <matt@thrivesmart.com>2008-09-15 18:09:22 -0700
committerrick <technoweenie@gmail.com>2008-10-05 10:29:13 -0700
commit4df45d86097efbeabceecfe53d8ea2da9ccbb107 (patch)
tree6c0b1918687ff05ca5ee8d40dd2549eb4c991a43
parent2bf58aa782d3b493f2d98f153324b93c5b058ba6 (diff)
downloadrails-4df45d86097efbeabceecfe53d8ea2da9ccbb107.tar.gz
rails-4df45d86097efbeabceecfe53d8ea2da9ccbb107.tar.bz2
rails-4df45d86097efbeabceecfe53d8ea2da9ccbb107.zip
ActiveResource can load array of strings, like serialize :bar, Array
Signed-off-by: rick <technoweenie@gmail.com> [#1055 state:resolved]
-rw-r--r--activeresource/lib/active_resource/base.rb3
-rw-r--r--activeresource/test/base_test.rb24
2 files changed, 26 insertions, 1 deletions
diff --git a/activeresource/lib/active_resource/base.rb b/activeresource/lib/active_resource/base.rb
index d966062c7f..74d8128c0e 100644
--- a/activeresource/lib/active_resource/base.rb
+++ b/activeresource/lib/active_resource/base.rb
@@ -884,6 +884,7 @@ module ActiveResource
#
# ==== Examples
# my_attrs = {:name => 'J&J Textiles', :industry => 'Cloth and textiles'}
+ # my_attrs = {:name => 'Marty', :colors => ["red", "green", "blue"]}
#
# the_supplier = Supplier.find(:first)
# the_supplier.name # => 'J&M Textiles'
@@ -906,7 +907,7 @@ module ActiveResource
case value
when Array
resource = find_or_create_resource_for_collection(key)
- value.map { |attrs| resource.new(attrs) }
+ value.map { |attrs| attrs.is_a?(String) ? attrs.dup : resource.new(attrs) }
when Hash
resource = find_or_create_resource_for(key)
resource.new(value)
diff --git a/activeresource/test/base_test.rb b/activeresource/test/base_test.rb
index 7460fd45b0..bb08098683 100644
--- a/activeresource/test/base_test.rb
+++ b/activeresource/test/base_test.rb
@@ -46,10 +46,24 @@ class BaseTest < Test::Unit::TestCase
:children => [{:name => 'Natacha'}]},
{:name => 'Milena',
:children => []}]}]}.to_xml(:root => 'customer')
+ # - resource with yaml array of strings; for ActiveRecords using serialize :bar, Array
+ @marty = <<-eof
+ <?xml version=\"1.0\" encoding=\"UTF-8\"?>
+ <person>
+ <id type=\"integer\">5</id>
+ <name>Marty</name>
+ <colors type=\"yaml\">---
+ - \"red\"
+ - \"green\"
+ - \"blue\"
+ </colors>
+ </person>
+ eof
ActiveResource::HttpMock.respond_to do |mock|
mock.get "/people/1.xml", {}, @matz
mock.get "/people/2.xml", {}, @david
+ mock.get "/people/5.xml", {}, @marty
mock.get "/people/Greg.xml", {}, @greg
mock.get "/people/4.xml", {'key' => 'value'}, nil, 404
mock.put "/people/1.xml", {}, nil, 204
@@ -851,4 +865,14 @@ class BaseTest < Test::Unit::TestCase
end
end
end
+
+ def test_load_yaml_array
+ assert_nothing_raised do
+ marty = Person.find(5)
+ assert_equal 3, marty.colors.size
+ marty.colors.each do |color|
+ assert_kind_of String, color
+ end
+ end
+ end
end