弃用 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
我有一个 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