vagrant-devcommands 0.11.1 → 0.14.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (35) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +41 -41
  3. data/README.md +98 -84
  4. data/lib/vagrant/devcommands/command.rb +7 -13
  5. data/lib/vagrant/devcommands/commandfile/modeler.rb +3 -3
  6. data/lib/vagrant/devcommands/commandfile/reader.rb +10 -8
  7. data/lib/vagrant/devcommands/commandfile.rb +2 -0
  8. data/lib/vagrant/devcommands/help_printer/chain.rb +8 -6
  9. data/lib/vagrant/devcommands/help_printer/command.rb +8 -6
  10. data/lib/vagrant/devcommands/help_printer/command_alias.rb +8 -6
  11. data/lib/vagrant/devcommands/internal_command/completion_data.rb +2 -0
  12. data/lib/vagrant/devcommands/internal_command/help.rb +10 -8
  13. data/lib/vagrant/devcommands/internal_command/version.rb +2 -0
  14. data/lib/vagrant/devcommands/internal_spec.rb +12 -10
  15. data/lib/vagrant/devcommands/messages.rb +3 -6
  16. data/lib/vagrant/devcommands/model/chain.rb +3 -6
  17. data/lib/vagrant/devcommands/model/command.rb +14 -96
  18. data/lib/vagrant/devcommands/model/command_alias.rb +3 -9
  19. data/lib/vagrant/devcommands/param_parser.rb +131 -0
  20. data/lib/vagrant/devcommands/plugin.rb +2 -0
  21. data/lib/vagrant/devcommands/registry/messager.rb +14 -2
  22. data/lib/vagrant/devcommands/registry/resolver.rb +4 -8
  23. data/lib/vagrant/devcommands/registry/validator.rb +4 -2
  24. data/lib/vagrant/devcommands/registry.rb +70 -7
  25. data/lib/vagrant/devcommands/runner/chain.rb +2 -0
  26. data/lib/vagrant/devcommands/runner/command.rb +5 -3
  27. data/lib/vagrant/devcommands/runner/command_alias.rb +2 -0
  28. data/lib/vagrant/devcommands/runner/internal_command.rb +3 -1
  29. data/lib/vagrant/devcommands/synopsis.rb +3 -1
  30. data/lib/vagrant/devcommands/util/jaro_winkler.rb +5 -1
  31. data/lib/vagrant/devcommands/util.rb +4 -2
  32. data/lib/vagrant/devcommands/version.rb +3 -1
  33. data/lib/vagrant/devcommands.rb +4 -1
  34. data/locales/en.yml +2 -4
  35. metadata +19 -16
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: dd051c66c3c698629e9eeac65aab7f359e7ee230
4
- data.tar.gz: e607628cc652b04882a226f7b10def7b32152298
2
+ SHA256:
3
+ metadata.gz: c87a4a5395ff70331bc828e00f95e4f2bd17b75dbc57561a9a512b2fa94d5402
4
+ data.tar.gz: ba566aeb333eb32fab9389b979df2f54e2326e0b98cd1beff1e94b07a52a45dd
5
5
  SHA512:
6
- metadata.gz: 25c8ef756decf39dbce7050799b841e4c4e2aefb4091fd13e12ee221e593efd0434e05e6bfb70b54fc096d473907afe2045d4427960b1878f7f19f2b75fcc1bb
7
- data.tar.gz: 8cfa604c43f53e037666378517df766b54ba936b9c428ae89e90fa950d3f2729fc66827c2911ed56e9d494e32234587dc09e935d771afff33d01772b4cc74faa
6
+ metadata.gz: 18314207fb498117756f3b0b1023c72c75c5c157408895e9d92fcc56f980039f8601f2797ca7013d0c9386f98349566662d4615f5bb329960ac895e49a4814e6
7
+ data.tar.gz: 6d92ec349743a1658fb1160b45f87c57eaf6785dba47f0c7130f4bf7249d35f40ea67897a6fdbd0b0c1fedf79711bc4d655f95e7650ea8de3e24b859d1aeb451
data/CHANGELOG.md CHANGED
@@ -1,62 +1,68 @@
1
1
  # Changelog
2
2
 
