在Rails中弃用所有类方法的最佳方法



我有一个类(它不是ActiveRecord模型)具有多个类方法。所有类方法都必须弃用。最好的方法是什么?

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

Ruby有一个特殊的模块Gem::对此不建议使用,这里有一个来自官方文档的例子:

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 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

最新更新