2014-11-01 7 views
0

Я хотел бы создать пользовательский класс VagrantError, который не использует i18n для сообщения об ошибке.Как создать собственный класс VagrantError, который не использует i18n?

Vagrant API docs показать, как создать сообщение об ошибке клиента

class MyError < Vagrant::Errors::VagrantError 
    error_key "my_error" 
end 

Документы также состояние:

Если вы не хотите использовать I18N, вы можете переопределить метод #initialize и установите собственное сообщение об ошибке.

Я попытался следующие:

class MissingPluginError < Vagrant::Errors::VagrantError 
    def initialize 
    error_message = "Vagrant Triggers plugin is required. Install using:" 
    error_message += "'vagrant plugin install vagrant-triggers'" 
    end 
end 

Однако единственный выход производится, когда я raise MissingPluginError.new является:

MissingPluginError 

Вопрос: как я могу создать пользовательский класс VagrantError который не использует i18n для сообщения об ошибке?

ответ

1

Я нашел способ сделать это. Я также решил параметризировать сообщение об ошибке, так что имя плагина передается в:

class MissingPluginError < Vagrant::Errors::VagrantError 
    def initialize(plugin) 
    error_message = "#{plugin} plugin is required. Install using:\n" 
    error_message += "'vagrant plugin install #{plugin}'" 
    StandardError.instance_method(:initialize).bind(self).call(error_message) 
    end 
end 

И ошибка возникает так:

unless Vagrant.has_plugin?("vagrant-triggers") 
    raise MissingPluginError.new 'vagrant-triggers' 
end 

Вот некоторые source code, что я обнаружил, что показал мне, насколько решить проблему.

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