Deprecate ActiveSupport::Deprecation.instance

This commit is contained in:
Étienne Barrié 2023-03-10 14:23:19 +01:00
parent 0f0aa86091
commit c8eeac52f8
9 changed files with 36 additions and 30 deletions

@ -22,7 +22,7 @@ def deprecate(*method_names, deprecator: nil, **options)
ActiveSupport.deprecator.deprecate_methods(self, *method_names, **options, deprecator: deprecator)
else
ActiveSupport.deprecator.warn("Module.deprecate without a deprecator is deprecated")
ActiveSupport::Deprecation.instance.deprecate_methods(self, *method_names, **options)
ActiveSupport::Deprecation._instance.deprecate_methods(self, *method_names, **options)
end
end
end

@ -25,7 +25,7 @@ class Deprecation
require "active_support/core_ext/module/deprecation"
require "concurrent/atomic/thread_local_var"
include Singleton
include Singleton # :nodoc:
include InstanceDelegator
include Behavior
include Reporting

@ -41,7 +41,7 @@ def const_missing(missing_const_name)
def deprecate_constant(const_name, new_constant, message: nil, deprecator: nil)
ActiveSupport.deprecator.warn("DeprecatedConstantAccessor.deprecate_constant without a deprecator is deprecated") unless deprecator
deprecator ||= ActiveSupport::Deprecation.instance
deprecator ||= ActiveSupport::Deprecation._instance
class_variable_set(:@@_deprecated_constants, {}) unless class_variable_defined?(:@@_deprecated_constants)
class_variable_get(:@@_deprecated_constants)[const_name.to_s] = { new: new_constant, message: message, deprecator: deprecator }
end

@ -4,6 +4,7 @@ module ActiveSupport
class Deprecation
module InstanceDelegator # :nodoc:
def self.included(base)
base.singleton_class.alias_method(:_instance, :instance)
base.extend(ClassMethods)
base.singleton_class.prepend(OverrideDelegators)
base.public_class_method :new
@ -19,7 +20,7 @@ def method_added(method_name)
use_instead =
case method_name
when :silence, :behavior=, :disallowed_behavior=, :disallowed_warnings=, :silenced=, :debug=
target = "(defined?(Rails.application.deprecators) ? Rails.application.deprecators : ActiveSupport::Deprecation.instance)"
target = "(defined?(Rails.application.deprecators) ? Rails.application.deprecators : ActiveSupport::Deprecation._instance)"
"Rails.application.deprecators.#{method_name}"
when :warn, :deprecate_methods, :gem_name, :gem_name=, :deprecation_horizon, :deprecation_horizon=
"your own Deprecation object"
@ -27,7 +28,7 @@ def method_added(method_name)
"Rails.application.deprecators[framework].#{method_name} where framework is for example :active_record"
end
args = /[^\]]=\z/.match?(method_name) ? "arg" : "..."
target ||= "ActiveSupport::Deprecation.instance"
target ||= "ActiveSupport::Deprecation._instance"
singleton_class.module_eval <<~RUBY, __FILE__, __LINE__ + 1
def #{method_name}(#{args})
#{target}.#{method_name}(#{args})
@ -36,6 +37,11 @@ def #{method_name}(#{args})
end
RUBY
end
def instance
ActiveSupport.deprecator.warn("ActiveSupport::Deprecation.instance is deprecated (use your own Deprecation object)")
super
end
end
module OverrideDelegators # :nodoc:

