From 775c8958eb9a3d32911811e72dc27204cfb69c80 Mon Sep 17 00:00:00 2001 From: Matthew Moore Date: Mon, 15 Sep 2008 18:09:22 -0700 Subject: [PATCH] ActiveResource can load array of strings, like serialize :bar, Array --- activeresource/lib/active_resource/base.rb | 3 ++- activeresource/test/base_test.rb | 24 ++++++++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletions(-) diff --git a/activeresource/lib/active_resource/base.rb b/activeresource/lib/active_resource/base.rb index d966062..74d8128 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 7460fd4..8eafaee 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 + + + 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 @@ 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 -- 1.5.6.4