ПРЕДУПРЕЖДЕНИЕ ОТКЛОНЕНИЯ не отображается для модуля в рельсах 5.2, но работает с классом - PullRequest
0 голосов
/ 28 июня 2018

Пока я отвечал на этот этот вопрос найден

Rails 4.1.8 Ruby 2.2.0p0

module Fred
  extend self
  def aaa; end
  def bbb; end
  def ccc; end
  def ddd; end
  def eee; end
end

module Bar
  extend self
  def ccc; end
end

ActiveSupport::Deprecation.deprecate_methods(
  Fred, :aaa, bbb: :zzz, ccc: 'use Bar#ccc instead'
)

Fred.aaa

DEPRECATION WARNING: aaa is deprecated and will be removed
  from Rails 4.2. (called from \__pry__ at (pry):15)
#=> nil

Тот же код, что и в рельсах 5.2.0, но без предупреждения об устаревании.

Итак, чего мне здесь не хватает, DEPRECATION WARNING имеет новое обновление с rails 5.2.0 и не будет предупреждать модуль?

1 Ответ

0 голосов
/ 28 июня 2018

К вашему сведению: Rails является открытым исходным кодом, код доступен здесь: https://github.com/rails/rails


Rails5 использует Module#prepend.

Rails4 использует alias_method_chain.

Очевидно, что Module#prepend не будет работать с функциями модуля. Вы можете сделать что-то вроде:

ActiveSupport::Deprecation.deprecate_methods(
  Fred.singleton_class, :aaa
)

Я не тестировал код, но он должен работать. Также я бы посчитал это ошибкой в ​​Rails5.

...