diff options
author | Guten <ywzhaifei@gmail.com> | 2011-08-29 23:29:11 +0800 |
---|---|---|
committer | Piotr Sarnacki <drogus@gmail.com> | 2012-03-26 21:57:39 +0200 |
commit | 9637de6b472b05a09fe6d28d973b4729e3ea4615 (patch) | |
tree | f7c24fd7a10451f9f8bdd5eb49bfa07473296d4f | |
parent | 2e8129e87afe30dc37a4da93c0bb36afbeb6464d (diff) | |
download | rails-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.rb | 8 | ||||
-rw-r--r-- | activerecord/test/cases/coders/yaml_column_test.rb | 7 |
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 |