aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGuten <ywzhaifei@gmail.com>2011-08-29 23:29:11 +0800
committerPiotr Sarnacki <drogus@gmail.com>2012-03-26 21:57:39 +0200
commit9637de6b472b05a09fe6d28d973b4729e3ea4615 (patch)
treef7c24fd7a10451f9f8bdd5eb49bfa07473296d4f
parent2e8129e87afe30dc37a4da93c0bb36afbeb6464d (diff)
downloadrails-9637de6b472b05a09fe6d28d973b4729e3ea4615.tar.gz
rails-9637de6b472b05a09fe6d28d973b4729e3ea4615.tar.bz2
rails-9637de6b472b05a09fe6d28d973b4729e3ea4615.zip
ActiveRecord::Coders::YAMLColumn#dump should raise an error
closes #2737 Conflicts: activerecord/lib/active_record/coders/yaml_column.rb
-rw-r--r--activerecord/lib/active_record/coders/yaml_column.rb8
-rw-r--r--activerecord/test/cases/coders/yaml_column_test.rb7
2 files changed, 14 insertions, 1 deletions
diff --git a/activerecord/lib/active_record/coders/yaml_column.rb b/activerecord/lib/active_record/coders/yaml_column.rb
index 77af540c3e..66a0c83c41 100644
--- a/activerecord/lib/active_record/coders/yaml_column.rb
+++ b/activerecord/lib/active_record/coders/yaml_column.rb
@@ -15,7 +15,13 @@ module ActiveRecord
end
def dump(obj)
- YAML.dump(obj) unless obj.nil?
+ return if obj.nil?
+
+ unless obj.is_a?(object_class)
+ raise SerializationTypeMismatch,
+ "Attribute was supposed to be a #{object_class}, but was a #{obj.class}. -- #{obj.inspect}"
+ end
+ YAML.dump obj
end
def load(yaml)
diff --git a/activerecord/test/cases/coders/yaml_column_test.rb b/activerecord/test/cases/coders/yaml_column_test.rb
index c7dcc21809..b874adc081 100644
--- a/activerecord/test/cases/coders/yaml_column_test.rb
+++ b/activerecord/test/cases/coders/yaml_column_test.rb
@@ -9,6 +9,13 @@ module ActiveRecord
assert_equal Object, coder.object_class
end
+ def test_type_mismatch_on_different_classes_on_dump
+ coder = YAMLColumn.new(Array)
+ assert_raises(SerializationTypeMismatch) do
+ coder.dump("a")
+ end
+ end
+
def test_type_mismatch_on_different_classes
coder = YAMLColumn.new(Array)
assert_raises(SerializationTypeMismatch) do