如何使用层次结构猴子修补 gem?
How do I Monkey-patch a gem with a hierarchy?
我正在尝试为雷神添加一种新方法 gem。具体来说,我想在 Thor::Shell::Basic 中添加一个方法。在我基于雷神的 gem 中,在 bin/mycommand 中,我有这个:
require 'thor'
require 'ext/thor/extension'
Thor.include ThorExtensions::Thor::Shell::Basic
MyCommand.start
在 lib/ext/thor/extension.rb 中,我有:
module ThorExtensions
module Thor
module Shell
module Basic
def extension_method
当我调用 extension_method 时,我收到一条错误消息,指出它无法读取 Thor::Shell::Basic 的属性(特别是填充)。当我进入 Thor::Shell::Basic 时,在 pry 中,我看到我的方法被列为 class 的方法,但它似乎无法在运行时访问它。我做错了什么吗?
您可以在 ruby 中重新打开 类:
class Thor::Shell::Basic
def extension_method
end
end
或者您可以将您的扩展作为一个模块包含在内(我更喜欢这个):
module MyExtension
def extension_method
end
end
Thor::Shell::Basic.send :include, MyExtension
我正在尝试为雷神添加一种新方法 gem。具体来说,我想在 Thor::Shell::Basic 中添加一个方法。在我基于雷神的 gem 中,在 bin/mycommand 中,我有这个:
require 'thor'
require 'ext/thor/extension'
Thor.include ThorExtensions::Thor::Shell::Basic
MyCommand.start
在 lib/ext/thor/extension.rb 中,我有:
module ThorExtensions
module Thor
module Shell
module Basic
def extension_method
当我调用 extension_method 时,我收到一条错误消息,指出它无法读取 Thor::Shell::Basic 的属性(特别是填充)。当我进入 Thor::Shell::Basic 时,在 pry 中,我看到我的方法被列为 class 的方法,但它似乎无法在运行时访问它。我做错了什么吗?
您可以在 ruby 中重新打开 类:
class Thor::Shell::Basic
def extension_method
end
end
或者您可以将您的扩展作为一个模块包含在内(我更喜欢这个):
module MyExtension
def extension_method
end
end
Thor::Shell::Basic.send :include, MyExtension