Пользовательские уведомления об устаревании Rails - PullRequest
24 голосов
/ 17 февраля 2010

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

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

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

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

Ответы [ 4 ]

42 голосов
/ 18 августа 2011

В Rails 3 вы можете использовать: метод «отменить» из ActiveSupport :

class Example
  def foo
  end

  deprecate :foo
end

Это создаст псевдоним для вашего метода и выведет предупреждение с трассировкой стека. Вы также можете использовать части этой функции напрямую, например:

ActiveSupport::Deprecation.warn("Message")

Выводит трассировку стека вместе с сообщением.

6 голосов
/ 17 февраля 2010

Может быть:

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 голосов
/ 17 февраля 2010

В большинстве случаев вы можете просто вызвать предупреждение и вызвать новый метод.

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

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

1 голос
/ 23 февраля 2017

Добавление моих 2 центов:

Если вы используете Двор вместо rdoc , ваш комментарий к документу должен выглядеть следующим образом:

# @deprecated Please use {#useful} instead

Наконец, если вы придерживаетесь tomdoc , сделайте так, чтобы ваш комментарий выглядел следующим образом:

# Deprecated: Please use `useful` instead

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

...