lino 2.1.0 → 2.2.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 +34 -1
- data/lib/lino/command_line_builder.rb +42 -12
- data/lib/lino/version.rb +1 -1
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f6b8d73d1b83fd4e09bd2cd61bcc0b0717bb14c43976688dbe26d7b84037f725
|
4
|
+
data.tar.gz: b1e0ee813a1300a0935a78eaa224677ec60d36181a573e3f4a0ec0e9fb426c61
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e78ac95f2c066ca9de9b1b04aceae7ab7ed0a744df486558414abfb8bf725f3bb3a9f37c53220fbd68b7a5bbb2ec9d0eb98da2e40d08943692ac07a7799f0a07
|
7
|
+
data.tar.gz: 1697191e1593ceef0785913ec5091ba06cad2af156ba97db7196157da9bf017cfc710d434b71012a44b3470c059669a86f06b1e5fdb865593437ab89a4d662dc
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -79,7 +79,7 @@ Lino::CommandLineBuilder.for_command('diff')
|
|
79
79
|
|
80
80
|
# => diff ./file1.txt ./file2.txt
|
81
81
|
|
82
|
-
#
|
82
|
+
# ... or alternatively
|
83
83
|
Lino::CommandLineBuilder.for_command('diff')
|
84
84
|
.with_arguments(['./file1.txt', nil, '', './file2.txt'])
|
85
85
|
.build
|
@@ -142,6 +142,39 @@ Lino::CommandLineBuilder.for_command('node')
|
|
142
142
|
.to_s
|
143
143
|
|
144
144
|
# => PORT=3030 LOG_LEVEL=debug node ./server.js
|
145
|
+
|
146
|
+
# note: by default, options are placed after the command, before all subcommands
|
147
|
+
# and arguments
|
148
|
+
|
149
|
+
# this can be expressed explicitly
|
150
|
+
Lino::CommandLineBuilder.for_command('gcloud')
|
151
|
+
.with_options_after_command
|
152
|
+
.with_option('--password', 'super-secure')
|
153
|
+
.with_subcommands(%w[sql instances set-root-password some-database])
|
154
|
+
.build
|
155
|
+
.to_s
|
156
|
+
|
157
|
+
# => gcloud --password super-secure sql instances set-root-password some-database
|
158
|
+
|
159
|
+
# options can also come after subcommands
|
160
|
+
Lino::CommandLineBuilder.for_command('gcloud')
|
161
|
+
.with_options_after_subcommands
|
162
|
+
.with_option('--password', 'super-secure')
|
163
|
+
.with_subcommands(%w[sql instances set-root-password some-database])
|
164
|
+
.build
|
165
|
+
.to_s
|
166
|
+
|
167
|
+
# => gcloud sql instances set-root-password some-database --password super-secure
|
168
|
+
|
169
|
+
# options can also come after arguments, although usages of this are rare
|
170
|
+
Lino::CommandLineBuilder.for_command('ls')
|
171
|
+
.with_options_after_arguments
|
172
|
+
.with_flag('-l')
|
173
|
+
.with_argument('/some/directory')
|
174
|
+
.build
|
175
|
+
.to_s
|
176
|
+
|
177
|
+
# => ls /some/directory -l
|
145
178
|
```
|
146
179
|
|
147
180
|
### `Lino::CommandLine`
|
@@ -9,6 +9,15 @@ require_relative 'options'
|
|
9
9
|
module Lino
|
10
10
|
# rubocop:disable Metrics/ClassLength
|
11
11
|
class CommandLineBuilder
|
12
|
+
SELECTORS = {
|
13
|
+
after_command:
|
14
|
+
%i[environment_variables command options subcommands arguments],
|
15
|
+
after_subcommands:
|
16
|
+
%i[environment_variables command subcommands options arguments],
|
17
|
+
after_arguments:
|
18
|
+
%i[environment_variables command subcommands arguments options]
|
19
|
+
}.freeze
|
20
|
+
|
12
21
|
include Lino::Utilities
|
13
22
|
include Lino::Options
|
14
23
|
|
@@ -26,7 +35,8 @@ module Lino
|
|
26
35
|
arguments: [],
|
27
36
|
environment_variables: [],
|
28
37
|
option_separator: ' ',
|
29
|
-
option_quoting: nil
|
38
|
+
option_quoting: nil,
|
39
|
+
option_placement: :after_command
|
30
40
|
)
|
31
41
|
@command = command
|
32
42
|
@subcommands = Hamster::Vector.new(subcommands)
|
@@ -35,6 +45,7 @@ module Lino
|
|
35
45
|
@environment_variables = Hamster::Vector.new(environment_variables)
|
36
46
|
@option_separator = option_separator
|
37
47
|
@option_quoting = option_quoting
|
48
|
+
@option_placement = option_placement
|
38
49
|
end
|
39
50
|
# rubocop:enable Metrics/ParameterLists
|
40
51
|
|
@@ -65,6 +76,18 @@ module Lino
|
|
65
76
|
with(option_quoting: character)
|
66
77
|
end
|
67
78
|
|
79
|
+
def with_options_after_command
|
80
|
+
with(option_placement: :after_command)
|
81
|
+
end
|
82
|
+
|
83
|
+
def with_options_after_subcommands
|
84
|
+
with(option_placement: :after_subcommands)
|
85
|
+
end
|
86
|
+
|
87
|
+
def with_options_after_arguments
|
88
|
+
with(option_placement: :after_arguments)
|
89
|
+
end
|
90
|
+
|
68
91
|
def with_argument(argument)
|
69
92
|
return self if missing?(argument)
|
70
93
|
|
@@ -87,21 +110,27 @@ module Lino
|
|
87
110
|
end
|
88
111
|
|
89
112
|
def build
|
90
|
-
components =
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
formatted_arguments
|
96
|
-
]
|
113
|
+
components = formatted_components
|
114
|
+
command_line = SELECTORS[@option_placement]
|
115
|
+
.inject([]) { |c, key| c << components[key] }
|
116
|
+
.reject(&:empty?)
|
117
|
+
.join(' ')
|
97
118
|
|
98
|
-
|
99
|
-
|
100
|
-
CommandLine.new(command_string)
|
119
|
+
CommandLine.new(command_line)
|
101
120
|
end
|
102
121
|
|
103
122
|
private
|
104
123
|
|
124
|
+
def formatted_components
|
125
|
+
{
|
126
|
+
environment_variables: formatted_environment_variables,
|
127
|
+
command: @command,
|
128
|
+
options: formatted_options,
|
129
|
+
subcommands: formatted_subcommands,
|
130
|
+
arguments: formatted_arguments
|
131
|
+
}
|
132
|
+
end
|
133
|
+
|
105
134
|
def formatted_environment_variables
|
106
135
|
map_and_join(@environment_variables) do |var|
|
107
136
|
"#{var[0]}=\"#{var[1].to_s.gsub(/"/, '\\"')}\""
|
@@ -140,7 +169,8 @@ module Lino
|
|
140
169
|
arguments: @arguments,
|
141
170
|
environment_variables: @environment_variables,
|
142
171
|
option_separator: @option_separator,
|
143
|
-
option_quoting: @option_quoting
|
172
|
+
option_quoting: @option_quoting,
|
173
|
+
option_placement: @option_placement
|
144
174
|
}
|
145
175
|
end
|
146
176
|
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: 2.
|
4
|
+
version: 2.2.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-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: hamster
|
@@ -243,9 +243,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
243
243
|
version: '2.6'
|
244
244
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
245
245
|
requirements:
|
246
|
-
- - "
|
246
|
+
- - ">"
|
247
247
|
- !ruby/object:Gem::Version
|
248
|
-
version:
|
248
|
+
version: 1.3.1
|
249
249
|
requirements: []
|
250
250
|
rubygems_version: 3.0.1
|
251
251
|
signing_key:
|