vagrant-devcommands 0.6.0 → 0.7.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +7 -1
- data/README.md +22 -12
- data/lib/vagrant/devcommands/command.rb +1 -1
- data/lib/vagrant/devcommands/command_def.rb +22 -9
- data/lib/vagrant/devcommands/internal.rb +6 -5
- data/lib/vagrant/devcommands/internal_command/help.rb +36 -36
- data/lib/vagrant/devcommands/internal_command/version.rb +0 -9
- data/lib/vagrant/devcommands/internal_spec.rb +20 -0
- data/lib/vagrant/devcommands/messages.rb +33 -0
- data/lib/vagrant/devcommands/util.rb +21 -0
- data/lib/vagrant/devcommands/version.rb +1 -1
- data/lib/vagrant/devcommands.rb +7 -0
- data/locales/en.yml +12 -0
- metadata +10 -12
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9c92cad09fd102f04af3040e3652d21942787743
|
4
|
+
data.tar.gz: 6f76ac6ff0b4c852b5fa3a9e7419d22a42529c42
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: dc5cdabc09ff186bfceb197b3a47bb0100222771e979bf3bf6f596c1685cf7c2216997c294fff863aae382262aa1cc7ca4215bfda35bd5a2ae1b096d9a9be462
|
7
|
+
data.tar.gz: 810924b466b73987ced9be2d413788eebd42b0fbc859d140f0df4e66dd61fcc2621e31ad209ca4a9fc67fe7d2913e27757402aab72d2c5880902167fd5154af8
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,11 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## v0.7.0 (2016-09-26)
|
4
|
+
|
5
|
+
- Enhancements
|
6
|
+
- Parameters are allowed to have a detailed description
|
7
|
+
- Parameters values can be escaped before interpolation
|
8
|
+
|
3
9
|
## v0.6.0 (2016-05-05)
|
4
10
|
|
5
11
|
- Enhancements
|
@@ -16,7 +22,7 @@
|
|
16
22
|
- Warnings about using internal command names or missing scripts are now
|
17
23
|
printed using the configured ui class (allows colored output)
|
18
24
|
|
19
|
-
## v0.5.0 (
|
25
|
+
## v0.5.0 (2016-03-21)
|
20
26
|
|
21
27
|
- Enhancements
|
22
28
|
- Commands can define a detailed help message
|
data/README.md
CHANGED
@@ -54,39 +54,49 @@ sprintf syntax:
|
|
54
54
|
```ruby
|
55
55
|
command 'with_param',
|
56
56
|
parameters: {
|
57
|
-
# mandatory parameter
|
58
|
-
|
57
|
+
# mandatory parameter with a description
|
58
|
+
p_mandatory: { desc: "mandatory parameter to do... stuff!" },
|
59
|
+
|
59
60
|
# parameter with default (implies optional)
|
60
|
-
|
61
|
+
p_default: { default: "always" },
|
62
|
+
|
63
|
+
# parameter with escaping rule
|
64
|
+
p_escaped: { escape: { '*' => '\\' }},
|
65
|
+
|
61
66
|
# optional parameter
|
62
|
-
|
67
|
+
p_optional: { optional: true },
|
68
|
+
|
63
69
|
# wrapped option value
|
64
|
-
|
70
|
+
p_wrapped: { wrap: "--and %s wrapped" }
|
65
71
|
},
|
66
|
-
script: 'echo %{
|
72
|
+
script: 'echo %{p_mandatory} %{p_default} %{p_escaped} %{p_optional} %{p_wrapped}'
|
67
73
|
```
|
68
74
|
|
69
75
|
This allows you to execute the following command:
|
70
76
|
|
71
77
|
```shell
|
72
78
|
# will execute 'echo works always'
|
73
|
-
vagrant run with_param --
|
79
|
+
vagrant run with_param --p_mandatory works
|
74
80
|
|
75
81
|
# will execute 'echo works always like a charm'
|
76
|
-
vagrant run with_param --
|
82
|
+
vagrant run with_param --p_mandatory works --p_optional "like a charm"
|
77
83
|
|
78
84
|
# will execute 'echo works sometimes like a charm --and is wrapped'
|
79
85
|
vagrant run with_param \
|
80
|
-
--
|
81
|
-
--
|
82
|
-
--
|
83
|
-
--
|
86
|
+
--p_mandatory works \
|
87
|
+
--p_default sometimes \
|
88
|
+
--p_optional "like a charm" \
|
89
|
+
--p_wrapped is
|
84
90
|
```
|
85
91
|
|
86
92
|
For now a command expecting one or more parameters will fail if the user does
|
87
93
|
not provide them. Any arguments exceeding the number used are silently
|
88
94
|
discarded.
|
89
95
|
|
96
|
+
Escaping rules are defined as `{ "char_to_escape": "char_to_use_as_escape" }`.
|
97
|
+
These are applied prior to interpolation into the command. Regular ruby escaping
|
98
|
+
rules apply.
|
99
|
+
|
90
100
|
#### Commands defined by Lambda/Proc
|
91
101
|
|
92
102
|
You can (more or less) dynamically generate your scripts by defining the
|
@@ -36,18 +36,17 @@ module VagrantPlugins
|
|
36
36
|
|
37
37
|
private
|
38
38
|
|
39
|
-
def
|
40
|
-
|
39
|
+
def escape_option_values(options)
|
40
|
+
@parameters.each do |key, conf|
|
41
|
+
next if conf[:escape].nil?
|
41
42
|
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
options[key] = o
|
46
|
-
end
|
43
|
+
conf[:escape].each do |char, with|
|
44
|
+
char = char.to_s unless char.is_a?(String)
|
45
|
+
options[key] = options[key].sub(char, "#{with}#{char}")
|
47
46
|
end
|
48
|
-
end
|
47
|
+
end
|
49
48
|
|
50
|
-
|
49
|
+
options
|
51
50
|
end
|
52
51
|
|
53
52
|
def options_with_defaults
|
@@ -61,6 +60,20 @@ module VagrantPlugins
|
|
61
60
|
options
|
62
61
|
end
|
63
62
|
|
63
|
+
def parse_argv(argv)
|
64
|
+
options = options_with_defaults
|
65
|
+
|
66
|
+
OptionParser.new do |opts|
|
67
|
+
@parameters.each do |key, _conf|
|
68
|
+
opts.on("--#{key} OPTION", "Parameter: #{key}") do |o|
|
69
|
+
options[key] = o
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end.parse!(argv)
|
73
|
+
|
74
|
+
wrap_option_values(escape_option_values(options))
|
75
|
+
end
|
76
|
+
|
64
77
|
def wrap_option_values(options)
|
65
78
|
@parameters.each do |key, conf|
|
66
79
|
next if conf[:wrap].nil?
|
@@ -2,17 +2,18 @@ module VagrantPlugins
|
|
2
2
|
module DevCommands
|
3
3
|
# Handles internal commands and their execution.
|
4
4
|
class Internal
|
5
|
-
|
5
|
+
NAMESPACE_CMD = VagrantPlugins::DevCommands::InternalCommand
|
6
|
+
NAMESPACE_SPEC = VagrantPlugins::DevCommands::InternalSpec
|
6
7
|
|
7
8
|
COMMANDS = {
|
8
|
-
'help' => CommandDef.new(
|
9
|
-
'version' => CommandDef.new(
|
9
|
+
'help' => CommandDef.new(NAMESPACE_SPEC::HELP),
|
10
|
+
'version' => CommandDef.new(NAMESPACE_SPEC::VERSION)
|
10
11
|
}.freeze
|
11
12
|
|
12
13
|
def initialize(env, registry)
|
13
14
|
@internal = {
|
14
|
-
'help' =>
|
15
|
-
'version' =>
|
15
|
+
'help' => NAMESPACE_CMD::Help.new(env, registry),
|
16
|
+
'version' => NAMESPACE_CMD::Version.new(env)
|
16
17
|
}
|
17
18
|
@registry = registry
|
18
19
|
end
|
@@ -3,15 +3,8 @@ module VagrantPlugins
|
|
3
3
|
module InternalCommand
|
4
4
|
# Internal "help" command
|
5
5
|
class Help
|
6
|
-
|
7
|
-
|
8
|
-
name: 'help',
|
9
|
-
usage: 'vagrant run %{command} [command]',
|
10
|
-
help: <<-eoh
|
11
|
-
Display the help of the command given as the first argument if defined.
|
12
|
-
Just like this help for the help command!
|
13
|
-
eoh
|
14
|
-
}.freeze
|
6
|
+
UTIL = VagrantPlugins::DevCommands::Util
|
7
|
+
MESSAGES = VagrantPlugins::DevCommands::Messages
|
15
8
|
|
16
9
|
def initialize(env, registry)
|
17
10
|
@env = env
|
@@ -19,7 +12,7 @@ eoh
|
|
19
12
|
end
|
20
13
|
|
21
14
|
def execute(argv)
|
22
|
-
return
|
15
|
+
return message(:no_commands) if @registry.commands.empty?
|
23
16
|
|
24
17
|
command = argv[0]
|
25
18
|
|
@@ -33,13 +26,17 @@ eoh
|
|
33
26
|
|
34
27
|
def command_help(command)
|
35
28
|
command_help_header(command)
|
29
|
+
command_help_parameters(command)
|
30
|
+
command_help_body(@registry.commands[command].help)
|
31
|
+
end
|
36
32
|
|
33
|
+
def command_help_body(help)
|
37
34
|
@env.ui.info ''
|
38
35
|
|
39
|
-
if
|
40
|
-
|
36
|
+
if help.nil?
|
37
|
+
message(:no_help)
|
41
38
|
else
|
42
|
-
@env.ui.info
|
39
|
+
@env.ui.info help.strip
|
43
40
|
end
|
44
41
|
end
|
45
42
|
|
@@ -54,12 +51,22 @@ eoh
|
|
54
51
|
@env.ui.info "Usage: #{usage}"
|
55
52
|
end
|
56
53
|
|
57
|
-
def
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
54
|
+
def command_help_parameters(command)
|
55
|
+
return if @registry.commands[command].parameters.nil?
|
56
|
+
|
57
|
+
@env.ui.info ''
|
58
|
+
@env.ui.info 'Parameters:'
|
59
|
+
|
60
|
+
command_help_parameters_body(command)
|
61
|
+
end
|
62
|
+
|
63
|
+
def command_help_parameters_body(command)
|
64
|
+
params = @registry.commands[command].parameters
|
65
|
+
pad_to = UTIL.pad_to(params)
|
66
|
+
|
67
|
+
params.sort.each do |name, options|
|
68
|
+
@env.ui.info UTIL.padded_columns(pad_to, name, options[:desc])
|
69
|
+
end
|
63
70
|
end
|
64
71
|
|
65
72
|
def internal_commands
|
@@ -70,7 +77,7 @@ eoh
|
|
70
77
|
internal_help_header(command)
|
71
78
|
|
72
79
|
@env.ui.info ''
|
73
|
-
@env.ui.info internal_commands[command].help
|
80
|
+
@env.ui.info internal_commands[command].help.strip
|
74
81
|
end
|
75
82
|
|
76
83
|
def internal_help_header(command)
|
@@ -80,13 +87,19 @@ eoh
|
|
80
87
|
@env.ui.info "Usage: #{usage}"
|
81
88
|
end
|
82
89
|
|
90
|
+
def message(msg)
|
91
|
+
MESSAGES.public_send(msg, &@env.ui.method(:info))
|
92
|
+
end
|
93
|
+
|
83
94
|
def plugin_help(command)
|
84
|
-
|
95
|
+
message(:plugin_usage) unless '--commands' == command
|
85
96
|
|
86
|
-
pad_to =
|
97
|
+
pad_to = UTIL.pad_to(internal_commands.merge(@registry.commands))
|
87
98
|
|
88
99
|
plugin_help_commands('Available', @registry.commands, pad_to)
|
89
100
|
plugin_help_commands('Internal', internal_commands, pad_to)
|
101
|
+
|
102
|
+
message(:plugin_usage_info) unless '--commands' == command
|
90
103
|
end
|
91
104
|
|
92
105
|
def plugin_help_commands(type, commands, pad_to)
|
@@ -94,23 +107,10 @@ eoh
|
|
94
107
|
@env.ui.info "#{type} commands:"
|
95
108
|
|
96
109
|
commands.sort.each do |name, command|
|
97
|
-
|
98
|
-
@env.ui.info " #{name}"
|
99
|
-
else
|
100
|
-
@env.ui.info " #{name.ljust(pad_to)} #{command.desc}"
|
101
|
-
end
|
110
|
+
@env.ui.info UTIL.padded_columns(pad_to, name, command.desc)
|
102
111
|
end
|
103
112
|
end
|
104
113
|
|
105
|
-
def plugin_help_empty
|
106
|
-
@env.ui.info 'No commands defined!'
|
107
|
-
end
|
108
|
-
|
109
|
-
def plugin_help_usage
|
110
|
-
@env.ui.info 'Usage: vagrant run [box] <command>'
|
111
|
-
@env.ui.info 'Help: vagrant run help <command>'
|
112
|
-
end
|
113
|
-
|
114
114
|
def usage_params(usage, command)
|
115
115
|
return usage if command.parameters.nil?
|
116
116
|
|
@@ -3,15 +3,6 @@ module VagrantPlugins
|
|
3
3
|
module InternalCommand
|
4
4
|
# Internal "version" command
|
5
5
|
class Version
|
6
|
-
SPEC = {
|
7
|
-
desc: 'display currently used the plugin version',
|
8
|
-
name: 'version',
|
9
|
-
usage: 'vagrant run %{command}',
|
10
|
-
help: <<-eoh
|
11
|
-
Displays the currently installed version the plugin you are using right now.
|
12
|
-
eoh
|
13
|
-
}.freeze
|
14
|
-
|
15
6
|
def initialize(env)
|
16
7
|
@env = env
|
17
8
|
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module VagrantPlugins
|
2
|
+
module DevCommands
|
3
|
+
# Contains the specs for internal commands
|
4
|
+
class InternalSpec
|
5
|
+
HELP = {
|
6
|
+
desc: I18n.t('vagrant_devcommands.internal.help.desc'),
|
7
|
+
name: 'help',
|
8
|
+
usage: 'vagrant run %{command} [command]',
|
9
|
+
help: I18n.t('vagrant_devcommands.internal.help.help')
|
10
|
+
}.freeze
|
11
|
+
|
12
|
+
VERSION = {
|
13
|
+
desc: I18n.t('vagrant_devcommands.internal.version.desc'),
|
14
|
+
name: 'version',
|
15
|
+
usage: 'vagrant run %{command}',
|
16
|
+
help: I18n.t('vagrant_devcommands.internal.version.help')
|
17
|
+
}.freeze
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'optparse'
|
2
|
+
|
3
|
+
module VagrantPlugins
|
4
|
+
module DevCommands
|
5
|
+
# Provides access to messages used by the plugin
|
6
|
+
class Messages
|
7
|
+
def self.no_help(&out)
|
8
|
+
out.call 'No detailed help for this command available.'
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.no_commands(&out)
|
12
|
+
out.call 'No commands defined!'
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.plugin_usage(&out)
|
16
|
+
out.call 'Usage: vagrant run [box] <command>'
|
17
|
+
out.call 'Help: vagrant run help <command>'
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.plugin_usage_info(&out)
|
21
|
+
curdir = File.expand_path(File.dirname(__FILE__))
|
22
|
+
readme = File.expand_path(File.join(curdir, '../../../README.md'))
|
23
|
+
|
24
|
+
out.call ''
|
25
|
+
out.call 'For detailed usage please read the'
|
26
|
+
out.call 'README.md at the original source location:'
|
27
|
+
out.call '>>> https://github.com/mneudert/vagrant-devcommands'
|
28
|
+
out.call 'A copy of this file should be locally available at'
|
29
|
+
out.call ">>> #{readme}"
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module VagrantPlugins
|
2
|
+
module DevCommands
|
3
|
+
# Utility module
|
4
|
+
class Util
|
5
|
+
def self.pad_to(items)
|
6
|
+
items.keys.map(&:length).max
|
7
|
+
end
|
8
|
+
|
9
|
+
def self.padded_columns(pad_to, left, right)
|
10
|
+
left = left.to_s unless left.is_a?(String)
|
11
|
+
right = right.to_s unless right.is_a?(String)
|
12
|
+
|
13
|
+
if right.nil?
|
14
|
+
" #{left}"
|
15
|
+
else
|
16
|
+
" #{left.ljust(pad_to)} #{right}"
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
data/lib/vagrant/devcommands.rb
CHANGED
@@ -1,5 +1,12 @@
|
|
1
1
|
require 'vagrant'
|
2
2
|
|
3
|
+
I18n.load_path << File.expand_path('../../../locales/en.yml', __FILE__)
|
4
|
+
I18n.reload!
|
5
|
+
|
6
|
+
require 'vagrant/devcommands/internal_spec'
|
7
|
+
require 'vagrant/devcommands/messages'
|
8
|
+
require 'vagrant/devcommands/util'
|
9
|
+
|
3
10
|
require 'vagrant/devcommands/internal_command/help'
|
4
11
|
require 'vagrant/devcommands/internal_command/version'
|
5
12
|
|
data/locales/en.yml
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
en:
|
2
|
+
vagrant_devcommands:
|
3
|
+
internal:
|
4
|
+
help:
|
5
|
+
desc: "display this help message"
|
6
|
+
help: |-
|
7
|
+
Display the help of the command given as the first argument if defined.
|
8
|
+
Just like this help for the help command!
|
9
|
+
|
10
|
+
version:
|
11
|
+
desc: "display currently used the plugin version"
|
12
|
+
help: "Displays the currently installed version the plugin you are using right now."
|
metadata
CHANGED
@@ -1,35 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vagrant-devcommands
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Marc Neudert
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-09-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - '='
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 1.5
|
20
|
-
- - "<="
|
21
|
-
- !ruby/object:Gem::Version
|
22
|
-
version: 1.10.6
|
19
|
+
version: 1.12.5
|
23
20
|
type: :development
|
24
21
|
prerelease: false
|
25
22
|
version_requirements: !ruby/object:Gem::Requirement
|
26
23
|
requirements:
|
27
|
-
- -
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
version: 1.5.2
|
30
|
-
- - "<="
|
24
|
+
- - '='
|
31
25
|
- !ruby/object:Gem::Version
|
32
|
-
version: 1.
|
26
|
+
version: 1.12.5
|
33
27
|
- !ruby/object:Gem::Dependency
|
34
28
|
name: coveralls
|
35
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -104,9 +98,13 @@ files:
|
|
104
98
|
- lib/vagrant/devcommands/internal.rb
|
105
99
|
- lib/vagrant/devcommands/internal_command/help.rb
|
106
100
|
- lib/vagrant/devcommands/internal_command/version.rb
|
101
|
+
- lib/vagrant/devcommands/internal_spec.rb
|
102
|
+
- lib/vagrant/devcommands/messages.rb
|
107
103
|
- lib/vagrant/devcommands/plugin.rb
|
108
104
|
- lib/vagrant/devcommands/registry.rb
|
105
|
+
- lib/vagrant/devcommands/util.rb
|
109
106
|
- lib/vagrant/devcommands/version.rb
|
107
|
+
- locales/en.yml
|
110
108
|
homepage: https://github.com/mneudert/vagrant-devcommands
|
111
109
|
licenses:
|
112
110
|
- MIT
|