如何创建不使用i18n的自定义VagrantError类?

时间:2014-11-01 07:53:51

标签: vagrant

我想创建一个不使用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

问题:如何创建不使用i18n作为错误消息的自定义VagrantError类?

1 个答案:

答案 0 :(得分: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,它向我展示了如何解决问题。