Module: ActiveSupport::Deprecation::MethodWrapper
- Included in:
- ActiveSupport::Deprecation
- Defined in:
- activesupport/lib/active_support/deprecation/method_wrappers.rb
Instance Method Summary collapse
-
#deprecate_methods(target_module, *method_names) ⇒ Object
Declare that a method has been deprecated.
Instance Method Details
#deprecate_methods(target_module, *method_names) ⇒ Object
Declare that a method has been deprecated.
class Fred
def aaa; end
def bbb; end
def ccc; end
def ddd; end
def eee; end
end
Using the default deprecator:
ActiveSupport::Deprecation.deprecate_methods(Fred, :aaa, bbb: :zzz, ccc: 'use Bar#ccc instead')
# => Fred
Fred.new.aaa
# DEPRECATION WARNING: aaa is deprecated and will be removed from Rails 5.1. (called from irb_binding at (irb):10)
# => nil
Fred.new.bbb
# DEPRECATION WARNING: bbb is deprecated and will be removed from Rails 5.1 (use zzz instead). (called from irb_binding at (irb):11)
# => nil
Fred.new.ccc
# DEPRECATION WARNING: ccc is deprecated and will be removed from Rails 5.1 (use Bar#ccc instead). (called from irb_binding at (irb):12)
# => nil
Passing in a custom deprecator:
custom_deprecator = ActiveSupport::Deprecation.new('next-release', 'MyGem')
ActiveSupport::Deprecation.deprecate_methods(Fred, ddd: :zzz, deprecator: custom_deprecator)
# => [:ddd]
Fred.new.ddd
DEPRECATION WARNING: ddd is deprecated and will be removed from MyGem next-release (use zzz instead). (called from irb_binding at (irb):15)
# => nil
Using a custom deprecator directly:
custom_deprecator = ActiveSupport::Deprecation.new('next-release', 'MyGem')
custom_deprecator.deprecate_methods(Fred, eee: :zzz)
# => [:eee]
Fred.new.eee
DEPRECATION WARNING: eee is deprecated and will be removed from MyGem next-release (use zzz instead). (called from irb_binding at (irb):18)
# => nil
52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
# File 'activesupport/lib/active_support/deprecation/method_wrappers.rb', line 52 def deprecate_methods(target_module, *method_names) = method_names. deprecator = .delete(:deprecator) || self method_names += .keys mod = nil method_names.each do |method_name| if target_module.method_defined?(method_name) || target_module.private_method_defined?(method_name) method = target_module.instance_method(method_name) if RUBY_VERSION < "2.7" target_module.redefine_method(method_name) do |*args, &block| deprecator.deprecation_warning(method_name, [method_name]) method.bind(self).call(*args, &block) end else target_module.redefine_method(method_name) do |*args, **kwargs, &block| deprecator.deprecation_warning(method_name, [method_name]) method.bind(self).call(*args, **kwargs, &block) end end else mod ||= Module.new if RUBY_VERSION < "2.7" mod.define_method(method_name) do |*args, &block| deprecator.deprecation_warning(method_name, [method_name]) super(*args, &block) end else mod.define_method(method_name) do |*args, **kwargs, &block| deprecator.deprecation_warning(method_name, [method_name]) super(*args, **kwargs, &block) end end end end target_module.prepend(mod) if mod end |