toys-core 0.7.0 → 0.8.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.
Files changed (59) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +98 -0
  3. data/LICENSE.md +16 -24
  4. data/README.md +307 -59
  5. data/docs/guide.md +44 -4
  6. data/lib/toys-core.rb +58 -49
  7. data/lib/toys/acceptor.rb +672 -0
  8. data/lib/toys/alias.rb +106 -0
  9. data/lib/toys/arg_parser.rb +624 -0
  10. data/lib/toys/cli.rb +422 -181
  11. data/lib/toys/compat.rb +83 -0
  12. data/lib/toys/completion.rb +442 -0
  13. data/lib/toys/context.rb +354 -0
  14. data/lib/toys/core_version.rb +18 -26
  15. data/lib/toys/dsl/flag.rb +213 -56
  16. data/lib/toys/dsl/flag_group.rb +237 -51
  17. data/lib/toys/dsl/positional_arg.rb +210 -0
  18. data/lib/toys/dsl/tool.rb +968 -317
  19. data/lib/toys/errors.rb +46 -28
  20. data/lib/toys/flag.rb +821 -0
  21. data/lib/toys/flag_group.rb +282 -0
  22. data/lib/toys/input_file.rb +18 -26
  23. data/lib/toys/loader.rb +110 -100
  24. data/lib/toys/middleware.rb +24 -31
  25. data/lib/toys/mixin.rb +90 -59
  26. data/lib/toys/module_lookup.rb +125 -0
  27. data/lib/toys/positional_arg.rb +184 -0
  28. data/lib/toys/source_info.rb +192 -0
  29. data/lib/toys/standard_middleware/add_verbosity_flags.rb +38 -43
  30. data/lib/toys/standard_middleware/handle_usage_errors.rb +39 -40
  31. data/lib/toys/standard_middleware/set_default_descriptions.rb +111 -89
  32. data/lib/toys/standard_middleware/show_help.rb +130 -113
  33. data/lib/toys/standard_middleware/show_root_version.rb +29 -35
  34. data/lib/toys/standard_mixins/exec.rb +116 -78
  35. data/lib/toys/standard_mixins/fileutils.rb +16 -24
  36. data/lib/toys/standard_mixins/gems.rb +29 -30
  37. data/lib/toys/standard_mixins/highline.rb +34 -41
  38. data/lib/toys/standard_mixins/terminal.rb +72 -26
  39. data/lib/toys/template.rb +51 -35
  40. data/lib/toys/tool.rb +1161 -206
  41. data/lib/toys/utils/completion_engine.rb +171 -0
  42. data/lib/toys/utils/exec.rb +279 -182
  43. data/lib/toys/utils/gems.rb +58 -49
  44. data/lib/toys/utils/help_text.rb +117 -111
  45. data/lib/toys/utils/terminal.rb +69 -62
  46. data/lib/toys/wrappable_string.rb +162 -0
  47. metadata +24 -22
  48. data/lib/toys/definition/acceptor.rb +0 -191
  49. data/lib/toys/definition/alias.rb +0 -112
  50. data/lib/toys/definition/arg.rb +0 -140
  51. data/lib/toys/definition/flag.rb +0 -370
  52. data/lib/toys/definition/flag_group.rb +0 -205
  53. data/lib/toys/definition/source_info.rb +0 -190
  54. data/lib/toys/definition/tool.rb +0 -842
  55. data/lib/toys/dsl/arg.rb +0 -132
  56. data/lib/toys/runner.rb +0 -188
  57. data/lib/toys/standard_middleware.rb +0 -47
  58. data/lib/toys/utils/module_lookup.rb +0 -135
  59. data/lib/toys/utils/wrappable_string.rb +0 -165
@@ -1,32 +1,24 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright 2018 Daniel Azuma
3
+ # Copyright 2019 Daniel Azuma
4
4
  #
5
- # All rights reserved.
5
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ # of this software and associated documentation files (the "Software"), to deal
7
+ # in the Software without restriction, including without limitation the rights
8
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ # copies of the Software, and to permit persons to whom the Software is
10
+ # furnished to do so, subject to the following conditions:
6
11
  #
