Skip to content

Commit

Permalink
ActiveResource can load array of strings, like serialize :bar, Array
Browse files Browse the repository at this point in the history
Signed-off-by: rick <technoweenie@gmail.com>
[#1055 state:resolved]
  • Loading branch information
moorage authored and technoweenie committed Oct 5, 2008
1 parent 2bf58aa commit 4df45d8
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 1 deletion.
3 changes: 2 additions & 1 deletion activeresource/lib/active_resource/base.rb
Expand Up @@ -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'
Expand All @@ -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)
Expand Down
24 changes: 24 additions & 0 deletions activeresource/test/base_test.rb
Expand Up @@ -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
<?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
Expand Down Expand Up @@ -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

0 comments on commit 4df45d8

Please sign in to comment.