Как сделать Monkey Patch в Ruby on Rails? - PullRequest
6 голосов
/ 30 сентября 2010

Позволяет использовать пример из реального мира.

Я хочу обезьянить патч для метода WillPaginate :: LinkRenderer.to_html.

Пока я пробовал:

  1. Создан файл в папке: lib / monkeys / will_paginate_nohtml.rb
  2. Добавлен в config / сред.был мой код:

e

module Monkeys::WillPaginateNohtml
  def to_html
    debugger
    super
  end
end

WillPaginate::LinkRenderer.send(:include, Monkeys::WillPaginateNohtml)

Но каким-то образом отладчик не прошел.Похоже, исправление не удалось.

Любая помощь будет оценена, спасибо!

Ответы [ 4 ]

10 голосов
/ 30 сентября 2010

А как насчет этого :-) Решения @shingana, @kandadaboggu не будут работать, так как здесь нет «супер». Вы хотите назвать оригинальную версию, а не супер версию.

module WillPaginate
  class LinkRenderer
    alias_method :to_html_original, :to_html
    def to_html
      debugger
      to_html_original
    end
  end
end
5 голосов
/ 30 сентября 2010

Название вашего вопроса вводит в заблуждение. Честно говоря, я думаю, что вы, вероятно, просто хотите настроить структуру списка страниц will_paginate, что можно сделать по-другому.

Таким образом, в вашем случае правильный способ - расширить визуализацию. Например, загрузите следующее из инициализатора (через config / initializer):

class CustomPaginationRenderer < WillPaginate::LinkRenderer

  def to_html
    # Your custom code, debugger etc
  end

end

Затем, чтобы ваше приложение использовало этот рендерер, добавьте в файл config / environment.rb следующее:

WillPaginate::ViewHelpers.pagination_options[:renderer] = 'CustomPaginationRenderer'
0 голосов
/ 30 сентября 2010

Попробуйте это:

class WillPaginate::LinkRenderer
  def to_html
    debugger
    super
  end
end
0 голосов
/ 30 сентября 2010

Я думаю, вам нужно открыть метод

module WillPaginate
  class LinkRenderer
    def to_html
      debugger
      super
    end
  end
end
...