2010-02-17 23 views
23

有沒有辦法爲我的應用程序中的方法和/或關聯創建自定義棄用通知,我計劃刪除並希望記錄其用法?我在我的一個模型中存在一種關係,我不想使用前進方向並計劃在稍後重構代碼。我想在每次調用該方法時在我的開發日誌中創建通知。Rails自定義棄用通知

在使用某些方法時,我已經在Ruby/Rails中看到過棄用通知,並且必須有一個簡單的方法來執行此操作。

喜歡的東西...

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

回答

40

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

class Example 
    def foo 
    end 

    deprecate :foo 
end 

它將爲你的方法和輸出堆棧跟蹤警告的別名。您也可以直接使用此功能的某些部分,例如:

ActiveSupport::Deprecation.warn("Message") 

它將輸出堆棧跟蹤以及消息。

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 

有庫或元編程,如果你需要或想要更大膽的嘗試,但總體上,這並不是去的東西這個簡單的一個很好的途徑。你應該有一個很好的理由來爲這個簡單的東西引入一個依賴。

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 

沿着這些線路的關係的東西。

1

添加我的2美分:

如果您使用Yard而不是rdoc,你的文檔註釋應該是這樣的:

# @deprecated Please use {#useful} instead 

最後,如果你堅持tomdoc,使您的評論的樣子像這樣:

# Deprecated: Please use `useful` instead 

德precated:表示該方法已被棄用,並將在未來版本中刪除。您應該使用這個來記錄公共的方法,但將在下一個主要版本中刪除。