如何使用层次结构猴子修补 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