Переопределить хелперы rails с доступом к оригиналу.

Я хочу использовать знакомые хелперы rails, но с немного измененной функциональностью. Как я это вижу, я хочу иметь возможность сделать что-то вроде:

module AwesomeHelper
  #... create alias of stylesheet_link_tag to old_stylesheet_link_tag
  def stylesheet_link_tag(*args)
    if @be_awesome
      awesome_stylesheet_link_tag *args
    else
      old_stylesheet_link_tag *args
    end
  end
end

Как я это вижу, у меня есть три варианта:

  1. Исправление Monkey: Повторное открытие вспомогательного модуля rails. Если команда rails когда-нибудь изменит название своего вспомогательного модуля, мой код станет источником хрупкости. Не непреодолимый, но не идеальный.
  2. Используйте разные имена методов:Попытка придерживаться интерфейса Common Rail может привести к краху. Мои изменения могут стать источником путаницы для других разработчиков.
  3. Методы отсоединения (новые): Не уверен, будет ли это работать или будут ли у него те же недостатки, что и в 1. Изучу это, но это может быть хорошая отправная точка.

Итак, вопрос здесь в том, застрял ли я на одном из этих неоптимальных решений, или есть другой способ, который я не рассматривал? Если я выберу вариант 3, есть ли способ сделать это без прямого обращения к вспомогательному модулю rails?

(Примечание: я удалил контекст, так как он ничего не добавляет к вопросу.)

22
задан user208769 8 May 2012 в 09:48
поделиться