【问题标题】:Rails Custom Deprecation NoticesRails 自定义弃用通知
【发布时间】:2011-01-18 01:26:57
【问题描述】:
有没有办法为我计划删除并希望记录其使用情况的应用程序中的方法和/或关联创建自定义弃用通知?我的一个模型中有一个关系,我不想继续使用它,并计划在以后重构代码。每次调用该方法时,我想在我的开发日志中创建一个通知。
在使用某些方法时,我在 Ruby/Rails 中看到了弃用通知,并且认为必须有一种简单的方法来做到这一点。
类似...
irb(main):001:0> 1.id
(irb):1: warning: Object#id will be deprecated; use Object#object_id
=> 3
【问题讨论】:
标签:
ruby-on-rails
ruby
logging
deprecated
【解决方案1】:
在大多数情况下,您只需发出警告并调用新方法即可。
class Example
# <b>DEPRECATED:</b> Please use <tt>good_method</tt> instead.
def bad_method
warn "`bad_method` is deprecated. Use `good_method` instead."
good_method
end
def good_method
# ...
end
end
如果您需要或想要获得更高级的功能,可以使用库或元编程,但总的来说,这不是实现如此简单的好方法。您应该有充分的理由为这么简单的事情引入依赖项。
【解决方案2】:
也许:
def old_relationship
warn "[DEPRECATION] old_relationship is deprecated."
@old_relationship
end
def old_relationship=(object)
warn "[DEPRECATION] old_relationship is deprecated."
@old_relationship = object
end
这种关系的东西。
【解决方案3】:
在 Rails 3 中,您可以使用:"deprecate" method from ActiveSupport:
class Example
def foo
end
deprecate :foo
end
它将为您的方法创建一个别名并输出带有堆栈跟踪的警告。您也可以直接使用此功能的一部分,例如:
ActiveSupport::Deprecation.warn("Message")
它将与消息一起输出堆栈跟踪。
【解决方案4】:
加我的 2 美分:
如果您使用的是Yard 而不是rdoc,您的文档注释应如下所示:
# @deprecated Please use {#useful} instead
最后,如果您坚持tomdoc,请让您的评论看起来像这样:
# Deprecated: Please use `useful` instead
已弃用:表示该方法已弃用,将在未来版本中删除。您应该使用它来记录公开但将在下一个主要版本中删除的方法。