2014-11-01 72 views
0

我想创建一个自定义的VagrantError类,它不会使用i18n作为错误消息。如何创建一个不使用i18n的自定义VagrantError类?

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,我发现,我怎么出解决问题。

相关问题