7
- # Redistribution and use in source and binary forms, with or without
8
- # modification, are permitted provided that the following conditions are met:
12
+ # The above copyright notice and this permission notice shall be included in
13
+ # all copies or substantial portions of the Software.
9
14
  #
10
- # * Redistributions of source code must retain the above copyright notice,
11
- # this list of conditions and the following disclaimer.
12
- # * Redistributions in binary form must reproduce the above copyright notice,
13
- # this list of conditions and the following disclaimer in the documentation
14
- # and/or other materials provided with the distribution.
15
- # * Neither the name of the copyright holder, nor the names of any other
16
- # contributors to this software, may be used to endorse or promote products
17
- # derived from this software without specific prior written permission.
18
- #
19
- # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
20
- # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21
- # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22
- # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
23
- # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24
- # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25
- # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26
- # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27
- # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28
- # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29
- # POSSIBILITY OF SUCH DAMAGE.
15
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20
+ # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
21
+ # IN THE SOFTWARE.
30
22
  ;
31
23
 
32
24
  require "stringio"
@@ -48,11 +40,11 @@ module Toys
48
40
  # This class supports ANSI styled output where supported.
49
41
  #
50
42
  # Styles may be specified in any of the following forms:
51
- # * A symbol indicating the name of a well-known style, or the name of
43
+ # * A symbol indicating the name of a well-known style, or the name of
52
44
  # a defined style.
53
- # * An rgb string in hex "rgb" or "rrggbb" form.
54
- # * An ANSI code string in `\e[XXm` form.
55
- # * An array of ANSI codes as integers.
45
+ # * An rgb string in hex "rgb" or "rrggbb" form.
46
+ # * An ANSI code string in `\e[XXm` form.
47
+ # * An array of ANSI codes as integers.
56
48
  #
57
49
  class Terminal
58
50
  ##
@@ -61,10 +53,16 @@ module Toys
61
53
  class TerminalError < ::StandardError
62
54
  end
63
55
 
64
- ## ANSI style code to clear styles
56
+ ##
57
+ # ANSI style code to clear styles
58
+ # @return [String]
59
+ #
65
60
  CLEAR_CODE = "\e[0m"
66
61
 
67
- ## Standard ANSI style codes
62
+ ##
63
+ # Standard ANSI style codes by name.
64
+ # @return [Hash{Symbol => Array<Integer>}]
65
+ #
68
66
  BUILTIN_STYLE_NAMES = {
69
67
  clear: [0],
70
68
  reset: [0],
@@ -105,7 +103,7 @@ module Toys
105
103
  on_bright_blue: [104],
106
104
  on_bright_magenta: [105],
107
105
  on_bright_cyan: [106],
108
- on_bright_white: [107]
106
+ on_bright_white: [107],
109
107
  }.freeze
110
108
 
111
109
  ##
@@ -123,7 +121,7 @@ module Toys
123
121
  ##
124
122
  # Returns a copy of the given string with all ANSI style codes removed.
125
123
  #
126
- # @param [String] str Input string
124
+ # @param str [String] Input string
127
125
  # @return [String] String with styles removed
128
126
  #
129
127
  def self.remove_style_escapes(str)
@@ -133,12 +131,12 @@ module Toys
133
131
  ##
134
132
  # Create a terminal.
135
133
  #
136
- # @param [IO,Logger,nil] output Output stream or logger.
137
- # @param [IO,nil] input Input stream.
134
+ # @param input [IO,nil] Input stream.
135
+ # @param output [IO,Logger,nil] Output stream or logger.
136
+ # @param styled [Boolean,nil] Whether to output ansi styles. If `nil`, the
137
+ # setting is inferred from whether the output has a tty.
138
138
  #
139
- def initialize(input: $stdin,
140
- output: $stdout,
141
- styled: nil)
139
+ def initialize(input: $stdin, output: $stdout, styled: nil)
142
140
  @input = input
143
141
  @output = output
144
142
  @styled =
@@ -171,22 +169,24 @@ module Toys
171
169
  ##
172
170
  # Write a partial line without appending a newline.
173
171
  #
