lino 1.10.0.pre.2 → 2.0.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 +1 -1
- data/README.md +29 -2
- data/lib/lino/command_line_builder.rb +25 -18
- data/lib/lino/options.rb +27 -0
- data/lib/lino/subcommand_builder.rb +6 -6
- data/lib/lino/version.rb +1 -1
- metadata +3 -3
- data/lib/lino/switches.rb +0 -34
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b1ed8a59b3a9171234c636171f9b7304637067db63ff130c04c14a780418f28c
|
4
|
+
data.tar.gz: 927e637996bab9611c2233e92b1ab5b0869a5de36847dce88086880fd1022d71
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 357901083b289bbf18a2c3f7425ae01967d950c0329b6c793dd214fe2b265bea8f69d40886cd58d169bac03dcff1eb7337ad6a909788da0370836065fa51b9da
|
7
|
+
data.tar.gz: 53a7a833e0725f4f9597dc05afa7213a67790b5c77d0f76bacbbda403a82464dc4a187fc8265999db6dd4e47e4f05deb257370c97734a0356f81ebcf451bb67b
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -120,6 +120,18 @@ Lino::CommandLineBuilder.for_command('gcloud')
|
|
120
120
|
.to_s
|
121
121
|
|
122
122
|
# => gcloud sql instances set-root-password some-database --password super-secure
|
123
|
+
|
124
|
+
# ... or alternatively
|
125
|
+
Lino::CommandLineBuilder.for_command('gcloud')
|
126
|
+
.with_subcommands(
|
127
|
+
%w[sql instances set-root-password some-database]
|
128
|
+
) do |sub|
|
129
|
+
sub.with_option('--password', 'super-secure')
|
130
|
+
end
|
131
|
+
.build
|
132
|
+
.to_s
|
133
|
+
|
134
|
+
# => gcloud sql instances set-root-password some-database --password super-secure
|
123
135
|
|
124
136
|
# commands controlled by environment variables
|
125
137
|
Lino::CommandLineBuilder.for_command('node')
|
@@ -183,10 +195,25 @@ To install dependencies and run the build, run the pre-commit build:
|
|
183
195
|
./go
|
184
196
|
```
|
185
197
|
|
186
|
-
|
198
|
+
This runs all unit tests and other checks including coverage and code linting /
|
199
|
+
formatting.
|
200
|
+
|
201
|
+
To run only the unit tests, including coverage:
|
202
|
+
|
203
|
+
```shell script
|
204
|
+
./go test:unit
|
205
|
+
```
|
206
|
+
|
207
|
+
To attempt to fix any code linting / formatting issues:
|
208
|
+
|
209
|
+
```shell script
|
210
|
+
./go library:fix
|
211
|
+
```
|
212
|
+
|
213
|
+
To check for code linting / formatting issues without fixing:
|
187
214
|
|
188
215
|
```shell script
|
189
|
-
./go
|
216
|
+
./go library:check
|
190
217
|
```
|
191
218
|
|
192
219
|
You can also run `bin/console` for an interactive prompt that will allow you to
|
@@ -4,13 +4,13 @@ require 'hamster'
|
|
4
4
|
require_relative 'utilities'
|
5
5
|
require_relative 'command_line'
|
6
6
|
require_relative 'subcommand_builder'
|
7
|
-
require_relative '
|
7
|
+
require_relative 'options'
|
8
8
|
|
9
9
|
module Lino
|
10
10
|
# rubocop:disable Metrics/ClassLength
|
11
11
|
class CommandLineBuilder
|
12
12
|
include Lino::Utilities
|
13
|
-
include Lino::
|
13
|
+
include Lino::Options
|
14
14
|
|
15
15
|
class << self
|
16
16
|
def for_command(command)
|
@@ -22,7 +22,7 @@ module Lino
|
|
22
22
|
def initialize(
|
23
23
|
command: nil,
|
24
24
|
subcommands: [],
|
25
|
-
|
25
|
+
options: [],
|
26
26
|
arguments: [],
|
27
27
|
environment_variables: [],
|
28
28
|
option_separator: ' ',
|
@@ -30,7 +30,7 @@ module Lino
|
|
30
30
|
)
|
31
31
|
@command = command
|
32
32
|
@subcommands = Hamster::Vector.new(subcommands)
|
33
|
-
@
|
33
|
+
@options = Hamster::Vector.new(options)
|
34
34
|
@arguments = Hamster::Vector.new(arguments)
|
35
35
|
@environment_variables = Hamster::Vector.new(environment_variables)
|
36
36
|
@option_separator = option_separator
|
@@ -48,6 +48,15 @@ module Lino
|
|
48
48
|
)
|
49
49
|
end
|
50
50
|
|
51
|
+
def with_subcommands(subcommands, &block)
|
52
|
+
without_block = subcommands[0...-1]
|
53
|
+
with_block = subcommands.last
|
54
|
+
|
55
|
+
without_block
|
56
|
+
.inject(self) { |s, sc| s.with_subcommand(sc) }
|
57
|
+
.with_subcommand(with_block, &block)
|
58
|
+
end
|
59
|
+
|
51
60
|
def with_option_separator(option_separator)
|
52
61
|
with(option_separator: option_separator)
|
53
62
|
end
|
@@ -57,12 +66,13 @@ module Lino
|
|
57
66
|
end
|
58
67
|
|
59
68
|
def with_argument(argument)
|
60
|
-
|
69
|
+
return self if missing?(argument)
|
70
|
+
|
71
|
+
with(arguments: @arguments.add({ components: [argument] }))
|
61
72
|
end
|
62
73
|
|
63
74
|
def with_arguments(arguments)
|
64
|
-
arguments.
|
65
|
-
with({})
|
75
|
+
arguments.inject(self) { |s, argument| s.with_argument(argument) }
|
66
76
|
end
|
67
77
|
|
68
78
|
def with_environment_variable(environment_variable, value)
|
@@ -80,7 +90,7 @@ module Lino
|
|
80
90
|
components = [
|
81
91
|
formatted_environment_variables,
|
82
92
|
@command,
|
83
|
-
|
93
|
+
formatted_options,
|
84
94
|
formatted_subcommands,
|
85
95
|
formatted_arguments
|
86
96
|
]
|
@@ -98,9 +108,9 @@ module Lino
|
|
98
108
|
end
|
99
109
|
end
|
100
110
|
|
101
|
-
def
|
111
|
+
def formatted_options
|
102
112
|
map_and_join(
|
103
|
-
@
|
113
|
+
@options,
|
104
114
|
&(quote_with(@option_quoting) >> join_with(@option_separator))
|
105
115
|
)
|
106
116
|
end
|
@@ -112,7 +122,10 @@ module Lino
|
|
112
122
|
end
|
113
123
|
|
114
124
|
def formatted_arguments
|
115
|
-
map_and_join(
|
125
|
+
map_and_join(
|
126
|
+
@arguments,
|
127
|
+
&join_with(' ')
|
128
|
+
)
|
116
129
|
end
|
117
130
|
|
118
131
|
def with(**replacements)
|
@@ -123,19 +136,13 @@ module Lino
|
|
123
136
|
{
|
124
137
|
command: @command,
|
125
138
|
subcommands: @subcommands,
|
126
|
-
|
139
|
+
options: @options,
|
127
140
|
arguments: @arguments,
|
128
141
|
environment_variables: @environment_variables,
|
129
142
|
option_separator: @option_separator,
|
130
143
|
option_quoting: @option_quoting
|
131
144
|
}
|
132
145
|
end
|
133
|
-
|
134
|
-
def add_argument(argument)
|
135
|
-
return @arguments if missing?(argument)
|
136
|
-
|
137
|
-
@arguments = @arguments.add({ components: [argument] })
|
138
|
-
end
|
139
146
|
end
|
140
147
|
# rubocop:enable Metrics/ClassLength
|
141
148
|
end
|
data/lib/lino/options.rb
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Lino
|
4
|
+
module Options
|
5
|
+
def with_option(option, value, separator: nil, quoting: nil)
|
6
|
+
return self if missing?(value)
|
7
|
+
|
8
|
+
with(options: @options.add(
|
9
|
+
{
|
10
|
+
components: [option, value],
|
11
|
+
separator: separator,
|
12
|
+
quoting: quoting
|
13
|
+
}
|
14
|
+
))
|
15
|
+
end
|
16
|
+
|
17
|
+
def with_repeated_option(option, values, separator: nil, quoting: nil)
|
18
|
+
values.inject(self) do |s, value|
|
19
|
+
s.with_option(option, value, separator: separator, quoting: quoting)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def with_flag(flag)
|
24
|
+
with(options: @options.add({ components: [flag] }))
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -2,12 +2,12 @@
|
|
2
2
|
|
3
3
|
require 'hamster'
|
4
4
|
require_relative 'utilities'
|
5
|
-
require_relative '
|
5
|
+
require_relative 'options'
|
6
6
|
|
7
7
|
module Lino
|
8
8
|
class SubcommandBuilder
|
9
9
|
include Lino::Utilities
|
10
|
-
include Lino::
|
10
|
+
include Lino::Options
|
11
11
|
|
12
12
|
class <<self
|
13
13
|
def for_subcommand(subcommand)
|
@@ -15,16 +15,16 @@ module Lino
|
|
15
15
|
end
|
16
16
|
end
|
17
17
|
|
18
|
-
def initialize(subcommand: nil,
|
18
|
+
def initialize(subcommand: nil, options: [])
|
19
19
|
@subcommand = subcommand
|
20
|
-
@
|
20
|
+
@options = Hamster::Vector.new(options)
|
21
21
|
end
|
22
22
|
|
23
23
|
def build(option_separator, option_quoting)
|
24
24
|
components = [
|
25
25
|
@subcommand,
|
26
26
|
map_and_join(
|
27
|
-
@
|
27
|
+
@options,
|
28
28
|
&(quote_with(option_quoting) >> join_with(option_separator))
|
29
29
|
)
|
30
30
|
]
|
@@ -40,7 +40,7 @@ module Lino
|
|
40
40
|
def state
|
41
41
|
{
|
42
42
|
subcommand: @subcommand,
|
43
|
-
|
43
|
+
options: @options
|
44
44
|
}
|
45
45
|
end
|
46
46
|
end
|
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:
|
4
|
+
version: 2.0.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-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: hamster
|
@@ -224,8 +224,8 @@ files:
|
|
224
224
|
- lib/lino.rb
|
225
225
|
- lib/lino/command_line.rb
|
226
226
|
- lib/lino/command_line_builder.rb
|
227
|
+
- lib/lino/options.rb
|
227
228
|
- lib/lino/subcommand_builder.rb
|
228
|
-
- lib/lino/switches.rb
|
229
229
|
- lib/lino/utilities.rb
|
230
230
|
- lib/lino/version.rb
|
231
231
|
homepage: https://github.com/infrablocks/lino
|
data/lib/lino/switches.rb
DELETED
@@ -1,34 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Lino
|
4
|
-
module Switches
|
5
|
-
def with_option(switch, value, separator: nil, quoting: nil)
|
6
|
-
with(switches: add_option(switch, value, separator, quoting))
|
7
|
-
end
|
8
|
-
|
9
|
-
def with_repeated_option(switch, values, separator: nil, quoting: nil)
|
10
|
-
values.each do |value|
|
11
|
-
add_option(switch, value, separator, quoting)
|
12
|
-
end
|
13
|
-
with({})
|
14
|
-
end
|
15
|
-
|
16
|
-
def with_flag(flag)
|
17
|
-
with(switches: @switches.add({ components: [flag] }))
|
18
|
-
end
|
19
|
-
|
20
|
-
private
|
21
|
-
|
22
|
-
def add_option(switch, value, separator, quoting)
|
23
|
-
return @switches if missing?(value)
|
24
|
-
|
25
|
-
@switches = @switches.add(
|
26
|
-
{
|
27
|
-
components: [switch, value],
|
28
|
-
separator: separator,
|
29
|
-
quoting: quoting
|
30
|
-
}
|
31
|
-
)
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|