Module: ActiveSupport::Deprecation::MethodWrapper

Included in:
ActiveSupport::Deprecation
Defined in:
activesupport/lib/active_support/deprecation/method_wrappers.rb

Instance Method Summary collapse

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

deprecator = ActiveSupport::Deprecation.new('next-release', 'MyGem')

deprecator.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 MyGem next-release. (called from irb_binding at (irb):10)
# => nil

Fred.new.bbb
# DEPRECATION WARNING: bbb is deprecated and will be removed from MyGem next-release (use zzz instead). (called from irb_binding at (irb):11)
# => nil

Fred.new.ccc
# DEPRECATION WARNING: ccc is deprecated and will be removed from MyGem next-release (use Bar#ccc instead). (called from irb_binding at (irb):12)
# => nil


35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'activesupport/lib/active_support/deprecation/method_wrappers.rb', line 35

def deprecate_methods(target_module, *method_names)
  options = method_names.extract_options!
  deprecator = options.delete(:deprecator) || self
  method_names += options.keys
  mod = nil

  method_names.each do |method_name|
    message = options[method_name]
    if target_module.method_defined?(method_name) || target_module.private_method_defined?(method_name)
      method = target_module.instance_method(method_name)
      target_module.module_eval do
        redefine_method(method_name) do |*args, &block|
          deprecator.deprecation_warning(method_name, message)
          method.bind_call(self, *args, &block)
        end
        ruby2_keywords(method_name)
      end
    else
      mod ||= Module.new
      mod.module_eval do
        define_method(method_name) do |*args, &block|
          deprecator.deprecation_warning(method_name, message)
          super(*args, &block)
        end
        ruby2_keywords(method_name)
      end
    end
  end

  target_module.prepend(mod) if mod
end