174
- # @param [String] str The line to write
175
- # @param [Symbol,String,Array<Integer>...] styles Styles to apply to the
172
+ # @param str [String] The line to write
173
+ # @param styles [Symbol,String,Array<Integer>...] Styles to apply to the
176
174
  # partial line.
175
+ # @return [self]
177
176
  #
178
177
  def write(str = "", *styles)
179
- output.write(apply_styles(str, *styles))
180
- output.flush
178
+ output&.write(apply_styles(str, *styles))
179
+ output&.flush
181
180
  self
182
181
  end
183
182
 
184
183
  ##
185
184
  # Write a line, appending a newline if one is not already present.
186
185
  #
187
- # @param [String] str The line to write
188
- # @param [Symbol,String,Array<Integer>...] styles Styles to apply to the
186
+ # @param str [String] The line to write
187
+ # @param styles [Symbol,String,Array<Integer>...] Styles to apply to the
189
188
  # entire line.
189
+ # @return [self]
190
190
  #
191
191
  def puts(str = "", *styles)
192
192
  str = "#{str}\n" unless str.end_with?("\n")
@@ -197,7 +197,8 @@ module Toys
197
197
  ##
198
198
  # Write a line, appending a newline if one is not already present.
199
199
  #
200
- # @param [String] str The line to write
200
+ # @param str [String] The line to write
201
+ # @return [self]
201
202
  #
202
203
  def <<(str)
203
204
  puts(str)
@@ -205,6 +206,7 @@ module Toys
205
206
 
206
207
  ##
207
208
  # Write a newline and flush the current line.
209
+ # @return [self]
208
210
  #
209
211
  def newline
210
212
  puts
@@ -213,12 +215,12 @@ module Toys
213
215
  ##
214
216
  # Ask a question and get a response.
215
217
  #
216
- # @param [String] prompt Required prompt string.
217
- # @param [Symbol,String,Array<Integer>...] styles Styles to apply to the
218
+ # @param prompt [String] Required prompt string.
219
+ # @param styles [Symbol,String,Array<Integer>...] Styles to apply to the
218
220
  # prompt.
219
- # @param [String,nil] default Default value, or `nil` for no default.
221
+ # @param default [String,nil] Default value, or `nil` for no default.
220
222
  # Uses `nil` if not specified.
221
- # @param [:default,String,nil] trailing_text Trailing text appended to
223
+ # @param trailing_text [:default,String,nil] Trailing text appended to
222
224
  # the prompt, `nil` for none, or `:default` to show the default.
223
225
  # @return [String]
224
226
  #
@@ -231,17 +233,17 @@ module Toys
231
233
  prompt = "#{ptext} #{trailing_text}#{pspaces}"
232
234
  end
233
235
  write(prompt, *styles)
234
- resp = input.gets.to_s.chomp
236
+ resp = input&.gets.to_s.chomp
235
237
  resp.empty? ? default.to_s : resp
236
238
  end
237
239
 
238
240
  ##
239
241
  # Confirm with the user.
240
242
  #
241
- # @param [String] prompt Prompt string. Defaults to `"Proceed?"`.
242
- # @param [Symbol,String,Array<Integer>...] styles Styles to apply to the
243
+ # @param prompt [String] Prompt string. Defaults to `"Proceed?"`.
244
+ # @param styles [Symbol,String,Array<Integer>...] Styles to apply to the
243
245
  # prompt.
244
- # @param [Boolean,nil] default Default value, or `nil` for no default.
246
+ # @param default [Boolean,nil] Default value, or `nil` for no default.
245
247
  # Uses `nil` if not specified.
246
248
  # @return [Boolean]
247
249
  #
@@ -262,6 +264,9 @@ module Toys
262
264
  raise TerminalError, "Cannot confirm because the input stream is at eof."
263
265
  end
264
266
  if !resp.strip.empty? || default.nil?
267
+ if input.nil?
268
+ raise TerminalError, "Cannot confirm because there is no input stream."
269
+ end
265
270
  confirm('Please answer "y" or "n"', default: default)
266
271
  else
267
272
  default
@@ -273,17 +278,18 @@ module Toys
273
278
  # performs the long-running task. While the block is executing, a
274
279
  # spinner will be displayed.
