Как мне обезьяна-заплатить драгоценный камень с иерархией?

Я пытаюсь добавить новый метод к жемчужине Тора. В частности, я хочу добавить метод в Thor::Shell::Basic. В моем драгоценном камне, основанном на tor, в 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 (в частности, padding). Когда я захожу в Thor::Shell::Basic, в pry, я вижу мой метод в списке как метод этого класса, но, похоже, он не может получить к нему доступ во время выполнения. Я делаю что-то неправильно?

1 ответ

Решение

Вы можете открыть классы в ruby:

class Thor::Shell::Basic
  def extension_method
  end
end

Или вы можете включить ваше расширение (я) как модуль (я предпочитаю это):

module MyExtension
  def extension_method
  end
end

Thor::Shell::Basic.send :include, MyExtension
Другие вопросы по тегам