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