提交 260c384b 编写于 作者: Y Yves Senn

Merge pull request #15432 from sgrif/sg-coder-type-casting

Don't change values in `@raw_attributes` during serialization
...@@ -289,7 +289,7 @@ def attributes ...@@ -289,7 +289,7 @@ def attributes
# Placeholder so it can be overriden when needed by serialization # Placeholder so it can be overriden when needed by serialization
def attributes_for_coder # :nodoc: def attributes_for_coder # :nodoc:
attributes attributes_before_type_cast
end end
# Returns an <tt>#inspect</tt>-like string for the value of the # Returns an <tt>#inspect</tt>-like string for the value of the
......
...@@ -138,7 +138,7 @@ def attributes_for_coder ...@@ -138,7 +138,7 @@ def attributes_for_coder
attrs[name] = if self.class.serialized_attributes.include?(name) attrs[name] = if self.class.serialized_attributes.include?(name)
@raw_attributes[name].serialized_value @raw_attributes[name].serialized_value
else else
read_attribute(name) read_attribute_before_type_cast(name)
end end
end end
end end
......
...@@ -183,20 +183,6 @@ class StoreTest < ActiveRecord::TestCase ...@@ -183,20 +183,6 @@ class StoreTest < ActiveRecord::TestCase
assert_equal({}, @john.params) assert_equal({}, @john.params)
end end
test "attributes_for_coder should return stored fields already serialized" do
attributes = {
"id" => @john.id,
"name"=> @john.name,
"settings" => "--- !ruby/hash:ActiveSupport::HashWithIndifferentAccess\ncolor: black\n",
"preferences" => "--- !ruby/hash:ActiveSupport::HashWithIndifferentAccess\nremember_login: true\n",
"json_data" => "{\"height\":\"tall\"}", "json_data_empty"=>"{\"is_a_good_guy\":true}",
"params" => "--- !ruby/hash:ActiveSupport::HashWithIndifferentAccess {}\n",
"account_id"=> @john.account_id
}
assert_equal attributes, @john.attributes_for_coder
end
test "dump, load and dump again a model" do test "dump, load and dump again a model" do
dumped = YAML.dump(@john) dumped = YAML.dump(@john)
loaded = YAML.load(dumped) loaded = YAML.load(dumped)
......
...@@ -23,13 +23,6 @@ def test_roundtrip_serialized_column ...@@ -23,13 +23,6 @@ def test_roundtrip_serialized_column
assert_equal({:omg=>:lol}, YAML.load(YAML.dump(topic)).content) assert_equal({:omg=>:lol}, YAML.load(YAML.dump(topic)).content)
end end
def test_encode_with_coder
topic = Topic.first
coder = {}
topic.encode_with coder
assert_equal({'attributes' => topic.attributes}, coder)
end
def test_psych_roundtrip def test_psych_roundtrip
topic = Topic.first topic = Topic.first
assert topic assert topic
...@@ -47,4 +40,16 @@ def test_psych_roundtrip_new_object ...@@ -47,4 +40,16 @@ def test_psych_roundtrip_new_object
def test_active_record_relation_serialization def test_active_record_relation_serialization
[Topic.all].to_yaml [Topic.all].to_yaml
end end
def test_raw_types_are_not_changed_on_round_trip
topic = Topic.new(parent_id: "123")
assert_equal "123", topic.parent_id_before_type_cast
assert_equal "123", YAML.load(YAML.dump(topic)).parent_id_before_type_cast
end
def test_cast_types_are_not_changed_on_round_trip
topic = Topic.new(parent_id: "123")
assert_equal 123, topic.parent_id
assert_equal 123, YAML.load(YAML.dump(topic)).parent_id
end
end end
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册