toys-core 0.11.5 → 0.13.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +62 -0
- data/LICENSE.md +1 -1
- data/README.md +5 -2
- data/docs/guide.md +1 -1
- data/lib/toys/acceptor.rb +13 -4
- data/lib/toys/arg_parser.rb +7 -7
- data/lib/toys/cli.rb +170 -120
- data/lib/toys/compat.rb +71 -23
- data/lib/toys/completion.rb +18 -6
- data/lib/toys/context.rb +24 -15
- data/lib/toys/core.rb +6 -2
- data/lib/toys/dsl/base.rb +87 -0
- data/lib/toys/dsl/flag.rb +26 -20
- data/lib/toys/dsl/flag_group.rb +18 -14
- data/lib/toys/dsl/internal.rb +206 -0
- data/lib/toys/dsl/positional_arg.rb +26 -16
- data/lib/toys/dsl/tool.rb +180 -218
- data/lib/toys/errors.rb +64 -8
- data/lib/toys/flag.rb +662 -656
- data/lib/toys/flag_group.rb +24 -10
- data/lib/toys/input_file.rb +13 -7
- data/lib/toys/loader.rb +293 -140
- data/lib/toys/middleware.rb +46 -22
- data/lib/toys/mixin.rb +10 -8
- data/lib/toys/positional_arg.rb +21 -20
- data/lib/toys/settings.rb +914 -0
- data/lib/toys/source_info.rb +147 -35
- data/lib/toys/standard_middleware/add_verbosity_flags.rb +2 -0
- data/lib/toys/standard_middleware/apply_config.rb +6 -4
- data/lib/toys/standard_middleware/handle_usage_errors.rb +1 -0
- data/lib/toys/standard_middleware/set_default_descriptions.rb +19 -18
- data/lib/toys/standard_middleware/show_help.rb +19 -5
- data/lib/toys/standard_middleware/show_root_version.rb +2 -0
- data/lib/toys/standard_mixins/bundler.rb +24 -15
- data/lib/toys/standard_mixins/exec.rb +43 -34
- data/lib/toys/standard_mixins/fileutils.rb +3 -1
- data/lib/toys/standard_mixins/gems.rb +21 -17
- data/lib/toys/standard_mixins/git_cache.rb +46 -0
- data/lib/toys/standard_mixins/highline.rb +8 -8
- data/lib/toys/standard_mixins/terminal.rb +5 -5
- data/lib/toys/standard_mixins/xdg.rb +56 -0
- data/lib/toys/template.rb +11 -9
- data/lib/toys/{tool.rb → tool_definition.rb} +292 -226
- data/lib/toys/utils/completion_engine.rb +7 -2
- data/lib/toys/utils/exec.rb +162 -132
- data/lib/toys/utils/gems.rb +85 -60
- data/lib/toys/utils/git_cache.rb +813 -0
- data/lib/toys/utils/help_text.rb +117 -37
- data/lib/toys/utils/terminal.rb +11 -3
- data/lib/toys/utils/xdg.rb +293 -0
- data/lib/toys/wrappable_string.rb +9 -2
- data/lib/toys-core.rb +18 -6
- metadata +14 -7
data/lib/toys/flag_group.rb
CHANGED
@@ -17,11 +17,12 @@ module Toys
|
|
17
17
|
#
|
18
18
|
# @param type [Symbol] The type of group. Default is `:optional`.
|
19
19
|
# @param desc [String,Array<String>,Toys::WrappableString] Short
|
20
|
-
# description for the group. See {Toys::
|
21
|
-
# of allowed formats. Defaults to `"Flags"`.
|
20
|
+
# description for the group. See {Toys::ToolDefinition#desc} for a
|
21
|
+
# description of allowed formats. Defaults to `"Flags"`.
|
22
22
|
# @param long_desc [Array<String,Array<String>,Toys::WrappableString>]
|
23
|
-
# Long description for the flag group. See
|
24
|
-
# a description of allowed
|
23
|
+
# Long description for the flag group. See
|
24
|
+
# {Toys::ToolDefinition#long_desc} for a description of allowed
|
25
|
+
# formats. Defaults to the empty array.
|
25
26
|
# @param name [String,Symbol,nil] The name of the group, or nil for no
|
26
27
|
# name.
|
27
28
|
# @return [Toys::FlagGroup::Base] A flag group of the correct subclass.
|
@@ -55,6 +56,7 @@ module Toys
|
|
55
56
|
# Create a flag group.
|
56
57
|
# This argument list is subject to change. Use {Toys::FlagGroup.create}
|
57
58
|
# instead for a more stable interface.
|
59
|
+
#
|
58
60
|
# @private
|
59
61
|
#
|
60
62
|
def initialize(name, desc, long_desc)
|
@@ -167,12 +169,16 @@ module Toys
|
|
167
169
|
self
|
168
170
|
end
|
169
171
|
|
170
|
-
##
|
172
|
+
##
|
173
|
+
# @private
|
174
|
+
#
|
171
175
|
def <<(flag)
|
172
176
|
flags << flag
|
173
177
|
end
|
174
178
|
|
175
|
-
##
|
179
|
+
##
|
180
|
+
# @private
|
181
|
+
#
|
176
182
|
def validation_errors(_seen)
|
177
183
|
[]
|
178
184
|
end
|
@@ -182,7 +188,9 @@ module Toys
|
|
182
188
|
# A FlagGroup containing all required flags
|
183
189
|
#
|
184
190
|
class Required < Base
|
185
|
-
##
|
191
|
+
##
|
192
|
+
# @private
|
193
|
+
#
|
186
194
|
def validation_errors(seen)
|
187
195
|
results = []
|
188
196
|
flags.each do |flag|
|
@@ -205,7 +213,9 @@ module Toys
|
|
205
213
|
# A FlagGroup in which exactly one flag must be set
|
206
214
|
#
|
207
215
|
class ExactlyOne < Base
|
208
|
-
##
|
216
|
+
##
|
217
|
+
# @private
|
218
|
+
#
|
209
219
|
def validation_errors(seen)
|
210
220
|
seen_names = []
|
211
221
|
flags.each do |flag|
|
@@ -228,7 +238,9 @@ module Toys
|
|
228
238
|
# A FlagGroup in which at most one flag must be set
|
229
239
|
#
|
230
240
|
class AtMostOne < Base
|
231
|
-
##
|
241
|
+
##
|
242
|
+
# @private
|
243
|
+
#
|
232
244
|
def validation_errors(seen)
|
233
245
|
seen_names = []
|
234
246
|
flags.each do |flag|
|
@@ -248,7 +260,9 @@ module Toys
|
|
248
260
|
# A FlagGroup in which at least one flag must be set
|
249
261
|
#
|
250
262
|
class AtLeastOne < Base
|
251
|
-
##
|
263
|
+
##
|
264
|
+
# @private
|
265
|
+
#
|
252
266
|
def validation_errors(seen)
|
253
267
|
flags.each do |flag|
|
254
268
|
return [] if seen.include?(flag.key)
|
data/lib/toys/input_file.rb
CHANGED
@@ -5,17 +5,21 @@
|
|
5
5
|
# is parsed, a module is created under this parent for that file's constants.
|
6
6
|
#
|
7
7
|
module Toys::InputFile # rubocop:disable Style/ClassAndModuleChildren
|
8
|
-
##
|
8
|
+
##
|
9
|
+
# @private
|
10
|
+
#
|
9
11
|
def self.__binding
|
10
12
|
binding
|
11
13
|
end
|
12
14
|
|
13
|
-
##
|
14
|
-
|
15
|
+
##
|
16
|
+
# @private
|
17
|
+
#
|
18
|
+
def self.evaluate(tool_class, words, priority, remaining_words, source, loader)
|
15
19
|
namespace = ::Module.new
|
16
20
|
namespace.module_eval do
|
17
21
|
include ::Toys::Context::Key
|
18
|
-
@
|
22
|
+
@__tool_class = tool_class
|
19
23
|
end
|
20
24
|
path = source.source_path
|
21
25
|
basename = ::File.basename(path).tr(".-", "_").gsub(/\W/, "")
|
@@ -23,7 +27,7 @@ module Toys::InputFile # rubocop:disable Style/ClassAndModuleChildren
|
|
23
27
|
str = build_eval_string(name, ::IO.read(path))
|
24
28
|
if str
|
25
29
|
const_set(name, namespace)
|
26
|
-
::Toys::DSL::
|
30
|
+
::Toys::DSL::Internal.prepare(tool_class, words, priority, remaining_words, source, loader) do
|
27
31
|
::Toys::ContextualError.capture_path("Error while loading Toys config!", path) do
|
28
32
|
# rubocop:disable Security/Eval
|
29
33
|
eval(str, __binding, path, -2)
|
@@ -33,13 +37,15 @@ module Toys::InputFile # rubocop:disable Style/ClassAndModuleChildren
|
|
33
37
|
end
|
34
38
|
end
|
35
39
|
|
36
|
-
##
|
40
|
+
##
|
41
|
+
# @private
|
42
|
+
#
|
37
43
|
def self.build_eval_string(module_name, string)
|
38
44
|
index = string.index(/^\s*[^#\s]/)
|
39
45
|
return nil if index.nil?
|
40
46
|
"#{string[0, index]}\n" \
|
41
47
|
"module #{module_name}\n" \
|
42
|
-
"@
|
48
|
+
"@__tool_class.class_eval do\n" \
|
43
49
|
"#{string[index..-1]}\n" \
|
44
50
|
"end\n" \
|
45
51
|
"end\n"
|