2013-11-23 2 views
0

Я в основном работаю в Rails, и я использую gem для преобразования данных в командной строке, «Mongify», и я сфокусирован на том, как расширить основные классы в приложении Ruby cli.Как расширить класс String в приложении командной строки?

Я хочу расширить класс String с помощью метода .is_date?, чтобы проверить, может ли строка быть преобразована в Date. У меня это работает в Rails Console,

Я добавил файл string.rb на номер lib/ext со следующим:

class String 
    def is_date? 
    begin 
     return true if Date.parse(self) 
     rescue 
     #do nothing 
    end 
    return false 
    end 
end 

Затем в консоли Rails я делаю require 'ext/string' и он будет работать. Но я не могу понять, как заставить его работать в приложении Mongify cli. Я скопировал string.rb в папку lib из драгоценного камня, и я попытался добавить require 'string' в несколько разных файлов в самоцвет, но я продолжаю получать ошибки undefined method.
Может кто-нибудь указать мне в правильном направлении?

+0

Вы можете использовать запрос в этом файле: https://github.com/anlek/mongify/blob/master/lib/mongify.rb, тогда вы можете приклеить где-нибудь в своем коде, чтобы проверить методы, доступные при запуске время – bjhaid

ответ

2

Как насчет требуют от lib/mongify.rb так:

require 'string/extensions.rb' 

А затем поместить свой код в lib/string/extensions.rb

Дайте нам знать точные undefined method ошибки вы получаете в случае, если это не решение.

+0

Ok Ivan, все это и вот ошибка, которую он возвращает; (eval): 80: in 'block (2 levels) in parse ': undefined method' is_date?' for "": String (NoMethodError) – SteveO7

+0

Извините, вам нужно будет предоставить полный код, чтобы узнать, почему ваше расширение не загружается. Если вы можете это сделать, я с удовольствием посмотрю. – Ivan

+0

Спасибо, Иван, оказалось, что я менял код в неправильном gemset, duh ... Ваше предложение отлично работало, как только я сделал это в коде, который исполнялся! – SteveO7

1

Чтобы помочь вам с отладочным упражнением, которое даст вам ответ, который вам нужен. Начните с установки точки останова прямо перед местом вызова функции.

В отладчике загрузите требуемый документ и затем пройдите мимо точки останова до следующей после вызова.

После того, как вы это сделаете, начните ранее в трассировке стека - в файл, загруженный до этого. Продолжайте движение назад, пока вы не достигнете достаточно ранней части процесса загрузки драгоценного камня, и сделайте это местом, где вы загружаете свой код.

Смежные вопросы