mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Merge pull request #28157 from robin850/hwia-soft-deprecation
Soft-deprecate the `HashWithIndifferentAccess` constant
This commit is contained in:
commit
9099cf064f
5 changed files with 57 additions and 3 deletions
|
@ -50,7 +50,7 @@ module ActiveRecord
|
|||
super.tap do
|
||||
@previous_mutation_tracker = nil
|
||||
clear_mutation_trackers
|
||||
@changed_attributes = HashWithIndifferentAccess.new
|
||||
@changed_attributes = ActiveSupport::HashWithIndifferentAccess.new
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -70,13 +70,13 @@ module ActiveRecord
|
|||
|
||||
def changes_applied
|
||||
@previous_mutation_tracker = mutation_tracker
|
||||
@changed_attributes = HashWithIndifferentAccess.new
|
||||
@changed_attributes = ActiveSupport::HashWithIndifferentAccess.new
|
||||
clear_mutation_trackers
|
||||
end
|
||||
|
||||
def clear_changes_information
|
||||
@previous_mutation_tracker = nil
|
||||
@changed_attributes = HashWithIndifferentAccess.new
|
||||
@changed_attributes = ActiveSupport::HashWithIndifferentAccess.new
|
||||
forget_attribute_assignments
|
||||
clear_mutation_trackers
|
||||
end
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
* Soft-deprecated the top-level `HashWithIndifferentAcces` constant.
|
||||
`ActiveSupport::HashWithIndifferentAccess` should be used instead.
|
||||
|
||||
*Robin Dupret* (#28157)
|
||||
|
||||
* In Core Extensions, make `MarshalWithAutoloading#load` pass through the second, optional
|
||||
argument for `Marshal#load( source [, proc] )`. This way we don't have to do
|
||||
`Marshal.method(:load).super_method.call(sourse, proc)` just to be able to pass a proc.
|
||||
|
|
|
@ -316,4 +316,6 @@ module ActiveSupport
|
|||
end
|
||||
end
|
||||
|
||||
# :stopdoc:
|
||||
|
||||
HashWithIndifferentAccess = ActiveSupport::HashWithIndifferentAccess
|
||||
|
|
|
@ -8,6 +8,8 @@ require "active_support/core_ext/object/deep_dup"
|
|||
require "active_support/inflections"
|
||||
|
||||
class HashExtTest < ActiveSupport::TestCase
|
||||
HashWithIndifferentAccess = ActiveSupport::HashWithIndifferentAccess
|
||||
|
||||
class IndifferentHash < ActiveSupport::HashWithIndifferentAccess
|
||||
end
|
||||
|
||||
|
@ -1088,6 +1090,30 @@ class HashExtTest < ActiveSupport::TestCase
|
|||
assert_equal 1, hash[:a]
|
||||
assert_equal 3, hash[:b]
|
||||
end
|
||||
|
||||
def test_inheriting_from_top_level_hash_with_indifferent_access_preserves_ancestors_chain
|
||||
klass = Class.new(::HashWithIndifferentAccess)
|
||||
assert_equal ActiveSupport::HashWithIndifferentAccess, klass.ancestors[1]
|
||||
end
|
||||
|
||||
def test_inheriting_from_hash_with_indifferent_access_properly_dumps_ivars
|
||||
klass = Class.new(::HashWithIndifferentAccess) do
|
||||
def initialize(*)
|
||||
@foo = "bar"
|
||||
super
|
||||
end
|
||||
end
|
||||
|
||||
yaml_output = klass.new.to_yaml
|
||||
|
||||
# `hash-with-ivars` was introduced in 2.0.9 (https://git.io/vyUQW)
|
||||
if Gem::Version.new(Psych::VERSION) >= Gem::Version.new("2.0.9")
|
||||
assert_includes yaml_output, "hash-with-ivars"
|
||||
assert_includes yaml_output, "@foo: bar"
|
||||
else
|
||||
assert_includes yaml_output, "hash"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
class IWriteMyOwnXML
|
||||
|
@ -1133,6 +1159,8 @@ class HashExtToParamTests < ActiveSupport::TestCase
|
|||
end
|
||||
|
||||
class HashToXmlTest < ActiveSupport::TestCase
|
||||
HashWithIndifferentAccess = ActiveSupport::HashWithIndifferentAccess
|
||||
|
||||
def setup
|
||||
@xml_options = { root: :person, skip_instruct: true, indent: 0 }
|
||||
end
|
||||
|
|
|
@ -65,6 +65,25 @@ Overwrite /myapp/config/application.rb? (enter "h" for help) [Ynaqdh]
|
|||
|
||||
Don't forget to review the difference, to see if there were any unexpected changes.
|
||||
|
||||
Upgrading from Rails 5.0 to Rails 5.1
|
||||
-------------------------------------
|
||||
|
||||
For more information on changes made to Rails 5.1 please see the [release notes](5_1_release_notes.html).
|
||||
|
||||
### Top-level `HashWithIndifferentAccess` is soft-deprecated
|
||||
|
||||
If your application uses the the top-level `HashWithIndifferentAccess` class, you
|
||||
should slowly move your code to use the `ActiveSupport::HashWithIndifferentAccess`
|
||||
one.
|
||||
|
||||
It is only soft-deprecated, which means that your code will not break at the
|
||||
moment and no deprecation warning will be displayed but this constant will be
|
||||
removed in the future.
|
||||
|
||||
Also, if you have pretty old YAML documents containg dumps of such objects,
|
||||
you may need to load and dump them again to make sure that they reference
|
||||
the right constant and that loading them won't break in the future.
|
||||
|
||||
Upgrading from Rails 4.2 to Rails 5.0
|
||||
-------------------------------------
|
||||
|
||||
|
|
Loading…
Reference in a new issue