275
280
  #
276
- # @param [String] leading_text Optional leading string to display to the
281
+ # @param leading_text [String] Optional leading string to display to the
277
282
  # left of the spinner. Default is the empty string.
278
- # @param [Float] frame_length Length of a single frame, in seconds.
283
+ # @param frame_length [Float] Length of a single frame, in seconds.
279
284
  # Defaults to {DEFAULT_SPINNER_FRAME_LENGTH}.
280
- # @param [Array<String>] frames An array of frames. Defaults to
285
+ # @param frames [Array<String>] An array of frames. Defaults to
281
286
  # {DEFAULT_SPINNER_FRAMES}.
282
- # @param [Symbol,Array<Symbol>] style A terminal style or array of styles
287
+ # @param style [Symbol,Array<Symbol>] A terminal style or array of styles
283
288
  # to apply to all frames in the spinner. Defaults to empty,
284
- # @param [String] final_text Optional final string to display when the
289
+ # @param final_text [String] Optional final string to display when the
285
290
  # spinner is complete. Default is the empty string. A common practice
286
291
  # is to set this to newline.
292
+ # @return [Object] The return value of the block.
287
293
  #
288
294
  def spinner(leading_text: "", final_text: "",
289
295
  frame_length: nil, frames: nil, style: nil)
@@ -338,8 +344,9 @@ module Toys
338
344
  # The definition of a style may include any valid style specification,
339
345
  # including the symbol names of existing defined styles.
340
346
  #
341
- # @param [Symbol] name The name for the style
342
- # @param [Symbol,String,Array<Integer>...] styles
347
+ # @param name [Symbol] The name for the style
348
+ # @param styles [Symbol,String,Array<Integer>...]
349
+ # @return [self]
343
350
  #
344
351
  def define_style(name, *styles)
345
352
  @named_styles[name] = resolve_styles(*styles)
@@ -352,8 +359,8 @@ module Toys
352
359
  # add any ANSI style codes and in fact removes any existing codes. If
353
360
  # styles were added, ensures that the string ends with a clear code.
354
361
  #
355
- # @param [String] str String to style
356
- # @param [Symbol,String,Array<Integer>...] styles Styles to apply
362
+ # @param str [String] String to style
363
+ # @param styles [Symbol,String,Array<Integer>...] Styles to apply
357
364
  # @return [String] The styled string
358
365
  #
359
366
  def apply_styles(str, *styles)
@@ -409,7 +416,7 @@ module Toys
409
416
  rgb = style.to_i(16)
410
417
  [38, 2, (rgb >> 8) * 0x11, ((rgb & 0xf0) >> 4) * 0x11, (rgb & 0xf) * 0x11]
