Allow the definition of communicators in plugins
This commit is contained in:
parent
595e7cee0e
commit
5ae3e0e80c
|
@ -109,6 +109,7 @@ module Vagrant
|
|||
def communicate
|
||||
# For now, we always return SSH. In the future, we'll abstract
|
||||
# this and allow plugins to define new methods of communication.
|
||||
|
||||
end
|
||||
|
||||
# This sets the unique ID associated with this machine. This will
|
||||
|
|
|
@ -103,6 +103,24 @@ module Vagrant
|
|||
data[:command]
|
||||
end
|
||||
|
||||
# Defines additional communicators to be available. Communicators
|
||||
# should be returned by a block passed to this method. This is done
|
||||
# to ensure that the class is lazy loaded, so if your class inherits
|
||||
# from or uses any Vagrant internals specific to Vagrant 1.0, then
|
||||
# the plugin can still be defined without breaking anything in future
|
||||
# versions of Vagrant.
|
||||
#
|
||||
# @param [String] name Communicator name.
|
||||
def self.communicator(name=UNSET_VALUE, &block)
|
||||
data[:communicator] ||= Registry.new
|
||||
|
||||
# Register a new communicator class only if a name was given.
|
||||
data[:communicator].register(name.to_sym, &block) if name != UNSET_VALUE
|
||||
|
||||
# Return the registry
|
||||
data[:communicator]
|
||||
end
|
||||
|
||||
# Defines additional configuration keys to be available in the
|
||||
# Vagrantfile. The configuration class should be returned by a
|
||||
# block passed to this method. This is done to ensure that the class
|
||||
|
|
|
@ -100,6 +100,34 @@ describe Vagrant::Plugin::V1::Plugin do
|
|||
end
|
||||
end
|
||||
|
||||
describe "communicators" do
|
||||
it "should register communicator classes" do
|
||||
plugin = Class.new(described_class) do
|
||||
communicator("foo") { "bar" }
|
||||
end
|
||||
|
||||
plugin.communicator[:foo].should == "bar"
|
||||
end
|
||||
|
||||
it "should lazily register communicator classes" do
|
||||
# Below would raise an error if the value of the class was
|
||||
# evaluated immediately. By asserting that this does not raise an
|
||||
# error, we verify that the value is actually lazily loaded
|
||||
plugin = nil
|
||||
expect {
|
||||
plugin = Class.new(described_class) do
|
||||
communicator("foo") { raise StandardError, "FAIL!" }
|
||||
end
|
||||
}.to_not raise_error
|
||||
|
||||
# Now verify when we actually get the configuration key that
|
||||
# a proper error is raised.
|
||||
expect {
|
||||
plugin.communicator[:foo]
|
||||
}.to raise_error(StandardError)
|
||||
end
|
||||
end
|
||||
|
||||
describe "configuration" do
|
||||
it "should register configuration classes" do
|
||||
plugin = Class.new(described_class) do
|
||||
|
|
Loading…
Reference in New Issue