`vagrant --version` outputs the version
This commit is contained in:
parent
b4d1ee6e83
commit
95592eb7f6
|
@ -20,8 +20,8 @@ module Vagrant
|
||||||
|
|
||||||
# Execute a subcommand with the given name and args. This method properly
|
# Execute a subcommand with the given name and args. This method properly
|
||||||
# finds the subcommand, instantiates it, and executes.
|
# finds the subcommand, instantiates it, and executes.
|
||||||
def subcommand(name, *args)
|
def subcommand(*args)
|
||||||
Commands::Base.dispatch(env, name, *args)
|
Commands::Base.dispatch(env, *args)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
|
@ -3,7 +3,10 @@ require 'optparse'
|
||||||
module Vagrant
|
module Vagrant
|
||||||
class Commands
|
class Commands
|
||||||
# This is the base command class which all sub-commands must
|
# This is the base command class which all sub-commands must
|
||||||
# inherit from.
|
# inherit from. Subclasses of bases are expected to implement two
|
||||||
|
# methods: {#execute} and {#options_spec} (optional). The former
|
||||||
|
# defines the actual behavior of the command while the latter is a spec
|
||||||
|
# outlining the options that the command may take.
|
||||||
class Base
|
class Base
|
||||||
include Util
|
include Util
|
||||||
|
|
||||||
|
@ -79,15 +82,36 @@ module Vagrant
|
||||||
# executed. The `args` parameter is an array of parameters to the
|
# executed. The `args` parameter is an array of parameters to the
|
||||||
# command (similar to ARGV)
|
# command (similar to ARGV)
|
||||||
def execute(args)
|
def execute(args)
|
||||||
# Just print out the help, since this top-level command does nothing
|
parse_options(args)
|
||||||
# on its own
|
|
||||||
self.class.puts_help
|
if options[:version]
|
||||||
|
puts_version
|
||||||
|
else
|
||||||
|
# Just print out the help, since this top-level command does nothing
|
||||||
|
# on its own
|
||||||
|
self.class.puts_help
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
# This method is called by the base class to get the `optparse` configuration
|
# This method is called by the base class to get the `optparse` configuration
|
||||||
# for the command.
|
# for the command.
|
||||||
def options_spec(opts)
|
def options_spec(opts)
|
||||||
opts.banner = "Usage: vagrant SUBCOMMAND"
|
opts.banner = "Usage: vagrant SUBCOMMAND"
|
||||||
|
|
||||||
|
opts.on("--version", "Output running Vagrant version.") do |v|
|
||||||
|
options[:version] = v
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
#-------------------------------------------------------------------
|
||||||
|
# Methods below are not meant to be overriden/implemented by subclasses
|
||||||
|
#-------------------------------------------------------------------
|
||||||
|
|
||||||
|
# Shows the version
|
||||||
|
def puts_version
|
||||||
|
File.open(File.join(PROJECT_ROOT, "VERSION"), "r") do |f|
|
||||||
|
puts f.read
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
# Returns the `OptionParser` instance to be used with this subcommand,
|
# Returns the `OptionParser` instance to be used with this subcommand,
|
||||||
|
|
|
@ -65,7 +65,14 @@ class CommandsBaseTest < Test::Unit::TestCase
|
||||||
end
|
end
|
||||||
|
|
||||||
context "executing" do
|
context "executing" do
|
||||||
should "just print the help" do
|
should "show version if flag is set" do
|
||||||
|
@instance.expects(:puts_version).once
|
||||||
|
@instance.expects(:puts_help).never
|
||||||
|
@instance.execute(["--version"])
|
||||||
|
end
|
||||||
|
|
||||||
|
should "just print the help by default" do
|
||||||
|
@instance.expects(:puts_version).never
|
||||||
@klass.expects(:puts_help)
|
@klass.expects(:puts_help)
|
||||||
@instance.execute([])
|
@instance.execute([])
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue