lino 2.2.0.pre.3 → 2.4.0.pre.1
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.
- checksums.yaml +4 -4
- data/Gemfile.lock +2 -2
- data/README.md +288 -33
- data/Rakefile +2 -0
- data/lib/lino/appliables.rb +23 -0
- data/lib/lino/command_line_builder.rb +17 -0
- data/lib/lino/options.rb +17 -0
- data/lib/lino/subcommand_builder.rb +2 -0
- data/lib/lino/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c8e3b24a8c6e75d46c7b35d031a103086e6581ddf565fcd6b29f5899a40b85e0
|
4
|
+
data.tar.gz: 58e3a47d18114356c513de7cfcdef552faad11ad738d88445297cfb4c48b8a12
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bf1f78f7538dc573f9ce6d2bfd77c98c8cec8fc2922a81249d89ff903b89d1ace6c999b28aa9d8c2ce259029053b849eee422b450a208cdd40a7ba0c18bade97
|
7
|
+
data.tar.gz: ff587023b46e059be16b08c6b113d396f618621edd9211aff9ca33d7413c5afa164b6e5f5206308a1b675b339cea3e4f34a6e540288000d7a161dc65e94f30ea
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -41,10 +41,13 @@ command_line.execute
|
|
41
41
|
### `Lino::CommandLineBuilder`
|
42
42
|
|
43
43
|
The `CommandLineBuilder` allows a number of different styles of commands to be
|
44
|
-
built
|
44
|
+
built.
|
45
|
+
|
46
|
+
#### Flags
|
47
|
+
|
48
|
+
Flags can be added with `#with_flag`:
|
45
49
|
|
46
50
|
```ruby
|
47
|
-
# commands with flags
|
48
51
|
Lino::CommandLineBuilder.for_command('ls')
|
49
52
|
.with_flag('-l')
|
50
53
|
.with_flag('-a')
|
@@ -52,8 +55,24 @@ Lino::CommandLineBuilder.for_command('ls')
|
|
52
55
|
.to_s
|
53
56
|
|
54
57
|
# => ls -l -a
|
58
|
+
```
|
59
|
+
|
60
|
+
or `#with_flags`:
|
61
|
+
|
62
|
+
```ruby
|
63
|
+
Lino::CommandLineBuilder.for_command('ls')
|
64
|
+
.with_flags(%w[-l -a])
|
65
|
+
.build
|
66
|
+
.to_s
|
67
|
+
|
68
|
+
# => ls -l -a
|
69
|
+
```
|
70
|
+
|
71
|
+
#### Options
|
72
|
+
|
73
|
+
Options with values can be added with `#with_option`:
|
55
74
|
|
56
|
-
|
75
|
+
```ruby
|
57
76
|
Lino::CommandLineBuilder.for_command('gpg')
|
58
77
|
.with_option('--recipient', 'tobyclemson@gmail.com')
|
59
78
|
.with_option('--sign', './doc.txt')
|
@@ -61,16 +80,57 @@ Lino::CommandLineBuilder.for_command('gpg')
|
|
61
80
|
.to_s
|
62
81
|
|
63
82
|
# => gpg --recipient tobyclemson@gmail.com --sign ./doc.txt
|
83
|
+
```
|
84
|
+
|
85
|
+
or `#with_options`, either as a hash:
|
86
|
+
|
87
|
+
```ruby
|
88
|
+
Lino::CommandLineBuilder.for_command('gpg')
|
89
|
+
.with_options({
|
90
|
+
'--recipient' => 'tobyclemson@gmail.com',
|
91
|
+
'--sign' => './doc.txt'
|
92
|
+
})
|
93
|
+
.build
|
94
|
+
.to_s
|
64
95
|
|
65
|
-
#
|
96
|
+
# => gpg --recipient tobyclemson@gmail.com --sign ./doc.txt
|
97
|
+
```
|
98
|
+
|
99
|
+
or as an array:
|
100
|
+
|
101
|
+
```ruby
|
102
|
+
Lino::CommandLineBuilder.for_command('gpg')
|
103
|
+
.with_options(
|
104
|
+
[
|
105
|
+
{ option: '--recipient', value: 'tobyclemson@gmail.com' },
|
106
|
+
{ option: '--sign', value: './doc.txt' }
|
107
|
+
]
|
108
|
+
)
|
109
|
+
.build
|
110
|
+
.to_s
|
111
|
+
|
112
|
+
# => gpg --recipient tobyclemson@gmail.com --sign ./doc.txt
|
113
|
+
```
|
114
|
+
|
115
|
+
Some commands allow options to be repeated:
|
116
|
+
|
117
|
+
```ruby
|
66
118
|
Lino::CommandLineBuilder.for_command('example.sh')
|
67
119
|
.with_repeated_option('--opt', ['file1.txt', nil, '', 'file2.txt'])
|
68
120
|
.build
|
69
121
|
.to_s
|
70
122
|
|
71
123
|
# => example.sh --opt file1.txt --opt file2.txt
|
124
|
+
```
|
125
|
+
|
126
|
+
> Note: `lino` ignores `nil` or empty option values in the resulting command
|
127
|
+
> line.
|
72
128
|
|
73
|
-
|
129
|
+
#### Arguments
|
130
|
+
|
131
|
+
Arguments can be added using `#with_argument`:
|
132
|
+
|
133
|
+
```ruby
|
74
134
|
Lino::CommandLineBuilder.for_command('diff')
|
75
135
|
.with_argument('./file1.txt')
|
76
136
|
.with_argument('./file2.txt')
|
@@ -78,16 +138,28 @@ Lino::CommandLineBuilder.for_command('diff')
|
|
78
138
|
.to_s
|
79
139
|
|
80
140
|
# => diff ./file1.txt ./file2.txt
|
141
|
+
```
|
81
142
|
|
82
|
-
|
143
|
+
or `#with_arguments`, as an array:
|
144
|
+
|
145
|
+
```ruby
|
83
146
|
Lino::CommandLineBuilder.for_command('diff')
|
84
147
|
.with_arguments(['./file1.txt', nil, '', './file2.txt'])
|
85
148
|
.build
|
86
149
|
.to_s
|
87
150
|
|
88
151
|
# => diff ./file1.txt ./file2.txt
|
152
|
+
```
|
153
|
+
|
154
|
+
> Note: `lino` ignores `nil` or empty argument values in the resulting command
|
155
|
+
> line.
|
156
|
+
|
157
|
+
#### Option Separators
|
89
158
|
|
90
|
-
|
159
|
+
By default, `lino` separates option values from the option by a space. This
|
160
|
+
can be overridden globally using `#with_option_separator`:
|
161
|
+
|
162
|
+
```ruby
|
91
163
|
Lino::CommandLineBuilder.for_command('java')
|
92
164
|
.with_option_separator(':')
|
93
165
|
.with_option('-splash', './images/splash.jpg')
|
@@ -96,44 +168,132 @@ Lino::CommandLineBuilder.for_command('java')
|
|
96
168
|
.to_s
|
97
169
|
|
98
170
|
# => java -splash:./images/splash.jpg ./application.jar
|
171
|
+
```
|
172
|
+
|
173
|
+
The option separator can be overridden on an option by option basis:
|
174
|
+
|
175
|
+
```ruby
|
176
|
+
Lino::CommandLineBuilder.for_command('java')
|
177
|
+
.with_option('-splash', './images/splash.jpg', separator: ':')
|
178
|
+
.with_argument('./application.jar')
|
179
|
+
.build
|
180
|
+
.to_s
|
181
|
+
|
182
|
+
# => java -splash:./images/splash.jpg ./application.jar
|
183
|
+
```
|
184
|
+
|
185
|
+
> Note: `#with_options` supports separator overriding when the options are
|
186
|
+
> passed as an array of hashes and a `separator` key is included in the
|
187
|
+
> hash.
|
188
|
+
|
189
|
+
> Note: `#with_repeated_option` also supports the `separator` named parameter.
|
190
|
+
|
191
|
+
> Note: option specific separators take precedence over the global option
|
192
|
+
> separator
|
193
|
+
|
194
|
+
#### Option Quoting
|
195
|
+
|
196
|
+
By default, `lino` does not quote option values. This can be overridden
|
197
|
+
globally using `#with_option_quoting`:
|
198
|
+
|
199
|
+
```ruby
|
200
|
+
Lino::CommandLineBuilder.for_command('gpg')
|
201
|
+
.with_option_quoting('"')
|
202
|
+
.with_option('--sign', 'some file.txt')
|
203
|
+
.build
|
204
|
+
.to_s
|
205
|
+
|
206
|
+
# => gpg --sign "some file.txt"
|
207
|
+
```
|
208
|
+
|
209
|
+
The option quoting can be overridden on an option by option basis:
|
210
|
+
|
211
|
+
```ruby
|
212
|
+
Lino::CommandLineBuilder.for_command('java')
|
213
|
+
.with_option('-splash', './images/splash.jpg', quoting: '"')
|
214
|
+
.with_argument('./application.jar')
|
215
|
+
.build
|
216
|
+
.to_s
|
217
|
+
|
218
|
+
# => java -splash "./images/splash.jpg" ./application.jar
|
219
|
+
```
|
220
|
+
|
221
|
+
> Note: `#with_options` supports quoting overriding when the options are
|
222
|
+
> passed as an array of hashes and a `quoting` key is included in the
|
223
|
+
> hash.
|
224
|
+
|
225
|
+
> Note: `#with_repeated_option` also supports the `quoting` named parameter.
|
226
|
+
|
227
|
+
> Note: option specific quoting take precedence over the global option
|
228
|
+
> quoting
|
229
|
+
|
230
|
+
#### Subcommands
|
231
|
+
|
232
|
+
Subcommands can be added using `#with_subcommand`:
|
99
233
|
|
100
|
-
|
234
|
+
```ruby
|
101
235
|
Lino::CommandLineBuilder.for_command('git')
|
102
236
|
.with_flag('--no-pager')
|
103
|
-
.with_subcommand('log')
|
104
|
-
sub.with_option('--since', '2016-01-01')
|
105
|
-
end
|
237
|
+
.with_subcommand('log')
|
106
238
|
.build
|
107
239
|
.to_s
|
108
240
|
|
109
|
-
# => git --no-pager log
|
241
|
+
# => git --no-pager log
|
242
|
+
```
|
110
243
|
|
111
|
-
|
244
|
+
Multi-level subcommands can be added using multiple `#with_subcommand`
|
245
|
+
invocations:
|
246
|
+
|
247
|
+
```ruby
|
112
248
|
Lino::CommandLineBuilder.for_command('gcloud')
|
113
249
|
.with_subcommand('sql')
|
114
250
|
.with_subcommand('instances')
|
115
251
|
.with_subcommand('set-root-password')
|
116
|
-
.with_subcommand('some-database')
|
117
|
-
sub.with_option('--password', 'super-secure')
|
118
|
-
end
|
252
|
+
.with_subcommand('some-database')
|
119
253
|
.build
|
120
254
|
.to_s
|
121
|
-
|
122
|
-
# => gcloud sql instances set-root-password some-database --password super-secure
|
123
255
|
|
124
|
-
#
|
256
|
+
# => gcloud sql instances set-root-password some-database
|
257
|
+
```
|
258
|
+
|
259
|
+
or using `#with_subcommands`:
|
260
|
+
|
261
|
+
```ruby
|
125
262
|
Lino::CommandLineBuilder.for_command('gcloud')
|
126
263
|
.with_subcommands(
|
127
264
|
%w[sql instances set-root-password some-database]
|
128
|
-
)
|
129
|
-
sub.with_option('--password', 'super-secure')
|
130
|
-
end
|
265
|
+
)
|
131
266
|
.build
|
132
267
|
.to_s
|
133
268
|
|
134
|
-
# => gcloud sql instances set-root-password some-database
|
269
|
+
# => gcloud sql instances set-root-password some-database
|
270
|
+
```
|
271
|
+
|
272
|
+
Subcommands also support options via `#with_flag`, `#with_flags`,
|
273
|
+
`#with_option`, `#with_options` and `#with_repeated_option` just like commands,
|
274
|
+
via a block, for example:
|
275
|
+
|
276
|
+
```ruby
|
277
|
+
Lino::CommandLineBuilder.for_command('git')
|
278
|
+
.with_flag('--no-pager')
|
279
|
+
.with_subcommand('log') do |sub|
|
280
|
+
sub.with_option('--since', '2016-01-01')
|
281
|
+
end
|
282
|
+
.build
|
283
|
+
.to_s
|
284
|
+
|
285
|
+
# => git --no-pager log --since 2016-01-01
|
286
|
+
```
|
287
|
+
|
288
|
+
> Note: `#with_subcommands` also supports a block, which applies in the context
|
289
|
+
> of the last subcommand in the passed array.
|
290
|
+
|
291
|
+
#### Environment Variables
|
292
|
+
|
293
|
+
Command lines can be prefixed with environment variables using
|
294
|
+
`#with_environment_variable`:
|
135
295
|
|
136
|
-
|
296
|
+
```ruby
|
137
297
|
Lino::CommandLineBuilder.for_command('node')
|
138
298
|
.with_environment_variable('PORT', '3030')
|
139
299
|
.with_environment_variable('LOG_LEVEL', 'debug')
|
@@ -142,31 +302,73 @@ Lino::CommandLineBuilder.for_command('node')
|
|
142
302
|
.to_s
|
143
303
|
|
144
304
|
# => PORT=3030 LOG_LEVEL=debug node ./server.js
|
305
|
+
```
|
306
|
+
|
307
|
+
or `#with_environment_variables`, either as a hash:
|
308
|
+
|
309
|
+
```ruby
|
310
|
+
Lino::CommandLineBuilder.for_command('node')
|
311
|
+
.with_environment_variables({
|
312
|
+
'PORT' => '3030',
|
313
|
+
'LOG_LEVEL' => 'debug'
|
314
|
+
})
|
315
|
+
.build
|
316
|
+
.to_s
|
317
|
+
|
318
|
+
# => PORT=3030 LOG_LEVEL=debug node ./server.js
|
319
|
+
```
|
320
|
+
|
321
|
+
or as an array:
|
322
|
+
|
323
|
+
```ruby
|
324
|
+
Lino::CommandLineBuilder.for_command('node')
|
325
|
+
.with_environment_variables(
|
326
|
+
[
|
327
|
+
{ name: 'PORT', value: '3030' },
|
328
|
+
{ name: 'LOG_LEVEL', value: 'debug' }
|
329
|
+
]
|
330
|
+
)
|
331
|
+
.build
|
332
|
+
.to_s
|
333
|
+
|
334
|
+
# => PORT=3030 LOG_LEVEL=debug node ./server.js
|
335
|
+
```
|
336
|
+
|
337
|
+
#### Option Placement
|
338
|
+
|
339
|
+
By default, `lino` places top-level options after the command, before all
|
340
|
+
subcommands and arguments.
|
145
341
|
|
146
|
-
|
147
|
-
# and arguments
|
342
|
+
This is equivalent to calling `#with_options_after_command`:
|
148
343
|
|
149
|
-
|
344
|
+
```ruby
|
150
345
|
Lino::CommandLineBuilder.for_command('gcloud')
|
151
346
|
.with_options_after_command
|
152
347
|
.with_option('--password', 'super-secure')
|
153
|
-
.with_subcommands(%w[sql instances set-root-password
|
348
|
+
.with_subcommands(%w[sql instances set-root-password])
|
154
349
|
.build
|
155
350
|
.to_s
|
156
351
|
|
157
|
-
# => gcloud --password super-secure sql instances set-root-password
|
352
|
+
# => gcloud --password super-secure sql instances set-root-password
|
353
|
+
```
|
354
|
+
|
355
|
+
Alternatively, top-level options can be placed after all subcommands using
|
356
|
+
`#with_options_after_subcommands`:
|
158
357
|
|
159
|
-
|
358
|
+
```ruby
|
160
359
|
Lino::CommandLineBuilder.for_command('gcloud')
|
161
360
|
.with_options_after_subcommands
|
162
361
|
.with_option('--password', 'super-secure')
|
163
|
-
.with_subcommands(%w[sql instances set-root-password
|
362
|
+
.with_subcommands(%w[sql instances set-root-password])
|
164
363
|
.build
|
165
364
|
.to_s
|
166
365
|
|
167
|
-
# => gcloud sql instances set-root-password
|
366
|
+
# => gcloud sql instances set-root-password --password super-secure
|
367
|
+
```
|
368
|
+
|
369
|
+
or, after all arguments, using `#with_options_after_arguments`:
|
168
370
|
|
169
|
-
|
371
|
+
```ruby
|
170
372
|
Lino::CommandLineBuilder.for_command('ls')
|
171
373
|
.with_options_after_arguments
|
172
374
|
.with_flag('-l')
|
@@ -177,6 +379,59 @@ Lino::CommandLineBuilder.for_command('ls')
|
|
177
379
|
# => ls /some/directory -l
|
178
380
|
```
|
179
381
|
|
382
|
+
#### Appliables
|
383
|
+
|
384
|
+
Command and subcommand builders both support passing 'appliables' that are
|
385
|
+
applied to the builder allowing an operation to be encapsulated in an object.
|
386
|
+
|
387
|
+
Given an appliable type:
|
388
|
+
|
389
|
+
```ruby
|
390
|
+
class AppliableOption
|
391
|
+
def initialize(option, value)
|
392
|
+
@option = option
|
393
|
+
@value = value
|
394
|
+
end
|
395
|
+
|
396
|
+
def apply(builder)
|
397
|
+
builder.with_option(@option, @value)
|
398
|
+
end
|
399
|
+
end
|
400
|
+
```
|
401
|
+
|
402
|
+
an instance of the appliable can be applied using `#with_appliable`:
|
403
|
+
|
404
|
+
```ruby
|
405
|
+
Lino::CommandLineBuilder.for_command('gpg')
|
406
|
+
.with_appliable(AppliableOption.new('--recipient', 'tobyclemson@gmail.com'))
|
407
|
+
.with_flag('--sign')
|
408
|
+
.with_argument('/some/file.txt')
|
409
|
+
.build
|
410
|
+
.to_s
|
411
|
+
|
412
|
+
# => gpg --recipient tobyclemson@gmail.com --sign /some/file.txt
|
413
|
+
```
|
414
|
+
|
415
|
+
or multiple with `#with_appliables`:
|
416
|
+
|
417
|
+
```ruby
|
418
|
+
Lino::CommandLineBuilder.for_command('gpg')
|
419
|
+
.with_appliables([
|
420
|
+
AppliableOption.new('--recipient', 'user@example.com'),
|
421
|
+
AppliableOption.new('--output', '/signed.txt')
|
422
|
+
])
|
423
|
+
.with_flag('--sign')
|
424
|
+
.with_argument('/file.txt')
|
425
|
+
.build
|
426
|
+
.to_s
|
427
|
+
|
428
|
+
# => gpg --recipient user@example.com --output /signed.txt --sign /file.txt
|
429
|
+
```
|
430
|
+
|
431
|
+
> Note: an 'appliable' is any object that has an `#apply` method.
|
432
|
+
|
433
|
+
> Note: `lino` ignores `nil` or empty appliables in the resulting command line.
|
434
|
+
|
180
435
|
### `Lino::CommandLine`
|
181
436
|
|
182
437
|
A `CommandLine` can be executed using the `#execute` method:
|
data/Rakefile
CHANGED
@@ -16,6 +16,7 @@ task default: %i[
|
|
16
16
|
|
17
17
|
namespace :encryption do
|
18
18
|
namespace :passphrase do
|
19
|
+
desc 'Generate encryption passphrase for CI GPG key'
|
19
20
|
task :generate do
|
20
21
|
File.open('config/secrets/ci/encryption.passphrase', 'w') do |f|
|
21
22
|
f.write(SecureRandom.base64(36))
|
@@ -96,6 +97,7 @@ RakeGithub.define_repository_tasks(
|
|
96
97
|
end
|
97
98
|
|
98
99
|
namespace :pipeline do
|
100
|
+
desc 'Prepare CircleCI Pipeline'
|
99
101
|
task prepare: %i[
|
100
102
|
circle_ci:project:follow
|
101
103
|
circle_ci:env_vars:ensure
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'utilities'
|
4
|
+
|
5
|
+
module Lino
|
6
|
+
module Appliables
|
7
|
+
include Lino::Utilities
|
8
|
+
|
9
|
+
def with_appliable(appliable)
|
10
|
+
return self if missing?(appliable)
|
11
|
+
|
12
|
+
appliable.apply(self)
|
13
|
+
end
|
14
|
+
|
15
|
+
def with_appliables(appliables)
|
16
|
+
return self if missing?(appliables)
|
17
|
+
|
18
|
+
appliables.inject(self) do |s, appliable|
|
19
|
+
s.with_appliable(appliable)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -5,6 +5,7 @@ require_relative 'utilities'
|
|
5
5
|
require_relative 'command_line'
|
6
6
|
require_relative 'subcommand_builder'
|
7
7
|
require_relative 'options'
|
8
|
+
require_relative 'appliables'
|
8
9
|
|
9
10
|
module Lino
|
10
11
|
# rubocop:disable Metrics/ClassLength
|
@@ -20,6 +21,7 @@ module Lino
|
|
20
21
|
|
21
22
|
include Lino::Utilities
|
22
23
|
include Lino::Options
|
24
|
+
include Lino::Appliables
|
23
25
|
|
24
26
|
class << self
|
25
27
|
def for_command(command)
|
@@ -50,6 +52,8 @@ module Lino
|
|
50
52
|
# rubocop:enable Metrics/ParameterLists
|
51
53
|
|
52
54
|
def with_subcommand(subcommand, &block)
|
55
|
+
return self if missing?(subcommand)
|
56
|
+
|
53
57
|
with(
|
54
58
|
subcommands: @subcommands.add(
|
55
59
|
(block || ->(sub) { sub }).call(
|
@@ -60,6 +64,8 @@ module Lino
|
|
60
64
|
end
|
61
65
|
|
62
66
|
def with_subcommands(subcommands, &block)
|
67
|
+
return self if missing?(subcommands)
|
68
|
+
|
63
69
|
without_block = subcommands[0...-1]
|
64
70
|
with_block = subcommands.last
|
65
71
|
|
@@ -111,6 +117,17 @@ module Lino
|
|
111
117
|
)
|
112
118
|
end
|
113
119
|
|
120
|
+
def with_environment_variables(environment_variables)
|
121
|
+
return self if missing?(environment_variables)
|
122
|
+
|
123
|
+
environment_variables.entries.inject(self) do |s, var|
|
124
|
+
s.with_environment_variable(
|
125
|
+
var.include?(:name) ? var[:name] : var[0],
|
126
|
+
var.include?(:value) ? var[:value] : var[1]
|
127
|
+
)
|
128
|
+
end
|
129
|
+
end
|
130
|
+
|
114
131
|
def build
|
115
132
|
components = formatted_components
|
116
133
|
command_line = SELECTORS[@option_placement]
|
data/lib/lino/options.rb
CHANGED
@@ -1,7 +1,11 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require_relative 'utilities'
|
4
|
+
|
3
5
|
module Lino
|
4
6
|
module Options
|
7
|
+
include Lino::Utilities
|
8
|
+
|
5
9
|
def with_option(option, value, separator: nil, quoting: nil)
|
6
10
|
return self if missing?(value)
|
7
11
|
|
@@ -14,6 +18,19 @@ module Lino
|
|
14
18
|
))
|
15
19
|
end
|
16
20
|
|
21
|
+
def with_options(options)
|
22
|
+
return self if missing?(options)
|
23
|
+
|
24
|
+
options.entries.inject(self) do |s, entry|
|
25
|
+
s.with_option(
|
26
|
+
entry.include?(:option) ? entry[:option] : entry[0],
|
27
|
+
entry.include?(:value) ? entry[:value] : entry[1],
|
28
|
+
separator: (entry.include?(:separator) ? entry[:separator] : nil),
|
29
|
+
quoting: (entry.include?(:quoting) ? entry[:quoting] : nil)
|
30
|
+
)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
17
34
|
def with_repeated_option(option, values, separator: nil, quoting: nil)
|
18
35
|
values.inject(self) do |s, value|
|
19
36
|
s.with_option(option, value, separator: separator, quoting: quoting)
|
@@ -3,11 +3,13 @@
|
|
3
3
|
require 'hamster'
|
4
4
|
require_relative 'utilities'
|
5
5
|
require_relative 'options'
|
6
|
+
require_relative 'appliables'
|
6
7
|
|
7
8
|
module Lino
|
8
9
|
class SubcommandBuilder
|
9
10
|
include Lino::Utilities
|
10
11
|
include Lino::Options
|
12
|
+
include Lino::Appliables
|
11
13
|
|
12
14
|
class <<self
|
13
15
|
def for_subcommand(subcommand)
|
data/lib/lino/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lino
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.4.0.pre.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Toby Clemson
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-04-
|
11
|
+
date: 2021-04-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: hamster
|
@@ -222,6 +222,7 @@ files:
|
|
222
222
|
- bin/console
|
223
223
|
- bin/setup
|
224
224
|
- lib/lino.rb
|
225
|
+
- lib/lino/appliables.rb
|
225
226
|
- lib/lino/command_line.rb
|
226
227
|
- lib/lino/command_line_builder.rb
|
227
228
|
- lib/lino/options.rb
|