Подтвердить что ты не робот

Пользовательские уведомления об исключении Rails

Есть ли способ создать пользовательские уведомления об изнашивании для методов и/или ассоциаций в моем приложении, которые я планирую удалить и хочу зарегистрировать их использование? У меня есть отношения в одной из моих моделей, которые я не хочу использовать для продвижения вперед и планировать реорганизацию кода позднее. Я хотел бы создать уведомление в моем журнале разработки каждый раз, когда вызывается этот метод.

Я видел уведомления об исключении из Ruby/Rails при использовании определенных методов, и цифра должна быть простым способом сделать это.

Что-то вроде...

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

Ответ 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

Устаревший: указывает, что метод устарел и будет удален в будущей версии. Вы ДОЛЖНЫ использовать это для документирования методов, которые были общедоступными, но будут удалены в следующей крупной версии.