如何猴子修补 Jekyll 扩展或插件?
How do I monkey-patch a Jekyll extension or plugin?
我想覆盖如下所示的 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)
我已将我项目中具有相同结构的代码放在文件夹 config/initializers/presentation.rb
_plugins/presentation.rb
中。如果我将方法 detail
的名称更改为新名称,它会起作用,但我无法让它覆盖名称 detail
。
我做错了什么?
(注意:在 jekyll-amazon gem 的 0.2.2 版本中,detail
方法是私有的;我已经在本地更改了它,因此该方法不再是私有的。)
您可以使用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)
我想覆盖如下所示的 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)
我已将我项目中具有相同结构的代码放在文件夹 config/initializers/presentation.rb
_plugins/presentation.rb
中。如果我将方法 detail
的名称更改为新名称,它会起作用,但我无法让它覆盖名称 detail
。
我做错了什么?
(注意:在 jekyll-amazon gem 的 0.2.2 版本中,detail
方法是私有的;我已经在本地更改了它,因此该方法不再是私有的。)
您可以使用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)