3
+ ## v0.14.0 (2022-08-23)
4
+
5
+ - Enhancements
6
+ - Lambda/Proc values of command scripts are now executed in the instance of the command when running
7
+ - Lambda/Proc scripts get the parsed argv values as the first (and only) argument unless defined with a zero arity
8
+
9
+ - Bug fixes
10
+ - Parameters with a default value configured will now be properly displayed as optional in the detailed command help
11
+
12
+ ## v0.13.0 (2018-07-19)
13
+
14
+ - Enhancements
15
+ - Unknown parameters can be catched and used by setting the option `passthru: true` on one of your parameters ([#3](https://github.com/mneudert/vagrant-devcommands/issues/3))
16
+
17
+ ## v0.12.0 (2018-04-21)
18
+
19
+ - Enhancements
20
+ - Command parameters can define alias values to be replaced before escaping
21
+ - Commandfile entries with duplicate names will now issue a warning while still discarding all previous definitions
22
+ - Commandfile entries with unknown options will issue a warning
23
+
24
+ - Backwards incompatible changes
25
+ - Support for the already deprecated configuration parameter `:box` has been removed
26
+
3
27
  ## v0.11.1 (2017-10-04)
4
28
 
5
29
  - Bug fixes
6
- - The machine of a command alias definition is now correctly preferred over
7
- the machine of the command definition
30
+ - The machine of a command alias definition is now correctly preferred over the machine of the command definition
8
31
 
9
32
  ## v0.11.0 (2017-10-02)
10
33
 
11
34
  - Enhancements
12
- - Command aliases can be used to provide multiple ways to call a single
13
- command including automatically populated arguments
35
+ - Command aliases can be used to provide multiple ways to call a single command including automatically populated arguments
14
36
  - Commands can define if they need a tty by using the new `:tty` option
15
37
 
16
38
  - Backwards incompatible changes
17
- - By default a command does not use a tty. This potentially breaks commands
18
- requiring one, e.g. a mysql console command
39
+ - By default a command does not use a tty. This potentially breaks commands requiring one, e.g. a mysql console command
19
40
 
20
41
  ## v0.10.1 (2017-08-08)
21
42
 
22
43
  - Bug fixes
23
- - Vagrant introduced a tty flag for ssh command execution in version `1.9.6`.
24
- This broke some commands requiring an interactive terminal
25
- (like a mysql client). This flag is now permanently active to restore the
26
- function of these commands until the next regular release introduces a
27
- full per command tty configuration
44
+ - Vagrant introduced a tty flag for ssh command execution in version `1.9.6`. This broke some commands requiring an interactive terminal (like a mysql client). This flag is now permanently active to restore the function of these commands until the next regular release introduces a full per command tty configuration
28
45
 
29
46
  ## v0.10.0 (2017-07-02)
30
47
 
31
48
  - Enhancements
32
- - Command alternatives provided by the "did-you-mean" feature no longer
33
- display the full command list (help)
34
- - Depending on the internal scoring multiple alternative commands
35
- will be presented instead of a full command list (help)
36
- - Minimal data for shell completion is available via the internal
37
- `completion-data` command
49
+ - Command alternatives provided by the "did-you-mean" feature no longer display the full command list (help)
50
+ - Depending on the internal scoring multiple alternative commands will be presented instead of a full command list (help)
51
+ - Minimal data for shell completion is available via the internal `completion-data` command
38
52
  - Parameters can limit the values you are allowed to pass in
39
- - Spaces in chain/command names are now officially disallowed. Those
40
- would have always been broken anyways, but now there is a nice message
41
- and the commands are excluded from the various listings
53
+ - Spaces in chain/command names are now officially disallowed. Those would have always been broken anyways, but now there is a nice message and the commands are excluded from the various listings
42
54
 
43
55
  - Bug fixes
44
- - Chain names can no longer conflict with internal commands like `help`
45
- or `version`. The respective chain definitions are dropped and a warning
46
- is issued
56
+ - Chain names can no longer conflict with internal commands like `help` or `version`. The respective chain definitions are dropped and a warning is issued
47
57
 
48
58
  ## v0.9.0 (2017-05-20)
49
59
 
50
60
  - Enhancements
51
61
  - Every command in a chain can specify the machine to be used
52
- - If an unknown command is requested a possible alternative
53
- is suggested based on the calculated
54
- [Jaro-Winkler distance](https://en.wikipedia.org/wiki/Jaro%E2%80%93Winkler_distance)
62
+ - If an unknown command is requested a possible alternative is suggested based on the calculated [Jaro-Winkler distance](https://en.wikipedia.org/wiki/Jaro%E2%80%93Winkler_distance)
55
63
 
56
64
  - Deprecations
57
- - The configuration parameter `:box` has been renamed to `:machine` to
58
- match the vagrant naming. Support for the old configuration will be
59
- dropped in a future version
65
+ - The configuration parameter `:box` has been renamed to `:machine` to match the Vagrant naming. Support for the old configuration will be dropped in a future version
60
66
 
61
67
  ## v0.8.0 (2017-04-19)
62
68
 
@@ -67,14 +73,12 @@
67
73
  ## v0.7.2 (2017-03-12)
68
74
 
69
75
  - Bug fixes
70
- - Machine names passed via argv are properly detected and used
71
- ([#1](https://github.com/mneudert/vagrant-devcommands/pull/1))
76
+ - Machine names passed via argv are properly detected and used ([#1](https://github.com/mneudert/vagrant-devcommands/pull/1))
72
77
 
73
78
  ## v0.7.1 (2017-02-15)
74
79
 
75
80
  - Bug fixes
76
- - Wrapping of optional parameters should now properly be done only if
77
- at least an empty string is defined as a default value
81
+ - Wrapping of optional parameters should now properly be done only if at least an empty string is defined as a default value
78
82
 
79
83
  ## v0.7.0 (2016-09-26)
80
84
 
@@ -87,16 +91,12 @@
87
91
  - Enhancements
88
92
  - Command usage now displays the correct parameter syntax
89
93
  - Command usage always displays mandatory parameters before optional ones
90
- - Error output (e.g. "missing Commandfile") is now printed using
91
- the configured ui class (allows colored output)
92
- - Global commands can be defined using a file
93
- named `.vagrant.devcommands` located under `Dir.home()`
94
+ - Error output (e.g. "missing Commandfile") is now printed using the configured ui class (allows colored output)
95
+ - Global commands can be defined using a file named `.vagrant.devcommands` located under `Dir.home()`
94
96
  - Invalid parameters are displayed in the error message
95
97
  - Missing parameters are displayed in the error message
96
- - Parameter wrapping is only done if a value is passed
97
- or a default (at least empty string) is configured
98
- - Warnings about using internal command names or missing scripts are now
99
- printed using the configured ui class (allows colored output)
98
+ - Parameter wrapping is only done if a value is passed or a default (at least empty string) is configured
99
+ - Warnings about using internal command names or missing scripts are now printed using the configured ui class (allows colored output)
100
100
 
101
101
  ## v0.5.0 (2016-03-21)
102
102
 
data/README.md CHANGED
@@ -1,7 +1,6 @@
1
1
  # Vagrant DevCommands
2
2
 
3
- Runs vagrant commands from a Commandfile.
4
-
3
+ Runs Vagrant commands from a Commandfile.
5
4
 
6
5
  ## Usage
7
6
 
@@ -32,7 +31,7 @@ Add to a `Commandfile` besides your `Vagrantfile`:
32
31
  command 'basic', 'hostname'
33
32
 
34
33
  command 'with_options',
35
- machine: :my_machine,
34
+ machine: 'my_machine',
36
35
  desc: 'executes "hostname" on the machine "my_machine"',
37
36
  script: 'hostname',
38
37
  tty: true,
@@ -46,28 +45,24 @@ of the command name using either %{command} or %<command>s.
46
45
  eoh
47
46
  ```
48
47
 
49
- _Note_: If you are defining literal `%` (percent sign) in your commands you
50
- have to escape them using a second `%`. For example `date "+%%Y-%%m-%%d"`.
48
+ _Note_: If you are defining literal `%` (percent sign) in your commands you have to escape them using a second `%`. For example `date '+%%Y-%%m-%%d'`.
51
49
 
52
- _Note_: Spaces in command names are not supported. Definitions with spaces will
53
- be ignored.
50
+ _Note_: Spaces in command names are not supported. Definitions with spaces will be ignored.
54
51
 
55
- _Note_: Please be aware that setting a custom `usage` hides the original usage
56
- line from the help output.
52
+ _Note_: Please be aware that setting a custom `usage` hides the original usage line from the help output.
57
53
 
58
54
  #### Commands with Parameters
59
55
 
60
- Passing additional parameters to a command is (minimally) supported using an
61
- sprintf syntax:
56
+ Passing additional parameters to a command is (minimally) supported using an sprintf syntax:
62
57
 
63
58
  ```ruby
64
59
  command 'with_param',
65
60
  parameters: {
66
61
  # mandatory parameter with a description
67
- p_mandatory: { desc: "mandatory parameter to do... stuff!" },
62
+ p_mandatory: { desc: 'mandatory parameter to do... stuff!' },
68
63
 
69
64
  # parameter with default (implies optional)
70
- p_default: { default: "always" },
65
+ p_default: { default: 'always' },
71
66
 
72
67
  # parameter with escaping rule
73
68
  p_escaped: { escape: { '*' => '\\' }},
@@ -76,52 +71,64 @@ command 'with_param',
76
71
  p_optional: { optional: true },
77
72
 
78
73
  # wrapped option value
79
- p_wrapped: { wrap: "--and %s wrapped" }
74
+ p_wrapped: { wrap: '--and %s wrapped' },
75
+
76
+ # parameters with aliased values
77
+ # the aliases are resolved prior to escaping/wrapping/allowance!
78
+ # aliases are resolved in order of definition (multiple can apply)
79
+ p_aliased: { aliases: { 'foo' => 'bar' }},
80
80
 
81
81
  # parameters with a limited set of allowed values
82
82
  # the allowed values are checked prior to escaping/wrapping!
83
83
  # optional parameters are only validated if given!
84
- p_limited: { allowed: ['completely'] }
84
+ p_limited: { allowed: ['completely'] },
85
+
86
+ # you can define a specific parameter to receive
87
+ # all otherwise unknown parameters and flags
88
+ p_passthru: { optional: true, passthru: true }
85
89
  },
86
- script: 'echo %<p_mandatory>s %<p_default>s %<p_escaped>s %<p_optional>s %<p_wrapped>s %<p_limited>s'
90
+ script: %(
91
+ echo %<p_mandatory>s \
92
+ %<p_default>s \
93
+ %<p_escaped>s \
94
+ %<p_optional>s \
95
+ %<p_wrapped>s \
96
+ %<p_limited>s \
97
+ %<p_passthru>s
98
+ )
87
99
  ```
88
100
 
89
101
  This allows you to execute the following command:
90
102
 
91
103
  ```shell
92
- # will execute 'echo works always'
104
+ # will execute 'echo "works always"'
93
105
  vagrant run with_param --p_mandatory works
94
106
 
95
- # will execute 'echo works always like a charm'
96
- vagrant run with_param --p_mandatory works --p_optional "like a charm"
107
+ # will execute 'echo "works always like a charm"'
108
+ vagrant run with_param --p_mandatory works --p_optional 'like a charm'
97
109
 
98
- # will execute 'echo works sometimes like a charm --and is wrapped completely'
110
+ # will execute 'echo "works sometimes like a charm --and is wrapped completely"'
99
111
  vagrant run with_param \
100
112
  --p_mandatory works \
101
113
  --p_default sometimes \
102
- --p_optional "like a charm" \
103
- --p_wrapped is
114
+ --p_optional 'like a charm' \
115
+ --p_wrapped is \
104
116
  --p_limited completely
105
117
  ```
106
118
 
107
- For now a command expecting one or more parameters will fail if the user does
108
- not provide them. Any arguments exceeding the number used are silently
109
- discarded.
119
+ For now a command expecting one or more parameters will fail if the user does not provide them. Any arguments exceeding the number used are silently discarded.
110
120
 
111
- Escaping rules are defined as `{ "char_to_escape": "char_to_use_as_escape" }`.
112
- These are applied prior to interpolation into the command. Regular ruby escaping
113
- rules apply.
121
+ Escaping rules are defined as `{ 'char_to_escape' => 'char_to_use_as_escape' }`. These are applied prior to interpolation into the command. Regular ruby escaping rules apply.
114
122
 
115
123
  #### Commands with Flags
116
124
 
117
- Every command can be associated with (by definition optional) flags available
118
- for later command interpolation:
125
+ Every command can be associated with (by definition optional) flags available for later command interpolation:
119
126
 
120
127
  ```ruby
121
128
  command 'with_flags',
122
129
  flags: {
123
- f_standard: { desc: "standard flag" },
124
- f_valued: { value: "--f_modified" }
130
+ f_standard: { desc: 'standard flag' },
131
+ f_valued: { value: '--f_modified' }
125
132
  },
126
133
  script: 'echo "flags: %<f_standard>s"'
127
134
  ```
@@ -139,28 +146,46 @@ vagrant run with_flags --f_standard
139
146
  vagrant run with_flags --f_valued
140
147
  ```
141
148
 
142
- By default a flag gets interpolated as "--#{flagname}". If a value is defined
143
- this value will be interpolated unmodified.
149
+ By default a flag gets interpolated as `--#{flagname}`. If a value is defined this value will be interpolated unmodified.
144
150
 
145
151
  #### Commands defined by Lambda/Proc
146
152
 
147
- You can (more or less) dynamically generate your scripts by defining the
148
- command with a lambda or proc as its script.
153
+ You can (more or less) dynamically generate your scripts by defining the command with a lambda or proc as its script.
149
154
 
150
155
  ```ruby
151
156
  command 'from_lambda', script: lambda { 'echo "lambda works"' }
152
157
  command 'from_proc', script: proc { 'echo "proc works"' }
158
+
159
+ command 'from_lambda_params',
160
+ parameters: { argv_param: {} },
161
+ script: lambda { |params|
162
+ 'echo "lambda works: ' + params[:argv_param] + '"'
163
+ }
164
+
165
+ command 'from_proc_params',
166
+ parameters: { argv_param: {} },
167
+ script: proc { |params|
168
+ 'echo "proc works: ' + params[:argv_param] + '"'
169
+ }
153
170
  ```
154
171
 
155
- These will be evaluated when running the command.
172
+ These will be evaluated when running the command and optionally received the parsed shell arguments when defined with an arity of one.
173
+
174
+ Every rule from regular scripts (parameters, escaping `%`, ...) still apply.
175
+
176
+ #### Commands with a TTY ("interactive")
177
+
178
+ If you have a command that expects some sort of interaction with the user you may need to set the `tty` option for a command:
179
+
180
+ ```ruby
181
+ command 'interactive', tty: true
182
+ ```
156
183
 
157
- Every rule from regular scripts (parameters, escaping "%", ...) still apply.
184
+ This allows full interaction with programs like `irb` or `mysql`.
158
185
 
159
186
  ### Global Command Definitions
160
187
 
161
- To have commands available even wihout a `Commandfile` you can define the
162
- globally. To do this just create a file named `.vagrant.devcommands` in your
163
- `$HOME` directory.
188
+ To have commands available even wihout a `Commandfile` you can define the globally. To do this just create a file named `.vagrant.devcommands` in your `$HOME` directory.
164
189
 
165
190
  You can use this command to find the correct path if unsure:
166
191
 
@@ -191,20 +216,15 @@ eoh
191
216
 
192
217
  The configured commands will be executed in the order defined.
193
218
 
194
- If one or more of your commands requires parameters all of them have to be
195
- passed to the chain execution.
219
+ If one or more of your commands requires parameters all of them have to be passed to the chain execution.
196
220
 
197
- By default a chain breaks upon the first non-zero return value of any
198
- configured command. To deactivate this behaviour you can set `:break_on_error`
199
- to `false`. Any value other than `false` will stick to the default.
221
+ By default a chain breaks upon the first non-zero return value of any configured command. To deactivate this behaviour you can set `:break_on_error` to `false`. Any value other than `false` will stick to the default.
200
222
 
201
- _Note_: Spaces in command names are not supported. Definitions with spaces will
202
- be ignored.
223
+ _Note_: Spaces in command names are not supported. Definitions with spaces will be ignored.
203
224
 
204
225
  #### Chain Definitions with Pre-Defined Parameters
205
226
 
206
- If required you can modify the arguments given to each chain element by setting
207
- additional/custom argv values for a single chain element:
227
+ If required you can modify the arguments given to each chain element by setting additional/custom argv values for a single chain element:
208
228
 
209
229
  ```ruby
210
230
  command 'chainecho',
@@ -222,16 +242,14 @@ chain 'my_customized_chain',
222
242
  Running the chain will execute the following commands:
223
243
 
224
244
  ```shell
225
- > vagrant run my_customized_chain --first="initial" --second="initial"
245
+ > vagrant run my_customized_chain --first='initial' --second='initial'
226
246
 
227
- vagrant run chainecho --first="param" --second="initial"
228
- vagrant run chainecho --first="initial" --second="initial"
229
- vagrant run chainecho --first="param" --second="param"
247
+ vagrant run chainecho --first='param' --second='initial'
248
+ vagrant run chainecho --first='initial' --second='initial'
249
+ vagrant run chainecho --first='param' --second='param'
230
250
  ```
231
251
 
232
- By default every command will be executed using the machine defined by the
233
- command itself or the only one available. You can, however, run the complete
234
- chain against a specific machine using `vagrant run your_machine your_chain`.
252
+ By default every command will be executed using the machine defined by the command itself or the only one available. You can, however, run the complete chain against a specific machine using `vagrant run your_machine your_chain`.
235
253
 
236
254
  #### Chain Definitions with Specific Machines
237
255
 
@@ -259,13 +277,11 @@ vagrant run secondary chainhost
259
277
  vagrant run tertiary chainhost
260
278
  ```
261
279
 
262
- This configuration can itself be modified by passing a machine name to run
263
- all chain commands on using using `vagrant run your_machine your_chain`.
280
+ This configuration can itself be modified by passing a machine name to run all chain commands on using using `vagrant run your_machine your_chain`.
264
281
 
265
282
  ### Abort Parsing inside Commandfile
266
283
 
267
- If you, for whatever reasons, want to abort further parsing of a `Commandfile`
268
- you can simple return from it:
284
+ If you, for whatever reasons, want to abort further parsing of a `Commandfile` you can simple return from it:
269
285
 
270
286
  ```ruby
271
287
  command 'foo', script: 'foo'
@@ -280,16 +296,13 @@ return if v_cur < v_min
280
296
  command 'bar', script: 'bar'
281
297
  ```
282
298
 
283
- This example leads to the command `bar` not being available if the currently
284
- installed plugin has a version below `1.3.3.7`.
299
+ This example leads to the command `bar` not being available if the currently installed plugin has a version below `1.3.3.7`.
285
300
 
286
- Please be aware that returning from a global commandfile completely skips
287
- evaluating a local one.
301
+ Please be aware that returning from a global commandfile completely skips evaluating a local one.
288
302
 
289
- ### Experimental: Command Alias Definitions
303
+ ### Command Alias Definitions
290
304
 
291
- For commands you want to keep generic but often call with a specific set of
292
- parameter values you can define an alias:
305
+ For commands you want to keep generic but often call with a specific set of parameter values you can define an alias:
293
306
 
294
307
  ```ruby
295
308
  command 'customecho',
@@ -307,9 +320,7 @@ I get displayed when running "vagrant run help aliasecho".
307
320
  eoh
308
321
  ```
309
322
 
310
- The setting `command` is required, the other options `argv` and `machine` are
311
- optional and used for the actual customization. Any argument configured will
312
- take precedence over the value given to `vagrant run` itself.
323
+ The setting `command` is required, the other options `argv` and `machine` are optional and used for the actual customization. Any argument configured will take precedence over the value given to `vagrant run` itself.
313
324
 
314
325
  ### Experimental: Shell Completion
315
326
 
@@ -323,35 +334,38 @@ vagrant run completion-data
323
334
  vagrant run completion-data my-command
324
335
  ```
325
336
 
326
-
327
337
  ## Notes for Windows Users
328
338
 
329
339
  ### SSH
330
340
 
331
- If you are using this plugin on a Windows host system, please make sure your
332
- regular `vagrant ssh [machine]` succeeds. In some cases you may need to add the
333
- `ssh.exe` (e.g. from a git installation) manually to your `%PATH%`.
341
+ If you are using this plugin on a Windows host system, please make sure your regular `vagrant ssh [machine]` succeeds. In some cases you may need to add the `ssh.exe` (e.g. from a git installation) manually to your `%PATH%`.
334
342
 
335
343
  ### Command Definition
336
344
 
337
- When using multi-line commands you probably need to define your command using
338
- a sigil notation like the following:
345
+ When using multi-line commands you probably need to define your command using a sigil notation like the following:
339
346
 
340
347
  ```ruby
341
348
  command 'long_running_task',
342
349
  script: %(cd /path/to/somewhere \
343
- && echo "starting long running task" \
350
+ && echo 'starting long running task' \
344
351
  && ./long_running_task.sh \
345
- && echo "finished long running task")
352
+ && echo 'finished long running task')
346
353
  ```
347
354
 
348
- Using a quote delimited command definition might otherwise result in not that
349
- helpful error messages about a bad shell command.
355
+ Using a quote delimited command definition might otherwise result in not that helpful error messages about a bad shell command.
356
+
357
+ It might also help to double check the line endings in your Commandfile are set unix-style (`\n`) and not windows-style (`\r\n`) if you get errors when running your commands.
350
358
 
351
- It might also help to double check the line endings in your Commandfile are set
352
- unix-style (`\n`) and not windows-style (`\r\n`) if you get errors when running
353
- your commands.
359
+ ## Development
354
360
 
361
+ You can always install the plugin directly from source:
362
+
363
+ ```shell
364
+ gem build vagrant-devcommands.gemspec
365
+
366
+ vagrant plugin uninstall vagrant-devcommands
367
+ vagrant plugin install vagrant-devcommands-x.x.x.dev.gem
368
+ ```
355
369
 
356
370
  ## License
357
371
 
@@ -1,8 +1,10 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module VagrantPlugins
2
4
  module DevCommands
3
5
  # Defines the executable vagrant command
4
6
  class Command < Vagrant.plugin(2, :command)
5
- I18N_KEY = 'vagrant_devcommands.'.freeze
7
+ I18N_KEY = 'vagrant_devcommands.'
6
8
 
7
9
  def self.synopsis
8
10
  synopsis = VagrantPlugins::DevCommands::SYNOPSIS
@@ -19,8 +21,6 @@ module VagrantPlugins
19
21
  def execute
20
22
  return 127 unless read_commandfile
21
23
 
22
- deprecated_box_config?
23
-
24
24
  command = Util.argv_command(@argv, @env)
25
25
 
26
26
  return 127 unless non_empty?(command)
@@ -47,12 +47,6 @@ module VagrantPlugins
47
47
  @registry.available?(command)
48
48
  end
49
49
 
50
- def deprecated_box_config?
51
- return unless @registry.commands.values.any?(&:deprecated_box_config)
52
-
53
- Messages.deprecated_box_config(&@env.ui.method(:warn))
54
- end
55
-
56
50
  def display_alternatives(command)
57
51
  alternatives = Util.did_you_mean(command, @registry)
58
52
  alternatives = alternatives.select { |_k, v| v > 0.8 }
@@ -60,15 +54,15 @@ module VagrantPlugins
60
54
  return false if alternatives.empty?
61
55
 
62
56
  if alternatives.length == 1
63
- display_error(I18n.t("#{I18N_KEY}.did_you_mean_single"), true)
57
+ display_error(I18n.t("#{I18N_KEY}.did_you_mean_single"), pre_ln: true)
64
58
  else
65
- display_error(I18n.t("#{I18N_KEY}.did_you_mean_multi"), true)
59
+ display_error(I18n.t("#{I18N_KEY}.did_you_mean_multi"), pre_ln: true)
66
60
  end
67
61
 
68
62
  alternatives.sort.each { |(k, _v)| display_error(" #{k}") }
69
63
  end
70
64
 
71
- def display_error(msg, pre_ln = false, post_ln = false)
65
+ def display_error(msg, pre_ln: false, post_ln: false)
72
66
  @env.ui.error '' if pre_ln
73
67
  @env.ui.error msg
74
68
  @env.ui.error '' if post_ln
@@ -104,7 +98,7 @@ module VagrantPlugins
104
98
 
105
99
  runner.run(runnable)
106
100
  rescue RuntimeError => e
107
- display_error(e.message, false, true)
101
+ display_error(e.message, post_ln: true)
108
102
  run_internal('help', [command])
109
103
 
110
104
  nil
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module VagrantPlugins
2
4
  module DevCommands
3
5
  class Commandfile
@@ -33,9 +35,7 @@ module VagrantPlugins
33
35
  options = { script: options } unless options.is_a?(Hash)
34
36
  options[:name] = name
35
37
 
36
- unless valid_script?(options[:script])
37
- raise ArgumentError, 'command_no_script'
38
- end
38
+ raise ArgumentError, 'command_no_script' unless valid_script?(options[:script])
39
39
 
40
40
  VagrantPlugins::DevCommands::Model::Command.new(options)
41
41
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module VagrantPlugins
2
4
  module DevCommands
3
5
  class Commandfile
@@ -17,8 +19,8 @@ module VagrantPlugins
17
19
  local = @commandfile.path
18
20
 
19
21
  contents = ''
20
- contents += "\n" + global.read unless global.nil?
21
- contents += "\n" + local.read unless local.nil?
22
+ contents += "\n#{global.read}" unless global.nil?
23
+ contents += "\n#{local.read}" unless local.nil?
22
24
 
23
25
  instance_eval(contents)
24
26
 
@@ -29,24 +31,24 @@ module VagrantPlugins
29
31
 
30
32
  def chain(name, options = nil)
31
33
  @entries << {
32
- type: :chain,
33
- name: name.to_s,
34
+ type: :chain,
35
+ name: name.to_s,
34
36
  options: options
35
37
  }
36
38
  end
37
39
 
38
40
  def command(name, options = nil)
39
41
  @entries << {
40
- type: :command,
41
- name: name.to_s,
42
+ type: :command,
43
+ name: name.to_s,
42
44
  options: options
43
45
  }
44
46
  end
45
47
 
46
48
  def command_alias(name, options = nil)
47
49
  @entries << {
48
- type: :command_alias,
49
- name: name.to_s,
50
+ type: :command_alias,
51
+ name: name.to_s,
50
52
  options: options
51
53
  }
52
54
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'pathname'
2
4
 
3
5
  module VagrantPlugins
@@ -1,9 +1,11 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module VagrantPlugins
2
4
  module DevCommands
3
5
  module HelpPrinter
4
6
  # Prints help for a command chain
5
7
  class Chain
6
- I18N_KEY = 'vagrant_devcommands.internal.help'.freeze
8
+ I18N_KEY = 'vagrant_devcommands.internal.help'
7
9
  UTIL = VagrantPlugins::DevCommands::Util
8
10
  MESSAGES = VagrantPlugins::DevCommands::Messages
9
11
 
@@ -20,9 +22,9 @@ module VagrantPlugins
20
22
  private
21
23
 
22
24
  def body(help)
23
- return message(:chain_no_help, true) if help.nil?
25
+ return message(:chain_no_help, pre_ln: true) if help.nil?
24
26
 
25
- info(help.strip, true)
27
+ info(help.strip, pre_ln: true)
26
28
  end
27
29
 
28
30
  def chain_help_line(cmd)
@@ -32,7 +34,7 @@ module VagrantPlugins
32
34
  end
33
35
 
34
36
  def commands(chain)
35
- info('Chained commands (in order):', true)
37
+ info('Chained commands (in order):', pre_ln: true)
36
38
 
37
39
  chain.commands.each do |cmd|
38
40
  info(UTIL.padded_columns(0, chain_help_line(cmd)))
@@ -50,12 +52,12 @@ module VagrantPlugins
50
52
  info(I18n.t("#{I18N_KEY}.usage", what: usage))
51
53
  end
52
54
 
53
- def info(msg, pre_ln = false)
55
+ def info(msg, pre_ln: false)
54
56
  @env.ui.info '' if pre_ln
55
57
  @env.ui.info msg
56
58
  end
57
59
 
58
- def message(msg, pre_ln = false)
60
+ def message(msg, pre_ln: false)
59
61
  if pre_ln
60
62
  MESSAGES.pre_ln(msg, &@env.ui.method(:info))
61
63
  else