aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--activemodel/test/cases/serializeration/xml_serialization_test.rb8
-rw-r--r--activemodel/test/models/contact.rb8
-rw-r--r--activerecord/test/cases/xml_serialization_test.rb8
-rw-r--r--activerecord/test/models/author.rb4
4 files changed, 28 insertions, 0 deletions
diff --git a/activemodel/test/cases/serializeration/xml_serialization_test.rb b/activemodel/test/cases/serializeration/xml_serialization_test.rb
index ac8665d613..3ba826a8d0 100644
--- a/activemodel/test/cases/serializeration/xml_serialization_test.rb
+++ b/activemodel/test/cases/serializeration/xml_serialization_test.rb
@@ -95,6 +95,14 @@ class XmlSerializationTest < ActiveModel::TestCase
assert_match %r{<awesome type=\"boolean\">false</awesome>}, @contact.to_xml
end
+ test "should serialize array" do
+ assert_match %r{<social type=\"array\">\s*<social>twitter</social>\s*<social>github</social>\s*</social>}, @contact.to_xml(:methods => :social)
+ end
+
+ test "should serialize hash" do
+ assert_match %r{<network>\s*<git type=\"symbol\">github</git>\s*</network>}, @contact.to_xml(:methods => :network)
+ end
+
test "should serialize yaml" do
assert_match %r{<preferences type=\"yaml\">--- !ruby/object:OpenStruct \ntable:\s*:name: John\n</preferences>}, @contact.to_xml
end
diff --git a/activemodel/test/models/contact.rb b/activemodel/test/models/contact.rb
index a9009fbdef..605e435f39 100644
--- a/activemodel/test/models/contact.rb
+++ b/activemodel/test/models/contact.rb
@@ -3,6 +3,14 @@ class Contact
attr_accessor :id, :name, :age, :created_at, :awesome, :preferences
+ def social
+ %w(twitter github)
+ end
+
+ def network
+ {:git => :github}
+ end
+
def initialize(options = {})
options.each { |name, value| send("#{name}=", value) }
end
diff --git a/activerecord/test/cases/xml_serialization_test.rb b/activerecord/test/cases/xml_serialization_test.rb
index bd29ae2612..751946ffc5 100644
--- a/activerecord/test/cases/xml_serialization_test.rb
+++ b/activerecord/test/cases/xml_serialization_test.rb
@@ -234,4 +234,12 @@ class DatabaseConnectedXmlSerializationTest < ActiveRecord::TestCase
assert types.include?('StiPost')
end
+ def test_should_produce_xml_for_methods_returning_array
+ xml = authors(:david).to_xml(:methods => :social)
+ array = Hash.from_xml(xml)['author']['social']
+ assert_equal 2, array.size
+ assert array.include? 'twitter'
+ assert array.include? 'github'
+ end
+
end
diff --git a/activerecord/test/models/author.rb b/activerecord/test/models/author.rb
index 025f6207f8..655b45bf57 100644
--- a/activerecord/test/models/author.rb
+++ b/activerecord/test/models/author.rb
@@ -104,6 +104,10 @@ class Author < ActiveRecord::Base
"#{id}-#{name}"
end
+ def social
+ %w(twitter github)
+ end
+
private
def log_before_adding(object)
@post_log << "before_adding#{object.id || '<new>'}"