弃用 Rails 中所有 class 方法的最佳方法

The best way to deprecate all class methods in Rails

我有一个 class(它不是 ActiveRecord 模型)有多个 class 方法。必须弃用所有 class 方法。执行此操作的最佳方法是什么?

class MyClass
  class << self
    def method_to_deprecate_1
      ...
    end
    ...
    def method_to_deprecate_100
      ...
    end
  end
end

Ruby 有一个特殊的模块 Gem::Deprecate,这是官方文档中的一个例子:

class Legacy
  def self.klass_method
    # ...
  end

  def instance_method
    # ...
  end

  extend Gem::Deprecate
  deprecate :instance_method, "X.z", 2011, 4

  class << self
    extend Gem::Deprecate
    deprecate :klass_method, :none, 2011, 4
  end
end

结果将是:

2.5.0 :020 > Legacy.new.instance_method
NOTE: Legacy#instance_method is deprecated; use X.z instead. It will be removed on or after 2011-04-01.
Legacy#instance_method called from (irb):20.
 => nil 
2.5.0 :021 > Legacy.klass_method
NOTE: Legacy.klass_method is deprecated with no replacement. It will be removed on or after 2011-04-01.
Legacy.klass_method called from (irb):21.
 => nil

编辑: 要直接回答您的问题,这是我能想到的最优雅的方式来弃用所有 class 方法:

class Kek
   class << self
     def old_method_1
       # ...
     end

     def old_method_2
       # ...
     end

     extend Gem::Deprecate

     # instance methods here are our actual class methods + all of the Object's methods from Ruby
     instance_methods(false).each { |method_to_deprecate| deprecate(method_to_deprecate, :none, 2011, 4) }
   end
end