2015-06-12 4 views
1

Я пытаюсь добавить новый метод к драгоценности Тора. В частности, я хочу добавить метод в Thor :: Shell :: Basic. В моей драгоценный камень на основе Thor, в бункере/МояКоманда, у меня есть это:Как сделать Monkey-patch жемчужиной с иерархией?

require 'thor' 
require 'ext/thor/extension' 
Thor.include ThorExtensions::Thor::Shell::Basic 
MyCommand.start 

В Lib/вн/Thor/extension.rb, у меня есть:

module ThorExtensions 
    module Thor 
    module Shell 
     module Basic 
     def extension_method 

Когда я называю extension_method, я получите сообщение об ошибке, в котором говорится, что он не может прочитать атрибут Thor :: Shell :: Basic (дополнение). Когда я перехожу в Thor :: Shell :: Basic, я вижу, что мой метод указан как метод этого класса, но он, похоже, не имеет доступа к нему во время выполнения. Я делаю что-то неправильно?

ответ

1

Вы можете возобновить занятия в рубине:

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

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

module MyExtension 
    def extension_method 
    end 
end 

Thor::Shell::Basic.send :include, MyExtension 
+0

В последнем случае, я бы включить эту последнюю строку в файл bin/mycommand, который запускает точный запуск, или я бы включил его в тот же файл, что и модуль MyExtension, а затем потребовал, чтобы этот файл был в моем драгоценном камне? Я продолжаю пробовать разные методы включения моего кода, который отлично работает, когда я делаю это вручную, но он вообще не включается, когда я запускаю bin/mycommand или метод существует, но не могу получить доступ к приватным методам Тор :: Shell :: Basic. –

+0

Не имеет значения, где он так долго добавляется до 'MyCommand.start'. – sandelius

+0

@ DanR Это сработало для вас? – sandelius