toys-core 0.12.2 → 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 +22 -0
- data/LICENSE.md +1 -1
- data/README.md +4 -1
- data/docs/guide.md +1 -1
- data/lib/toys/acceptor.rb +10 -1
- data/lib/toys/arg_parser.rb +1 -0
- data/lib/toys/cli.rb +127 -107
- data/lib/toys/compat.rb +54 -3
- data/lib/toys/completion.rb +15 -5
- data/lib/toys/context.rb +22 -20
- data/lib/toys/core.rb +6 -2
- data/lib/toys/dsl/base.rb +2 -0
- data/lib/toys/dsl/flag.rb +23 -17
- data/lib/toys/dsl/flag_group.rb +11 -7
- data/lib/toys/dsl/positional_arg.rb +23 -13
- data/lib/toys/dsl/tool.rb +10 -6
- data/lib/toys/errors.rb +63 -8
- data/lib/toys/flag.rb +660 -651
- data/lib/toys/flag_group.rb +19 -6
- data/lib/toys/input_file.rb +9 -3
- data/lib/toys/loader.rb +129 -115
- data/lib/toys/middleware.rb +45 -21
- data/lib/toys/mixin.rb +8 -6
- data/lib/toys/positional_arg.rb +18 -17
- data/lib/toys/settings.rb +81 -67
- data/lib/toys/source_info.rb +33 -24
- data/lib/toys/standard_middleware/add_verbosity_flags.rb +2 -0
- data/lib/toys/standard_middleware/apply_config.rb +1 -0
- data/lib/toys/standard_middleware/handle_usage_errors.rb +1 -0
- data/lib/toys/standard_middleware/set_default_descriptions.rb +1 -0
- data/lib/toys/standard_middleware/show_help.rb +2 -0
- data/lib/toys/standard_middleware/show_root_version.rb +2 -0
- data/lib/toys/standard_mixins/bundler.rb +22 -14
- data/lib/toys/standard_mixins/exec.rb +31 -20
- 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 +5 -7
- 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 +5 -5
- data/lib/toys/template.rb +9 -7
- data/lib/toys/tool_definition.rb +209 -202
- data/lib/toys/utils/completion_engine.rb +7 -2
- data/lib/toys/utils/exec.rb +158 -127
- data/lib/toys/utils/gems.rb +81 -57
- data/lib/toys/utils/git_cache.rb +674 -45
- data/lib/toys/utils/help_text.rb +27 -3
- data/lib/toys/utils/terminal.rb +10 -2
- data/lib/toys/wrappable_string.rb +9 -2
- data/lib/toys-core.rb +14 -5
- metadata +4 -4
data/lib/toys/dsl/flag.rb
CHANGED
@@ -22,22 +22,6 @@ module Toys
|
|
22
22
|
# end
|
23
23
|
#
|
24
24
|
class Flag
|
25
|
-
## @private
|
26
|
-
def initialize(flags, acceptor, default, handler, flag_completion, value_completion,
|
27
|
-
report_collisions, group, desc, long_desc, display_name)
|
28
|
-
@flags = flags
|
29
|
-
@default = default
|
30
|
-
@handler = handler
|
31
|
-
@report_collisions = report_collisions
|
32
|
-
@group = group
|
33
|
-
@desc = desc
|
34
|
-
@long_desc = long_desc || []
|
35
|
-
@display_name = display_name
|
36
|
-
accept(acceptor)
|
37
|
-
complete_flags(flag_completion, **{})
|
38
|
-
complete_values(value_completion, **{})
|
39
|
-
end
|
40
|
-
|
41
25
|
##
|
42
26
|
# Add flags in OptionParser format. This may be called multiple times,
|
43
27
|
# and the results are cumulative.
|
@@ -284,7 +268,29 @@ module Toys
|
|
284
268
|
self
|
285
269
|
end
|
286
270
|
|
287
|
-
##
|
271
|
+
##
|
272
|
+
# Called only from DSL::Tool
|
273
|
+
#
|
274
|
+
# @private
|
275
|
+
#
|
276
|
+
def initialize(flags, acceptor, default, handler, flag_completion, value_completion,
|
277
|
+
report_collisions, group, desc, long_desc, display_name)
|
278
|
+
@flags = flags
|
279
|
+
@default = default
|
280
|
+
@handler = handler
|
281
|
+
@report_collisions = report_collisions
|
282
|
+
@group = group
|
283
|
+
@desc = desc
|
284
|
+
@long_desc = long_desc || []
|
285
|
+
@display_name = display_name
|
286
|
+
accept(acceptor)
|
287
|
+
complete_flags(flag_completion, **{})
|
288
|
+
complete_values(value_completion, **{})
|
289
|
+
end
|
290
|
+
|
291
|
+
##
|
292
|
+
# @private
|
293
|
+
#
|
288
294
|
def _add_to(tool, key)
|
289
295
|
tool.add_flag(key, @flags,
|
290
296
|
accept: @acceptor, default: @default, handler: @handler,
|
data/lib/toys/dsl/flag_group.rb
CHANGED
@@ -22,13 +22,6 @@ module Toys
|
|
22
22
|
# end
|
23
23
|
#
|
24
24
|
class FlagGroup
|
25
|
-
## @private
|
26
|
-
def initialize(tool_dsl, tool, flag_group)
|
27
|
-
@tool_dsl = tool_dsl
|
28
|
-
@tool = tool
|
29
|
-
@flag_group = flag_group
|
30
|
-
end
|
31
|
-
|
32
25
|
##
|
33
26
|
# Add a flag to the current group. Each flag must specify a key which
|
34
27
|
# the script may use to obtain the flag value from the context.
|
@@ -268,6 +261,17 @@ module Toys
|
|
268
261
|
@flag_group.append_long_desc(long_desc)
|
269
262
|
self
|
270
263
|
end
|
264
|
+
|
265
|
+
##
|
266
|
+
# Called only from DSL::Tool.
|
267
|
+
#
|
268
|
+
# @private
|
269
|
+
#
|
270
|
+
def initialize(tool_dsl, tool, flag_group)
|
271
|
+
@tool_dsl = tool_dsl
|
272
|
+
@tool = tool
|
273
|
+
@flag_group = flag_group
|
274
|
+
end
|
271
275
|
end
|
272
276
|
end
|
273
277
|
end
|
@@ -22,16 +22,6 @@ module Toys
|
|
22
22
|
# end
|
23
23
|
#
|
24
24
|
class PositionalArg
|
25
|
-
## @private
|
26
|
-
def initialize(acceptor, default, completion, display_name, desc, long_desc)
|
27
|
-
@default = default
|
28
|
-
@display_name = display_name
|
29
|
-
@desc = desc
|
30
|
-
@long_desc = long_desc || []
|
31
|
-
accept(acceptor, **{})
|
32
|
-
complete(completion, **{})
|
33
|
-
end
|
34
|
-
|
35
25
|
##
|
36
26
|
# Set the acceptor for this argument's values.
|
37
27
|
# You can pass either the string name of an acceptor defined in this tool
|
@@ -151,21 +141,41 @@ module Toys
|
|
151
141
|
self
|
152
142
|
end
|
153
143
|
|
154
|
-
##
|
144
|
+
##
|
145
|
+
# Called only from DSL::Tool
|
146
|
+
#
|
147
|
+
# @private
|
148
|
+
#
|
149
|
+
def initialize(acceptor, default, completion, display_name, desc, long_desc)
|
150
|
+
@default = default
|
151
|
+
@display_name = display_name
|
152
|
+
@desc = desc
|
153
|
+
@long_desc = long_desc || []
|
154
|
+
accept(acceptor, **{})
|
155
|
+
complete(completion, **{})
|
156
|
+
end
|
157
|
+
|
158
|
+
##
|
159
|
+
# @private
|
160
|
+
#
|
155
161
|
def _add_required_to(tool, key)
|
156
162
|
tool.add_required_arg(key,
|
157
163
|
accept: @acceptor, complete: @completion,
|
158
164
|
display_name: @display_name, desc: @desc, long_desc: @long_desc)
|
159
165
|
end
|
160
166
|
|
161
|
-
##
|
167
|
+
##
|
168
|
+
# @private
|
169
|
+
#
|
162
170
|
def _add_optional_to(tool, key)
|
163
171
|
tool.add_optional_arg(key,
|
164
172
|
accept: @acceptor, default: @default, complete: @completion,
|
165
173
|
display_name: @display_name, desc: @desc, long_desc: @long_desc)
|
166
174
|
end
|
167
175
|
|
168
|
-
##
|
176
|
+
##
|
177
|
+
# @private
|
178
|
+
#
|
169
179
|
def _set_remaining_on(tool, key)
|
170
180
|
tool.set_remaining_args(key,
|
171
181
|
accept: @acceptor, default: @default, complete: @completion,
|
data/lib/toys/dsl/tool.rb
CHANGED
@@ -34,12 +34,6 @@ module Toys
|
|
34
34
|
# toys greet rubyists
|
35
35
|
#
|
36
36
|
module Tool
|
37
|
-
## @private
|
38
|
-
def method_added(_meth)
|
39
|
-
super
|
40
|
-
DSL::Internal.current_tool(self, true)&.check_definition_state(is_method: true)
|
41
|
-
end
|
42
|
-
|
43
37
|
##
|
44
38
|
# Create a named acceptor that can be referenced by name from any flag or
|
45
39
|
# positional argument in this tool or its subtools.
|
@@ -1717,6 +1711,16 @@ module Toys
|
|
1717
1711
|
end
|
1718
1712
|
self
|
1719
1713
|
end
|
1714
|
+
|
1715
|
+
##
|
1716
|
+
# Notify the tool definition when a method is defined in this tool class.
|
1717
|
+
#
|
1718
|
+
# @private
|
1719
|
+
#
|
1720
|
+
def method_added(_meth)
|
1721
|
+
super
|
1722
|
+
DSL::Internal.current_tool(self, true)&.check_definition_state(is_method: true)
|
1723
|
+
end
|
1720
1724
|
end
|
1721
1725
|
end
|
1722
1726
|
end
|
data/lib/toys/errors.rb
CHANGED
@@ -40,10 +40,13 @@ module Toys
|
|
40
40
|
end
|
41
41
|
|
42
42
|
##
|
43
|
-
# A wrapper exception used to provide user-oriented context for an
|
43
|
+
# A wrapper exception used to provide user-oriented context for an error
|
44
|
+
# thrown during tool execution.
|
44
45
|
#
|
45
46
|
class ContextualError < ::StandardError
|
46
|
-
##
|
47
|
+
##
|
48
|
+
# @private
|
49
|
+
#
|
47
50
|
def initialize(cause, banner,
|
48
51
|
config_path: nil, config_line: nil,
|
49
52
|
tool_name: nil, tool_args: nil)
|
@@ -57,16 +60,66 @@ module Toys
|
|
57
60
|
set_backtrace(cause.backtrace)
|
58
61
|
end
|
59
62
|
|
63
|
+
##
|
64
|
+
# The underlying exception
|
65
|
+
# @return [::StandardError]
|
66
|
+
#
|
60
67
|
attr_reader :cause
|
68
|
+
|
69
|
+
##
|
70
|
+
# An overall banner message
|
71
|
+
# @return [String]
|
72
|
+
#
|
61
73
|
attr_reader :banner
|
62
74
|
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
75
|
+
##
|
76
|
+
# The path to the toys config file in which the error was detected
|
77
|
+
# @return [String]
|
78
|
+
#
|
79
|
+
attr_reader :config_path
|
80
|
+
|
81
|
+
##
|
82
|
+
# The line number in the toys config file in which the error was detected
|
83
|
+
# @return [Integer]
|
84
|
+
#
|
85
|
+
attr_reader :config_line
|
86
|
+
|
87
|
+
##
|
88
|
+
# The full name of the tool that was running when the error occurred
|
89
|
+
# @return [Array<String>]
|
90
|
+
#
|
91
|
+
attr_reader :tool_name
|
92
|
+
|
93
|
+
##
|
94
|
+
# The arguments passed to the tool that was running when the error occurred
|
95
|
+
# @return [Array<String>]
|
96
|
+
#
|
97
|
+
attr_reader :tool_args
|
98
|
+
|
99
|
+
##
|
100
|
+
# @private
|
101
|
+
#
|
102
|
+
attr_writer :config_path
|
103
|
+
|
104
|
+
##
|
105
|
+
# @private
|
106
|
+
#
|
107
|
+
attr_writer :config_line
|
108
|
+
|
109
|
+
##
|
110
|
+
# @private
|
111
|
+
#
|
112
|
+
attr_writer :tool_name
|
113
|
+
|
114
|
+
##
|
115
|
+
# @private
|
116
|
+
#
|
117
|
+
attr_writer :tool_args
|
67
118
|
|
68
119
|
class << self
|
69
|
-
##
|
120
|
+
##
|
121
|
+
# @private
|
122
|
+
#
|
70
123
|
def capture_path(banner, path, **opts)
|
71
124
|
yield
|
72
125
|
rescue ContextualError => e
|
@@ -86,7 +139,9 @@ module Toys
|
|
86
139
|
raise e
|
87
140
|
end
|
88
141
|
|
89
|
-
##
|
142
|
+
##
|
143
|
+
# @private
|
144
|
+
#
|
90
145
|
def capture(banner, **opts)
|
91
146
|
yield
|
92
147
|
rescue ContextualError => e
|