From cb5a5865d4656eb1a44dd50e726f4fb49476326a Mon Sep 17 00:00:00 2001 From: Matthew Draper Date: Sat, 1 Jul 2017 19:26:49 +0930 Subject: [PATCH] Merge pull request #29536 from nickrivadeneira/fix-yaml Ensure `false` is preserved in attr serialization --- activerecord/lib/active_record/attribute.rb | 2 +- activerecord/test/cases/yaml_serialization_test.rb | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/activerecord/lib/active_record/attribute.rb b/activerecord/lib/active_record/attribute.rb index 38281158d87e4..78662433eb5cf 100644 --- a/activerecord/lib/active_record/attribute.rb +++ b/activerecord/lib/active_record/attribute.rb @@ -122,7 +122,7 @@ def init_with(coder) def encode_with(coder) coder["name"] = name - coder["value_before_type_cast"] = value_before_type_cast if value_before_type_cast + coder["value_before_type_cast"] = value_before_type_cast unless value_before_type_cast.nil? coder["type"] = type if type coder["original_attribute"] = original_attribute if original_attribute coder["value"] = value if defined?(@value) diff --git a/activerecord/test/cases/yaml_serialization_test.rb b/activerecord/test/cases/yaml_serialization_test.rb index ab0e67cd9db2d..7ba0613c5c7c3 100644 --- a/activerecord/test/cases/yaml_serialization_test.rb +++ b/activerecord/test/cases/yaml_serialization_test.rb @@ -119,6 +119,14 @@ def test_yaml_encoding_keeps_mutations assert_equal author.changes, dumped.changes end + def test_yaml_encoding_keeps_false_values + topic = Topic.first + topic.approved = false + dumped = YAML.load(YAML.dump(topic)) + + assert_equal false, dumped.approved + end + private def yaml_fixture(file_name)