Rails自定义弃用通知

时间:2010-02-17 20:42:54

标签: ruby-on-rails ruby logging deprecated

有没有办法为我计划删除并希望记录其使用情况的应用程序中的方法和/或关联创建自定义弃用通知?我在我的一个模型中有一个关系,我不想继续前进并计划稍后重构代码。我想在每次调用该方法时在我的开发日志中创建一个通知。

在使用某些方法时,我在Ruby / Rails中看到了弃用通知,并且必须有一种简单的方法来执行此操作。

像...一样的东西。

irb(main):001:0> 1.id
(irb):1: warning: Object#id will be deprecated; use Object#object_id
=> 3

4 个答案:

答案 0 :(得分:42)

在Rails 3中,您可以使用:"deprecate" method from ActiveSupport

class Example
  def foo
  end

  deprecate :foo
end

它将为您的方法创建一个别名,并输出一个带有堆栈跟踪的警告。您也可以直接使用此功能的部分内容,例如:

ActiveSupport::Deprecation.warn("Message")

它将输出堆栈跟踪以及消息。

答案 1 :(得分:6)

也许:

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

关系中的某些事情。

答案 2 :(得分:2)

在大多数情况下,您只需发出警告并调用新方法。

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

如果您需要或希望获得更高级的功能,可以使用库或元编程,但总的来说,这并不是一个很好的途径。你应该有一个很好的理由来介绍这种简单的依赖。

答案 3 :(得分:1)

加我2美分:

如果您使用的是Yard而不是rdoc,那么您的文档评论应如下所示:

# @deprecated Please use {#useful} instead

最后,如果您遵守tomdoc,请将评论看起来像这样:

# Deprecated: Please use `useful` instead
  

不推荐使用:表示该方法已弃用,将在以后的版本中删除。您应该使用它来记录公开的方法,但将在下一个主要版本中删除。

相关问题