411
418
  when /^\e\[([\d;]+)m$/
412
- $1.split(";").map(&:to_i)
419
+ ::Regexp.last_match(1).split(";").map(&:to_i)
413
420
  end
414
421
  end
415
422
 
@@ -0,0 +1,162 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Copyright 2019 Daniel Azuma
4
+ #
5
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ # of this software and associated documentation files (the "Software"), to deal
7
+ # in the Software without restriction, including without limitation the rights
8
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ # copies of the Software, and to permit persons to whom the Software is
10
+ # furnished to do so, subject to the following conditions:
11
+ #
12
+ # The above copyright notice and this permission notice shall be included in
13
+ # all copies or substantial portions of the Software.
14
+ #
15
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20
+ # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
21
+ # IN THE SOFTWARE.
22
+ ;
23
+
24
+ module Toys
25
+ ##
26
+ # A string intended for word-wrapped display.
27
+ #
28
+ class WrappableString
29
+ ##
30
+ # Create a wrapped string.
31
+ # @param string [String,Array<String>] The string or array of string
32
+ # fragments
33
+ #
34
+ def initialize(string = "")
35
+ @fragments = string.is_a?(::Array) ? string.map(&:to_s) : string.to_s.split
36
+ end
37
+
38
+ ##
39
+ # Returns the string fragments, i.e. the individual "words" for wrapping.
40
+ #
41
+ # @return [Array<String>]
42
+ #
43
+ attr_reader :fragments
44
+
45
+ ##
46
+ # Returns a new WrappaableString whose content is the concatenation of this
47
+ # WrappableString with another WrappableString.
48
+ #
49
+ # @param other [WrappableString]
50
+ # @return [WrappableString]
51
+ #
52
+ def +(other)
53
+ other = WrappableString.new(other) unless other.is_a?(WrappableString)
54
+ WrappableString.new(fragments + other.fragments)
55
+ end
56
+
57
+ ##
58
+ # Returns true if the string is empty (i.e. has no fragments)
59
+ # @return [Boolean]
60
+ #
61
+ def empty?
62
+ @fragments.empty?
63
+ end
64
+
65
+ ##
66
+ # Returns the string without any wrapping
67
+ # @return [String]
68
+ #
69
+ def string
70
+ @fragments.join(" ")
71
+ end
72
+ alias to_s string
73
+
74
+ ## @private
75
+ def ==(other)
76
+ return false unless other.is_a?(WrappableString)
77
+ other.fragments == fragments
78
+ end
79
+ alias eql? ==
80
+
81
+ ## @private
82
+ def hash
83
+ fragments.hash
84
+ end
85
+
86
+ ##
87
+ # Wraps the string to the given width.
88
+ #
89
+ # @param width [Integer,nil] Width in characters, or `nil` for infinite.
90
+ # @param width2 [Integer,nil] Width in characters for the second and
91
+ # subsequent lines, or `nil` to use the same as width.
92
+ #
93
+ # @return [Array<String>] Wrapped lines
94
+ #
95
+ def wrap(width, width2 = nil)
96
+ lines = []
97
+ line = ""
98
+ line_len = 0
99
+ fragments.each do |frag|
100
+ frag_len = frag.gsub(/\e\[\d+(;\d+)*m/, "").size
101
+ if line_len.zero?
102
+ line = frag
103
+ line_len = frag_len
104
+ elsif width && line_len + 1 + frag_len > width
105
+ lines << line
106
+ line = frag
107
+ line_len = frag_len
108
+ width = width2 if width2
109
+ else
110
+ line_len += frag_len + 1
111
+ line = "#{line} #{frag}"
112
+ end
113
+ end
114
+ lines << line if line_len.positive?
115
+ lines
116
+ end
117
+
118
+ ##
119
+ # Wraps an array of lines to the given width.
120
+ #
121
+ # @param strs [Array<WrappableString>] Array of strings to wrap.
122
+ # @param width [Integer,nil] Width in characters, or `nil` for infinite.
123
+ # @param width2 [Integer,nil] Width in characters for the second and
124
+ # subsequent lines, or `nil` to use the same as width.
125
+ #
126
+ # @return [Array<String>] Wrapped lines
127
+ #
128
+ def self.wrap_lines(strs, width, width2 = nil)
129
+ result = Array(strs).map do |s|
130
+ s = make(s)
131
+ lines = s.empty? ? [""] : s.wrap(width, width2)
132
+ width = width2 if width2
133
+ lines
134
+ end.flatten
135
+ result = [] if result.all?(&:empty?)
136
+ result
137
+ end
138
+
139
+ ##
140
+ # Make the given object a WrappableString.
141
+ # If the object is already a WrappableString, return it. Otherwise,
142
+ # treat it as a string or an array of strings and wrap it in a
143
+ # WrappableString.
144
+ #
145
+ # @param obj [Toys::WrappableString,String,Array<String>]
146
+ # @return [Toys::WrappableString]
147
+ #
148
+ def self.make(obj)
149
+ obj.is_a?(WrappableString) ? obj : WrappableString.new(obj)
150
+ end
151
+
152
+ ##
153
+ # Make the given object an array of WrappableString.
154
+ #
155
+ # @param objs [Array<Toys::WrappableString,String,Array<String>>]
156
+ # @return [Array<Toys::WrappableString>]
157
+ #
158
+ def self.make_array(objs)
159
+ Array(objs).map { |obj| make(obj) }
160
+ end
161
+ end
162
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: toys-core
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.0
4
+ version: 0.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel Azuma
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-01-24 00:00:00.000000000 Z
11
+ date: 2019-06-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: highline
@@ -86,30 +86,30 @@ dependencies:
86
86
  requirements:
87
87
  - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: 0.62.0
89
+ version: 0.71.0
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
- version: 0.62.0
96
+ version: 0.71.0
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: yard
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
101
  - - "~>"
102
102
  - !ruby/object:Gem::Version
103
- version: 0.9.16
103
+ version: 0.9.19
104
104
  type: :development
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
108
  - - "~>"
109
109
  - !ruby/object:Gem::Version
110
- version: 0.9.16
110
+ version: 0.9.19
111
111
  description: Toys-Core is the command line tool framework underlying Toys. It can
112
- be used to create command line binaries using the internal Toys APIs.
112
+ be used to create command line executables using the internal Toys APIs.
113
113
  email:
114
114
  - dazuma@gmail.com
115
115
  executables: []
@@ -122,26 +122,28 @@ files:
122
122
  - README.md
123
123
  - docs/guide.md
124
124
  - lib/toys-core.rb
125
+ - lib/toys/acceptor.rb
126
+ - lib/toys/alias.rb
127
+ - lib/toys/arg_parser.rb
125
128
  - lib/toys/cli.rb
129
+ - lib/toys/compat.rb
130
+ - lib/toys/completion.rb
131
+ - lib/toys/context.rb
126
132
  - lib/toys/core_version.rb
127
- - lib/toys/definition/acceptor.rb
128
- - lib/toys/definition/alias.rb
129
- - lib/toys/definition/arg.rb
130
- - lib/toys/definition/flag.rb
131
- - lib/toys/definition/flag_group.rb
132
- - lib/toys/definition/source_info.rb
133
- - lib/toys/definition/tool.rb
134
- - lib/toys/dsl/arg.rb
135
133
  - lib/toys/dsl/flag.rb
136
134
  - lib/toys/dsl/flag_group.rb
135
+ - lib/toys/dsl/positional_arg.rb
137
136
  - lib/toys/dsl/tool.rb
138
137
  - lib/toys/errors.rb
138
+ - lib/toys/flag.rb
139
+ - lib/toys/flag_group.rb
139
140
  - lib/toys/input_file.rb
140
141
  - lib/toys/loader.rb
141
142
  - lib/toys/middleware.rb
142
143
  - lib/toys/mixin.rb
143
- - lib/toys/runner.rb
144
- - lib/toys/standard_middleware.rb
144
+ - lib/toys/module_lookup.rb
145
+ - lib/toys/positional_arg.rb
146
+ - lib/toys/source_info.rb
145
147
  - lib/toys/standard_middleware/add_verbosity_flags.rb
146
148
  - lib/toys/standard_middleware/handle_usage_errors.rb
147
149
  - lib/toys/standard_middleware/set_default_descriptions.rb
@@ -154,15 +156,15 @@ files:
154
156
  - lib/toys/standard_mixins/terminal.rb
155
157
  - lib/toys/template.rb
156
158
  - lib/toys/tool.rb
159
+ - lib/toys/utils/completion_engine.rb
157
160
  - lib/toys/utils/exec.rb
158
161
  - lib/toys/utils/gems.rb
159
162
  - lib/toys/utils/help_text.rb
160
- - lib/toys/utils/module_lookup.rb
161
163
  - lib/toys/utils/terminal.rb
162
- - lib/toys/utils/wrappable_string.rb
164
+ - lib/toys/wrappable_string.rb
163
165
  homepage: https://github.com/dazuma/toys
164
166
  licenses:
165
- - BSD-3-Clause
167
+ - MIT
166
168
  metadata:
167
169
  changelog_uri: https://github.com/dazuma/toys/blob/master/toys-core/CHANGELOG.md
168
170
  source_code_uri: https://github.com/dazuma/toys
@@ -183,8 +185,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
183
185
  - !ruby/object:Gem::Version
184
186
  version: '0'
185
187
  requirements: []
186
- rubygems_version: 3.0.2
188
+ rubygems_version: 3.0.3
187
189
  signing_key:
188
190
  specification_version: 4
189
- summary: Framework for creating command line binaries
191
+ summary: Framework for creating command line executables
190
192
  test_files: []