2010-02-17 34 views
23

Có cách nào để tạo thông báo phản đối tùy chỉnh cho các phương pháp và/hoặc liên kết trong ứng dụng của tôi mà tôi dự định xóa và muốn đăng nhập sử dụng của họ không? Tôi có một mối quan hệ trong một trong các mô hình của tôi mà tôi không muốn sử dụng di chuyển về phía trước và có kế hoạch tái cấu trúc mã sau đó. Tôi muốn tạo một thông báo trong nhật ký phát triển của mình mỗi khi phương thức đó được gọi.Thông báo phản đối tùy chỉnh đường ray

Tôi đã thấy thông báo phản đối trong Ruby/Rails khi sử dụng một số phương pháp nhất định và phải có cách dễ dàng để thực hiện việc này.

Cái gì đó như ...

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

Trả lời

40

Trong Rails 3 bạn có thể sử dụng: "deprecate" method from ActiveSupport:

class Example 
    def foo 
    end 

    deprecate :foo 
end 

Nó sẽ tạo ra một bí danh cho phương pháp và đầu ra của bạn một cảnh báo với một vết đống. Bạn cũng có thể trực tiếp sử dụng các phần của chức năng này, ví dụ:

ActiveSupport::Deprecation.warn("Message") 

Nó sẽ xuất ra dấu vết ngăn xếp cùng với thông báo.

2

Trong đa số trường hợp, bạn chỉ có thể nâng cao một cảnh báo và gọi phương thức mới.

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 

Có thư viện hoặc lập trình meta nếu bạn cần hoặc muốn trở nên giàu có hơn, nhưng nói chung đó không phải là một tuyến đường tốt để tìm kiếm điều gì đó đơn giản này. Bạn nên có một lý do khá tốt để giới thiệu một sự phụ thuộc cho một cái gì đó đơn giản này.

6

Có thể:

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 

Something dọc theo những đường cho một mối quan hệ.

1

Thêm tôi 2 cent:

Nếu bạn đang sử dụng Yard thay vì rdoc, bình luận doc của bạn sẽ giống như thế này:

# @deprecated Please use {#useful} instead 

Cuối cùng, nếu bạn tuân thủ tomdoc, hãy nhìn nhận xét của bạn như thế này:

# Deprecated: Please use `useful` instead 

De được đặt trước: Cho biết rằng phương pháp không được chấp nhận và sẽ bị xóa trong phiên bản sau. Bạn NÊN sử dụng phương thức này để tài liệu là Public nhưng sẽ bị xóa ở phiên bản chính tiếp theo.

Các vấn đề liên quan