core: refactor error initialization logic

/cc @tmatilai - This includes a test case for the symbol stuff, should
be okay now.
This commit is contained in:
Mitchell Hashimoto 2014-01-08 19:53:04 -08:00
parent 481924c46d
commit 7631a38601
3 changed files with 15 additions and 6 deletions

View File

@ -59,11 +59,14 @@ module Vagrant
define_method(:error_namespace) { namespace }
end
def initialize(message=nil, *args)
def initialize(*args)
key = args.shift if args.first.is_a?(Symbol)
message = args.shift if args.first.is_a?(Hash)
message ||= {}
@extra_data = message.dup
message = { :_key => message } if message && !message.is_a?(Hash)
message = { :_key => error_key, :_namespace => error_namespace }.merge(message || {})
message[:_key] ||= error_key
message[:_namespace] ||= error_namespace
message[:_key] = key if key
if message[:_key]
message = translate_error(message)
@ -71,7 +74,7 @@ module Vagrant
message = error_message
end
super
super(message)
end
# The error message for this error. This is used if no error_key

View File

@ -708,7 +708,6 @@ en:
The synced folder type '%{type}' is reporting as unusable for
your current setup. Please verify you have all the proper
prerequisites for using this shared folder type and try again.
test_key: "test value"
ui_expects_tty: |-
Vagrant is attempting to interface with the UI in a way that requires
a TTY. Most actions in Vagrant that require a TTY have configuration
@ -816,6 +815,7 @@ en:
vm_not_running: |-
VM must be running to open SSH connection. Run `vagrant up`
to start the virtual machine.
test_key: "test value"
#-------------------------------------------------------------------------------
# Translations for config validation errors

View File

@ -43,5 +43,11 @@ describe Vagrant::Errors::VagrantError do
expect(subject.extra_data).to have_key(:data)
expect(subject.extra_data[:data]).to eql("yep")
end
it "should use a symbol initializer as a key" do
subject = klass.new(:test_key)
expect(subject.extra_data).to be_empty
expect(subject.to_s).to eql("test value")
end
end
end