Apply instance delegators to application deprecators when available
This restores the 7.0 behavior of the instance delegator impacting all deprecations from Rails.
This commit is contained in:
parent
e5af9c298a
commit
0f0aa86091
@ -19,6 +19,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)"
|
||||
"Rails.application.deprecators.#{method_name}"
|
||||
when :warn, :deprecate_methods, :gem_name, :gem_name=, :deprecation_horizon, :deprecation_horizon=
|
||||
"your own Deprecation object"
|
||||
@ -26,9 +27,10 @@ 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"
|
||||
singleton_class.module_eval <<~RUBY, __FILE__, __LINE__ + 1
|
||||
def #{method_name}(#{args})
|
||||
ActiveSupport::Deprecation.instance.#{method_name}(#{args})
|
||||
#{target}.#{method_name}(#{args})
|
||||
ensure
|
||||
ActiveSupport.deprecator.warn("Calling #{method_name} on ActiveSupport::Deprecation is deprecated and will be removed from Rails (use #{use_instead} instead)")
|
||||
end
|
||||
|
@ -779,6 +779,18 @@ def method
|
||||
end
|
||||
end
|
||||
|
||||
test "silence delegator is deprecated and delegates to the application's deprecators when available" do
|
||||
with_rails_application_deprecators do
|
||||
assert_deprecated("use Rails.application.deprecators.silence instead", ActiveSupport.deprecator) do
|
||||
ActiveSupport::Deprecation.silence do
|
||||
assert_not_deprecated(@deprecator) do
|
||||
@deprecator.warn
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
test "allow delegator is deprecated" do
|
||||
assert_deprecated("use Rails.application.deprecators[framework].allow", ActiveSupport.deprecator) do
|
||||
ActiveSupport::Deprecation.allow { }
|
||||
@ -797,6 +809,17 @@ def method
|
||||
ActiveSupport::Deprecation.instance.behavior = old_behavior
|
||||
end
|
||||
|
||||
test "behavior= delegator is deprecated and delegates to the application's deprecators when available" do
|
||||
with_rails_application_deprecators do
|
||||
called = false
|
||||
assert_deprecated("use Rails.application.deprecators.behavior= instead", ActiveSupport.deprecator) do
|
||||
ActiveSupport::Deprecation.behavior = ->(*) { called = true }
|
||||
@deprecator.warn
|
||||
end
|
||||
assert called
|
||||
end
|
||||
end
|
||||
|
||||
test "disallowed_behavior delegators are deprecated" do
|
||||
old_behavior = ActiveSupport::Deprecation.instance.disallowed_behavior
|
||||
assert_deprecated("use Rails.application.deprecators[framework].disallowed_behavior", ActiveSupport.deprecator) do
|
||||
@ -809,6 +832,18 @@ def method
|
||||
ActiveSupport::Deprecation.instance.disallowed_behavior = old_behavior
|
||||
end
|
||||
|
||||
test "disallowed_behavior= delegators is deprecated and delegates to the application's deprecators when available" do
|
||||
with_rails_application_deprecators do
|
||||
called = false
|
||||
assert_deprecated("use Rails.application.deprecators.disallowed_behavior= instead", ActiveSupport.deprecator) do
|
||||
ActiveSupport::Deprecation.disallowed_behavior = ->(*) { called = true }
|
||||
end
|
||||
@deprecator.disallowed_warnings = :all
|
||||
@deprecator.warn
|
||||
assert called
|
||||
end
|
||||
end
|
||||
|
||||
test "debug delegators are deprecated" do
|
||||
old_debug = ActiveSupport::Deprecation.instance.debug
|
||||
assert_deprecated("use Rails.application.deprecators[framework].debug", ActiveSupport.deprecator) do
|
||||
@ -821,6 +856,15 @@ def method
|
||||
ActiveSupport::Deprecation.instance.debug = old_debug
|
||||
end
|
||||
|
||||
test "debug= delegator is deprecated and delegates to the application's deprecators when available" do
|
||||
with_rails_application_deprecators do
|
||||
assert_deprecated("use Rails.application.deprecators.debug= instead", ActiveSupport.deprecator) do
|
||||
ActiveSupport::Deprecation.debug = true
|
||||
end
|
||||
assert @deprecator.debug
|
||||
end
|
||||
end
|
||||
|
||||
test "silenced delegators are deprecated" do
|
||||
old_silenced = ActiveSupport::Deprecation.instance.silenced
|
||||
assert_deprecated("use Rails.application.deprecators[framework].silenced", ActiveSupport.deprecator) do
|
||||
@ -833,6 +877,15 @@ def method
|
||||
ActiveSupport::Deprecation.instance.silenced = old_silenced
|
||||
end
|
||||
|
||||
test "silenced= delegator is deprecated and delegates to the application's deprecators when available" do
|
||||
with_rails_application_deprecators do
|
||||
assert_deprecated("use Rails.application.deprecators.silenced= instead", ActiveSupport.deprecator) do
|
||||
ActiveSupport::Deprecation.silenced = true
|
||||
end
|
||||
assert @deprecator.silenced
|
||||
end
|
||||
end
|
||||
|
||||
test "disallowed_warnings delegators are deprecated" do
|
||||
old_disallowed_warnings = ActiveSupport::Deprecation.instance.disallowed_warnings
|
||||
assert_deprecated("use Rails.application.deprecators[framework].disallowed_warnings", ActiveSupport.deprecator) do
|
||||
@ -845,6 +898,15 @@ def method
|
||||
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
|
||||
with_rails_application_deprecators do
|
||||
assert_deprecated("use Rails.application.deprecators.disallowed_warnings= instead", ActiveSupport.deprecator) do
|
||||
ActiveSupport::Deprecation.disallowed_warnings = :all
|
||||
end
|
||||
assert_equal :all, @deprecator.disallowed_warnings
|
||||
end
|
||||
end
|
||||
|
||||
test "gem_name delegators are deprecated" do
|
||||
old_gem_name = ActiveSupport::Deprecation.instance.gem_name
|
||||
assert_deprecated("use your own Deprecation object instead", ActiveSupport.deprecator) do
|
||||
@ -881,6 +943,13 @@ def method_that_emits_deprecation(deprecator)
|
||||
deprecator.warn
|
||||
end
|
||||
|
||||
def with_rails_application_deprecators(&block)
|
||||
application = Struct.new(:deprecators).new(ActiveSupport::Deprecation::Deprecators.new)
|
||||
rails = Struct.new(:application).new(application)
|
||||
rails.application.deprecators[:deprecator] = @deprecator
|
||||
stub_const(Object, :Rails, rails, &block)
|
||||
end
|
||||
|
||||
def deprecator_with_messages
|
||||
klass = Class.new(ActiveSupport::Deprecation)
|
||||
deprecator = klass.new
|
||||
|
Loading…
Reference in New Issue
Block a user