vagrant-devcommands 0.11.1 → 0.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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