Merge pull request #28157 from robin850/hwia-soft-deprecation

Soft-deprecate the `HashWithIndifferentAccess` constant
This commit is contained in:
Matthew Draper 2017-02-25 10:53:03 +10:30
commit 9099cf064f
5 changed files with 57 additions and 3 deletions

@ -50,7 +50,7 @@ def reload(*)
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 @@ def changes_internally_applied # :nodoc:
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 @@ def set_defaults(target) # :doc:
end
end
# :stopdoc:
HashWithIndifferentAccess = ActiveSupport::HashWithIndifferentAccess

@ -8,6 +8,8 @@
require "active_support/inflections"
class HashExtTest < ActiveSupport::TestCase
HashWithIndifferentAccess = ActiveSupport::HashWithIndifferentAccess
class IndifferentHash < ActiveSupport::HashWithIndifferentAccess
end
@ -1088,6 +1090,30 @@ def test_new_with_to_hash_conversion_copies_default_proc
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 @@ def test_to_param_orders_by_key_in_ascending_order
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
-------------------------------------