Deprecate YAML loading from legacy format older than Rails 5.0

`LegacyYamlAdapter` was added at afc124c (and 4e72170), to be able to
load the previous version formatted YAML.

Now, that has became quite useless, since we sometimes removed/added
dedicated type classes which are referred in the legacy format (e.g.
`MysqlDateTime`, `MysqlString`, `SQLite3Integer`), so it is unlikely
that is able to load it correctly any longer.
This commit is contained in:
Ryuta Kamizono 2020-06-15 14:24:17 +09:00
parent 5445e02d13
commit cccf6c31b8
3 changed files with 17 additions and 5 deletions

View File

@ -1,3 +1,7 @@
* Deprecate YAML loading from legacy format older than Rails 5.0.
*Ryuta Kamizono*
* Added the setting `ActiveRecord::Base.immutable_strings_by_default`, which * Added the setting `ActiveRecord::Base.immutable_strings_by_default`, which
allows you to specify that all string columns should be frozen unless allows you to specify that all string columns should be frozen unless
otherwise specified. This will reduce memory pressure for applications which otherwise specified. This will reduce memory pressure for applications which

View File

@ -1,13 +1,17 @@
# frozen_string_literal: true # frozen_string_literal: true
module ActiveRecord module ActiveRecord
module LegacyYamlAdapter module LegacyYamlAdapter # :nodoc:
def self.convert(klass, coder) def self.convert(klass, coder)
return coder unless coder.is_a?(Psych::Coder) return coder unless coder.is_a?(Psych::Coder)
case coder["active_record_yaml_version"] case coder["active_record_yaml_version"]
when 1, 2 then coder when 1, 2 then coder
else else
ActiveSupport::Deprecation.warn(<<-MSG.squish)
YAML loading from legacy format older than Rails 5.0 is deprecated
and will be removed in Rails 6.2.
MSG
if coder["attributes"].is_a?(ActiveModel::AttributeSet) if coder["attributes"].is_a?(ActiveModel::AttributeSet)
Rails420.convert(klass, coder) Rails420.convert(klass, coder)
else else
@ -16,7 +20,7 @@ module ActiveRecord
end end
end end
module Rails420 module Rails420 # :nodoc:
def self.convert(klass, coder) def self.convert(klass, coder)
attribute_set = coder["attributes"] attribute_set = coder["attributes"]
@ -32,7 +36,7 @@ module ActiveRecord
end end
end end
module Rails41 module Rails41 # :nodoc:
def self.convert(klass, coder) def self.convert(klass, coder)
attributes = klass.attributes_builder attributes = klass.attributes_builder
.build_from_database(coder["attributes"]) .build_from_database(coder["attributes"])

View File

@ -94,7 +94,9 @@ class YamlSerializationTest < ActiveRecord::TestCase
end end
def test_deserializing_rails_41_yaml def test_deserializing_rails_41_yaml
topic = YAML.load(yaml_fixture("rails_4_1")) topic = assert_deprecated do
YAML.load(yaml_fixture("rails_4_1"))
end
assert_predicate topic, :new_record? assert_predicate topic, :new_record?
assert_nil topic.id assert_nil topic.id
@ -103,7 +105,9 @@ class YamlSerializationTest < ActiveRecord::TestCase
end end
def test_deserializing_rails_4_2_0_yaml def test_deserializing_rails_4_2_0_yaml
topic = YAML.load(yaml_fixture("rails_4_2_0")) topic = assert_deprecated do
YAML.load(yaml_fixture("rails_4_2_0"))
end
assert_not_predicate topic, :new_record? assert_not_predicate topic, :new_record?
assert_equal 1, topic.id assert_equal 1, topic.id