Пользовательские уведомления об исключении Rails
Есть ли способ создать пользовательские уведомления об изнашивании для методов и/или ассоциаций в моем приложении, которые я планирую удалить и хочу зарегистрировать их использование? У меня есть отношения в одной из моих моделей, которые я не хочу использовать для продвижения вперед и планировать реорганизацию кода позднее. Я хотел бы создать уведомление в моем журнале разработки каждый раз, когда вызывается этот метод.
Я видел уведомления об исключении из Ruby/Rails при использовании определенных методов, и цифра должна быть простым способом сделать это.
Что-то вроде...
irb(main):001:0> 1.id
(irb):1: warning: Object#id will be deprecated; use Object#object_id
=> 3
Ответы
Ответ 1
В Rails 3 вы можете использовать метод "deprecate" из ActiveSupport:
class Example
def foo
end
deprecate :foo
end
Он создаст псевдоним для вашего метода и выведет предупреждение со стеком. Вы также можете использовать части этой функции напрямую, например:
ActiveSupport::Deprecation.warn("Message")
Он выведет трассировку стека вместе с сообщением.
Ответ 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
В большинстве случаев вы можете просто поднять предупреждение и вызвать новый метод.
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
Есть библиотеки или метапрограммирование, если вам нужно или хотите стать более привлекательным, но в целом это не хороший путь, чтобы пойти на что-то такое простое. У вас должна быть довольно веская причина, чтобы представить зависимость для чего-то такого простого.
Ответ 4
Добавление моих 2 центов:
Если вы используете Yard вместо rdoc, ваш комментарий к доктору должен выглядеть следующим образом:
# @deprecated Please use {#useful} instead
Наконец, если вы придерживаетесь tomdoc, сделайте свой комментарий таким:
# Deprecated: Please use `useful` instead
Устаревший: указывает, что метод устарел и будет удален в будущей версии. Вы ДОЛЖНЫ использовать это для документирования методов, которые были общедоступными, но будут удалены в следующей крупной версии.