@ -40,7 +40,7 @@ def initialize(object, message, deprecator = nil)
@object = object
@message = message
ActiveSupport.deprecator.warn("DeprecatedObjectProxy without a deprecator is deprecated") unless deprecator
@deprecator = deprecator || ActiveSupport::Deprecation.instance
@deprecator = deprecator || ActiveSupport::Deprecation._instance
end
private
@ -91,7 +91,7 @@ def initialize(instance, method, var = "@#{method}", deprecator = nil)
@method = method
@var = var
ActiveSupport.deprecator.warn("DeprecatedInstanceVariableProxy without a deprecator is deprecated") unless deprecator
@deprecator = deprecator || ActiveSupport::Deprecation.instance
@deprecator = deprecator || ActiveSupport::Deprecation._instance
end
private
@ -133,7 +133,7 @@ def initialize(old_const, new_const, deprecator = nil, message: "#{old_const} is
@old_const = old_const
@new_const = new_const
ActiveSupport.deprecator.warn("DeprecatedConstantProxy without a deprecator is deprecated") unless deprecator
@deprecator = deprecator || ActiveSupport::Deprecation.instance
@deprecator = deprecator || ActiveSupport::Deprecation._instance
@message = message
end

@ -31,7 +31,7 @@ def assert_deprecated(match = nil, deprecator = nil, &block)
match, deprecator = nil, match if match.is_a?(ActiveSupport::Deprecation)
unless deprecator
ActiveSupport.deprecator.warn("assert_deprecated without a deprecator is deprecated")
deprecator = ActiveSupport::Deprecation.instance
deprecator = ActiveSupport::Deprecation._instance
end
result, warnings = collect_deprecations(deprecator, &block)
assert !warnings.empty?, "Expected a deprecation warning within the block but received none"
@ -54,7 +54,7 @@ def assert_deprecated(match = nil, deprecator = nil, &block)
def assert_not_deprecated(deprecator = nil, &block)
unless deprecator
ActiveSupport.deprecator.warn("assert_not_deprecated without a deprecator is deprecated")
deprecator = ActiveSupport::Deprecation.instance
deprecator = ActiveSupport::Deprecation._instance
end
result, deprecations = collect_deprecations(deprecator, &block)
assert deprecations.empty?, "Expected no deprecation warning within the block but received #{deprecations.size}: \n #{deprecations * "\n "}"
@ -72,7 +72,7 @@ def assert_not_deprecated(deprecator = nil, &block)
def collect_deprecations(deprecator = nil)
unless deprecator
ActiveSupport.deprecator.warn("collect_deprecations without a deprecator is deprecated")
deprecator = ActiveSupport::Deprecation.instance
deprecator = ActiveSupport::Deprecation._instance
end
old_behavior = deprecator.behavior
deprecations = []

@ -42,7 +42,7 @@ def setup
test "assert_deprecated is deprecated without a deprecator" do
assert_deprecated(ActiveSupport.deprecator) do
assert_deprecated do
ActiveSupport::Deprecation.instance.warn
ActiveSupport::Deprecation._instance.warn
end
end
end
@ -114,7 +114,7 @@ def setup
klass.deprecate :zero
end
assert_match "Module.deprecate without a deprecator is deprecated", deprecations.sole
assert_deprecated(/zero is deprecated/, ActiveSupport::Deprecation.instance) do
assert_deprecated(/zero is deprecated/, ActiveSupport::Deprecation._instance) do
klass.new.zero
end
end
@ -761,7 +761,7 @@ def method
test "warn delegator is deprecated" do
assert_deprecated("use your own Deprecation object instead", ActiveSupport.deprecator) do
assert_deprecated(ActiveSupport::Deprecation.instance) do
assert_deprecated(ActiveSupport::Deprecation._instance) do
ActiveSupport::Deprecation.warn
end
end
@ -798,7 +798,7 @@ def method
end
test "behavior delegators are deprecated" do
old_behavior = ActiveSupport::Deprecation.instance.behavior
old_behavior = ActiveSupport::Deprecation._instance.behavior
assert_deprecated("use Rails.application.deprecators[framework].behavior", ActiveSupport.deprecator) do
ActiveSupport::Deprecation.behavior
end
@ -806,7 +806,7 @@ def method
ActiveSupport::Deprecation.behavior = ->(*) { }
end
ensure
ActiveSupport::Deprecation.instance.behavior = old_behavior
ActiveSupport::Deprecation._instance.behavior = old_behavior
end
test "behavior= delegator is deprecated and delegates to the application's deprecators when available" do
@ -821,7 +821,7 @@ def method
end
test "disallowed_behavior delegators are deprecated" do
old_behavior = ActiveSupport::Deprecation.instance.disallowed_behavior
old_behavior = ActiveSupport::Deprecation._instance.disallowed_behavior
assert_deprecated("use Rails.application.deprecators[framework].disallowed_behavior", ActiveSupport.deprecator) do
ActiveSupport::Deprecation.disallowed_behavior
end
@ -829,7 +829,7 @@ def method
ActiveSupport::Deprecation.disallowed_behavior = ->(*) { }
end
ensure
ActiveSupport::Deprecation.instance.disallowed_behavior = old_behavior
ActiveSupport::Deprecation._instance.disallowed_behavior = old_behavior
end
test "disallowed_behavior= delegators is deprecated and delegates to the application's deprecators when available" do
@ -845,7 +845,7 @@ def method
end
test "debug delegators are deprecated" do
old_debug = ActiveSupport::Deprecation.instance.debug
old_debug = ActiveSupport::Deprecation._instance.debug
assert_deprecated("use Rails.application.deprecators[framework].debug", ActiveSupport.deprecator) do
ActiveSupport::Deprecation.debug
end
@ -853,7 +853,7 @@ def method
ActiveSupport::Deprecation.debug = true
end
ensure
ActiveSupport::Deprecation.instance.debug = old_debug
ActiveSupport::Deprecation._instance.debug = old_debug
end
test "debug= delegator is deprecated and delegates to the application's deprecators when available" do
@ -866,7 +866,7 @@ def method
end
test "silenced delegators are deprecated" do
old_silenced = ActiveSupport::Deprecation.instance.silenced
old_silenced = ActiveSupport::Deprecation._instance.silenced
assert_deprecated("use Rails.application.deprecators[framework].silenced", ActiveSupport.deprecator) do
ActiveSupport::Deprecation.silenced
end
@ -874,7 +874,7 @@ def method
ActiveSupport::Deprecation.silenced = true
end
ensure
ActiveSupport::Deprecation.instance.silenced = old_silenced
ActiveSupport::Deprecation._instance.silenced = old_silenced
end
test "silenced= delegator is deprecated and delegates to the application's deprecators when available" do
@ -887,7 +887,7 @@ def method
end
test "disallowed_warnings delegators are deprecated" do
old_disallowed_warnings = ActiveSupport::Deprecation.instance.disallowed_warnings
old_disallowed_warnings = ActiveSupport::Deprecation._instance.disallowed_warnings
assert_deprecated("use Rails.application.deprecators[framework].disallowed_warnings", ActiveSupport.deprecator) do
ActiveSupport::Deprecation.disallowed_warnings
end
@ -895,7 +895,7 @@ def method
ActiveSupport::Deprecation.disallowed_warnings = :all
end
ensure
ActiveSupport::Deprecation.instance.disallowed_warnings = old_disallowed_warnings
ActiveSupport::Deprecation._instance.disallowed_warnings = old_disallowed_warnings
end
test "disallowed_warnings= delegator is deprecated and delegates to the application's deprecators when available" do
@ -908,7 +908,7 @@ def method
end
test "gem_name delegators are deprecated" do
old_gem_name = ActiveSupport::Deprecation.instance.gem_name
old_gem_name = ActiveSupport::Deprecation._instance.gem_name
assert_deprecated("use your own Deprecation object instead", ActiveSupport.deprecator) do
ActiveSupport::Deprecation.gem_name
end
@ -916,11 +916,11 @@ def method
ActiveSupport::Deprecation.gem_name = "MyGem"
end
ensure
ActiveSupport::Deprecation.instance.gem_name = old_gem_name
ActiveSupport::Deprecation._instance.gem_name = old_gem_name
end
test "deprecation_horizon delegators are deprecated" do
old_deprecation_horizon = ActiveSupport::Deprecation.instance.deprecation_horizon
old_deprecation_horizon = ActiveSupport::Deprecation._instance.deprecation_horizon
assert_deprecated("use your own Deprecation object instead", ActiveSupport.deprecator) do
ActiveSupport::Deprecation.deprecation_horizon
end
@ -928,7 +928,7 @@ def method
ActiveSupport::Deprecation.deprecation_horizon = "2.0"
end
ensure
ActiveSupport::Deprecation.instance.deprecation_horizon = old_deprecation_horizon
ActiveSupport::Deprecation._instance.deprecation_horizon = old_deprecation_horizon
end
test "warn deprecation skips the internal caller locations" do

@ -2,6 +2,6 @@
module Rails
def self.deprecator # :nodoc:
ActiveSupport::Deprecation.instance
ActiveSupport::Deprecation._instance
end
end

@ -3994,7 +3994,7 @@ def new(app); self; end
test "Rails.application.deprecators includes framework deprecators" do
app "production"
assert_includes Rails.application.deprecators.each, ActiveSupport::Deprecation.instance
assert_includes Rails.application.deprecators.each, ActiveSupport::Deprecation._instance
assert_equal ActionCable.deprecator, Rails.application.deprecators[:action_cable]
assert_equal AbstractController.deprecator, Rails.application.deprecators[:action_controller]
assert_equal ActionController.deprecator, Rails.application.deprecators[:action_controller]