aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord
diff options
context:
space:
mode:
Diffstat (limited to 'activerecord')
-rw-r--r--activerecord/CHANGELOG2
-rw-r--r--activerecord/lib/active_record/xml_serialization.rb2
-rwxr-xr-xactiverecord/test/base_test.rb2
-rw-r--r--activerecord/test/xml_serialization_test.rb23
4 files changed, 21 insertions, 8 deletions
diff --git a/activerecord/CHANGELOG b/activerecord/CHANGELOG
index 9b1ac32f23..bf3a893e7f 100644
--- a/activerecord/CHANGELOG
+++ b/activerecord/CHANGELOG
@@ -1,5 +1,7 @@
*SVN*
+* Base#to_xml supports serialized attributes. #7502 [jonathan]
+
* Base.update_all :order and :limit options. Useful for MySQL updates that must be ordered to avoid violating unique constraints. [Jeremy Kemper]
* Remove deprecated object transactions. People relying on this functionality should install the object_transactions plugin at http://code.bitsweat.net/svn/object_transactions. Closes #5637 [Koz, Jeremy Kemper]
diff --git a/activerecord/lib/active_record/xml_serialization.rb b/activerecord/lib/active_record/xml_serialization.rb
index 7a8167534d..ff7720d786 100644
--- a/activerecord/lib/active_record/xml_serialization.rb
+++ b/activerecord/lib/active_record/xml_serialization.rb
@@ -275,7 +275,7 @@ module ActiveRecord #:nodoc:
protected
def compute_type
- type = @record.class.columns_hash[name].type
+ type = @record.class.serialized_attributes.has_key?(name) ? :yaml : @record.class.columns_hash[name].type
case type
when :text
diff --git a/activerecord/test/base_test.rb b/activerecord/test/base_test.rb
index c3ae9a08b9..7f629a91f4 100755
--- a/activerecord/test/base_test.rb
+++ b/activerecord/test/base_test.rb
@@ -1509,7 +1509,7 @@ class BasicsTest < Test::Unit::TestCase
assert xml.include?(%(<id type="integer">1</id>))
assert xml.include?(%(<replies-count type="integer">1</replies-count>))
assert xml.include?(%(<written-on type="datetime">#{written_on_in_current_timezone}</written-on>))
- assert xml.include?(%(<content>Have a nice day</content>))
+ assert xml.include?(%(<content type="yaml">--- Have a nice day\n</content>))
assert xml.include?(%(<author-email-address>david@loudthinking.com</author-email-address>))
assert xml.match(%(<parent-id type="integer"></parent-id>))
if current_adapter?(:SybaseAdapter, :SQLServerAdapter, :OracleAdapter)
diff --git a/activerecord/test/xml_serialization_test.rb b/activerecord/test/xml_serialization_test.rb
index 73ff354c48..61da81fe2d 100644
--- a/activerecord/test/xml_serialization_test.rb
+++ b/activerecord/test/xml_serialization_test.rb
@@ -9,11 +9,14 @@ class Contact < ActiveRecord::Base
columns << ActiveRecord::ConnectionAdapters::Column.new(name.to_s, default, sql_type.to_s, null)
end
- column :name, :string
- column :age, :integer
- column :avatar, :binary
- column :created_at, :datetime
- column :awesome, :boolean
+ column :name, :string
+ column :age, :integer
+ column :avatar, :binary
+ column :created_at, :datetime
+ column :awesome, :boolean
+ column :preferences, :string
+
+ serialize :preferences
end
class XmlSerializationTest < Test::Unit::TestCase
@@ -57,7 +60,7 @@ end
class DefaultXmlSerializationTest < Test::Unit::TestCase
def setup
- @xml = Contact.new(:name => 'aaron stack', :age => 25, :avatar => 'binarydata', :created_at => Time.utc(2006, 8, 1), :awesome => false).to_xml
+ @xml = Contact.new(:name => 'aaron stack', :age => 25, :avatar => 'binarydata', :created_at => Time.utc(2006, 8, 1), :awesome => false, :preferences => { :gem => 'ruby' }).to_xml
end
def test_should_serialize_string
@@ -81,6 +84,10 @@ class DefaultXmlSerializationTest < Test::Unit::TestCase
def test_should_serialize_boolean
assert_match %r{<awesome type=\"boolean\">false</awesome>}, @xml
end
+
+ def test_should_serialize_yaml
+ assert_match %r{<preferences type=\"yaml\">--- \n:gem: ruby\n</preferences>}, @xml
+ end
end
class NilXmlSerializationTest < Test::Unit::TestCase
@@ -109,6 +116,10 @@ class NilXmlSerializationTest < Test::Unit::TestCase
def test_should_serialize_boolean
assert_match %r{<awesome type=\"boolean\"></awesome>}, @xml
end
+
+ def test_should_serialize_yaml
+ assert_match %r{<preferences type=\"yaml\"></preferences>}, @xml
+ end
end
class DatabaseConnectedXmlSerializationTest < Test::Unit::TestCase