我如何猴子修补Jekyll扩展或插件?

Sco*_*son 6 plugins jekyll jekyll-extensions

我想覆盖一个看起来像这样的gem方法(一个Jekyll扩展):

档案:lib/jekyll-amazon/amazon_tag.rb.

module Jekyll
  module Amazon
    class AmazonTag < Liquid::Tag
      def detail(item)
...
      end
    end
  end
end
Liquid::Template.register_tag('amazon', Jekyll::Amazon::AmazonTag)
Run Code Online (Sandbox Code Playgroud)

我在文件夹中的项目中放置了具有相同结构的代码.如果我将方法的名称更改为新名称,它可以工作,但我不能让它覆盖名称.我做错了什么?config/initializers/presentation.rb _plugins/presentation.rbdetaildetail

(注意:在jekyll-amazon gem的0.2.2版本中,该detail方法是私有的;我已在本地更改了此方法,因此该方法不再是私有的.)

Dav*_*uel 1

您可以使用alias_method

module Jekyll
  module Amazon
    class AmazonTag < Liquid::Tag

      alias_method :old_detail, :detail

      def detail(item)
        # do your stuff here
        # eventually pass your stuff to old method
        old_detail(item)
      end

    end
  end
end
Liquid::Template.register_tag('amazon', Jekyll::Amazon::AmazonTag)
Run Code Online (Sandbox Code Playgroud)