diff --git a/activeresource/lib/active_resource/base.rb b/activeresource/lib/active_resource/base.rb index d966062c7f7d0..74d8128c0e808 100644 --- a/activeresource/lib/active_resource/base.rb +++ b/activeresource/lib/active_resource/base.rb @@ -884,6 +884,7 @@ def reload # # ==== 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 @@ def load(attributes) 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 7460fd45b037e..bb08098683edd 100644 --- a/activeresource/test/base_test.rb +++ b/activeresource/test/base_test.rb @@ -46,10 +46,24 @@ def setup :children => [{:name => 'Natacha'}]}, {:name => 'Milena', :children => []}]}]}.to_xml(:root => 'customer') + # - resource with yaml array of strings; for ActiveRecords using serialize :bar, Array + @marty = <<-eof + + + 5 + Marty + --- + - \"red\" + - \"green\" + - \"blue\" + + + 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 @@ def test_parse_deep_nested_resources 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