toys 0.12.2 → 0.13.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (70) hide show
  1. checksums.yaml +4 -4
  2. data/.yardopts +2 -0
  3. data/CHANGELOG.md +35 -0
  4. data/LICENSE.md +1 -1
  5. data/README.md +7 -4
  6. data/builtins/system/git-cache.rb +238 -0
  7. data/builtins/system/test.rb +37 -2
  8. data/core-docs/toys/acceptor.rb +432 -0
  9. data/core-docs/toys/arg_parser.rb +397 -0
  10. data/core-docs/toys/cli.rb +493 -0
  11. data/core-docs/toys/compat.rb +2 -0
  12. data/core-docs/toys/completion.rb +329 -0
  13. data/core-docs/toys/context.rb +321 -0
  14. data/core-docs/toys/core.rb +14 -0
  15. data/core-docs/toys/dsl/base.rb +56 -0
  16. data/core-docs/toys/dsl/flag.rb +261 -0
  17. data/core-docs/toys/dsl/flag_group.rb +259 -0
  18. data/core-docs/toys/dsl/internal.rb +4 -0
  19. data/core-docs/toys/dsl/positional_arg.rb +139 -0
  20. data/core-docs/toys/dsl/tool.rb +1530 -0
  21. data/core-docs/toys/errors.rb +93 -0
  22. data/core-docs/toys/flag.rb +549 -0
  23. data/core-docs/toys/flag_group.rb +186 -0
  24. data/core-docs/toys/input_file.rb +8 -0
  25. data/core-docs/toys/loader.rb +222 -0
  26. data/core-docs/toys/middleware.rb +295 -0
  27. data/core-docs/toys/mixin.rb +142 -0
  28. data/core-docs/toys/module_lookup.rb +75 -0
  29. data/core-docs/toys/positional_arg.rb +145 -0
  30. data/core-docs/toys/settings.rb +507 -0
  31. data/core-docs/toys/source_info.rb +127 -0
  32. data/core-docs/toys/standard_middleware/add_verbosity_flags.rb +49 -0
  33. data/core-docs/toys/standard_middleware/apply_config.rb +24 -0
  34. data/core-docs/toys/standard_middleware/handle_usage_errors.rb +33 -0
  35. data/core-docs/toys/standard_middleware/set_default_descriptions.rb +222 -0
  36. data/core-docs/toys/standard_middleware/show_help.rb +190 -0
  37. data/core-docs/toys/standard_middleware/show_root_version.rb +45 -0
  38. data/core-docs/toys/standard_mixins/bundler.rb +83 -0
  39. data/core-docs/toys/standard_mixins/exec.rb +645 -0
  40. data/core-docs/toys/standard_mixins/fileutils.rb +18 -0
  41. data/core-docs/toys/standard_mixins/gems.rb +48 -0
  42. data/core-docs/toys/standard_mixins/git_cache.rb +41 -0
  43. data/core-docs/toys/standard_mixins/highline.rb +133 -0
  44. data/core-docs/toys/standard_mixins/terminal.rb +135 -0
  45. data/core-docs/toys/standard_mixins/xdg.rb +49 -0
  46. data/core-docs/toys/template.rb +112 -0
  47. data/core-docs/toys/tool_definition.rb +926 -0
  48. data/core-docs/toys/utils/completion_engine.rb +49 -0
  49. data/core-docs/toys/utils/exec.rb +721 -0
  50. data/core-docs/toys/utils/gems.rb +185 -0
  51. data/core-docs/toys/utils/git_cache.rb +353 -0
  52. data/core-docs/toys/utils/help_text.rb +134 -0
  53. data/core-docs/toys/utils/terminal.rb +310 -0
  54. data/core-docs/toys/utils/xdg.rb +253 -0
  55. data/core-docs/toys/wrappable_string.rb +120 -0
  56. data/core-docs/toys-core.rb +63 -0
  57. data/docs/guide.md +497 -156
  58. data/lib/toys/standard_cli.rb +50 -36
  59. data/lib/toys/templates/clean.rb +18 -0
  60. data/lib/toys/templates/gem_build.rb +24 -0
  61. data/lib/toys/templates/minitest.rb +21 -0
  62. data/lib/toys/templates/rake.rb +23 -3
  63. data/lib/toys/templates/rdoc.rb +29 -0
  64. data/lib/toys/templates/rspec.rb +32 -4
  65. data/lib/toys/templates/rubocop.rb +14 -1
  66. data/lib/toys/templates/yardoc.rb +55 -0
  67. data/lib/toys/testing.rb +186 -109
  68. data/lib/toys/version.rb +1 -1
  69. data/lib/toys.rb +4 -2
  70. metadata +56 -6
@@ -326,67 +326,122 @@ module Toys
326
326
  self
327
327
  end
328
328
 
329
+ ##
329
330
  # @private
331
+ #
330
332
  attr_reader :generate_output
333
+
334
+ ##
331
335
  # @private
336
+ #
332
337
  attr_reader :generate_output_flag
338
+
339
+ ##
333
340
  # @private
341
+ #
334
342
  attr_reader :fail_on_warning
343
+
344
+ ##
335
345
  # @private
346
+ #
336
347
  attr_reader :fail_on_undocumented_objects
348
+
349
+ ##
337
350
  # @private
351
+ #
338
352
  attr_reader :show_public
353
+
354
+ ##
339
355
  # @private
356
+ #
340
357
  attr_reader :show_protected
358
+
359
+ ##
341
360
  # @private
361
+ #
342
362
  attr_reader :show_private
363
+
364
+ ##
343
365
  # @private
366
+ #
344
367
  attr_reader :hide_private_tag
368
+
369
+ ##
345
370
  # @private
371
+ #
346
372
  attr_reader :readme
373
+
374
+ ##
347
375
  # @private
376
+ #
348
377
  attr_reader :markup
378
+
379
+ ##
349
380
  # @private
381
+ #
350
382
  attr_reader :template
383
+
384
+ ##
351
385
  # @private
386
+ #
352
387
  attr_reader :template_path
388
+
389
+ ##
353
390
  # @private
391
+ #
354
392
  attr_reader :format
393
+
394
+ ##
355
395
  # @private
396
+ #
356
397
  attr_reader :context_directory
357
398
 
399
+ ##
358
400
  # @private
401
+ #
359
402
  def name
360
403
  @name || DEFAULT_TOOL_NAME
361
404
  end
362
405
 
406
+ ##
363
407
  # @private
408
+ #
364
409
  def gem_version
365
410
  return Array(@gem_version) if @gem_version
366
411
  @bundler ? [] : DEFAULT_GEM_VERSION_REQUIREMENTS
367
412
  end
368
413
 
414
+ ##
369
415
  # @private
416
+ #
370
417
  def files
371
418
  @files ? Array(@files) : DEFAULT_FILES
372
419
  end
373
420
 
421
+ ##
374
422
  # @private
423
+ #
375
424
  def output_dir
376
425
  @output_dir || DEFAULT_OUTPUT_DIR
377
426
  end
378
427
 
428
+ ##
379
429
  # @private
430
+ #
380
431
  def options
381
432
  Array(@options)
382
433
  end
383
434
 
435
+ ##
384
436
  # @private
437
+ #
385
438
  def stats_options
386
439
  Array(@stats_options)
387
440
  end
388
441
 
442
+ ##
389
443
  # @private
444
+ #
390
445
  def bundler_settings
391
446
  if @bundler && !@bundler.is_a?(::Hash)
392
447
  {}
data/lib/toys/testing.rb CHANGED
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "shellwords"
4
+
3
5
  module Toys
4
6
  ##
5
7
  # Helpers for writing tool tests.
@@ -18,174 +20,249 @@ module Toys
18
20
  end
19
21
 
20
22
  ##
21
- # Runs the tool corresponding to the given command line, provided as an
22
- # array of arguments, and returns a {Toys::Exec::Result}.
23
+ # Prepares the tool corresponding to the given command line, but instead of
24
+ # running it, yields the execution context to the given block. This can be
25
+ # used to test individual methods in a tool.
23
26
  #
24
27
  # By default, a single CLI is shared among the tests in each test class or
25
28
  # _describe_ block. Thus, tools are loaded only once, and the loader is
26
29
  # shared across the tests. If you need to isolate loading for a test,
27
30
  # create a separate CLI and pass it in using the `:cli` keyword argument.
28
31
  #
29
- # All other keyword arguments are the same as those defined by the
30
- # `Toys::Utils::Exec` class. If a block is given, a
31
- # `Toys::Utils::Exec::Controller` is yielded to it. For more info, see the
32
- # documentation for `Toys::Utils::Exec#exec`.
33
- #
34
- # This method uses "fork" to isolate the run of the tool. On an environment
35
- # without "fork" support, such as JRuby or Ruby on Windows, consider
36
- # {#exec_separate_tool}.
32
+ # Note: this method runs the given block in-process. This means you can
33
+ # test assertions within the block, but any input or output performed by
34
+ # the tool's methods that you call, will manifest during your test. If this
35
+ # is a problem, you might consider redirecting the standard streams when
36
+ # calling this method, for example by using
37
+ # [capture_subprocess_io](https://docs.seattlerb.org/minitest/Minitest/Assertions.html#method-i-capture_subprocess_io).
37
38
  #
38
39
  # @param cmd [String,Array<String>] The command to execute.
39
- # @param opts [keywords] The command options.
40
- # @yieldparam controller [Toys::Utils::Exec::Controller] A controller
41
- # for the subprocess streams.
40
+ # @yieldparam tool [Toys::Context] The tool context.
41
+ # @return [Object] The value returned from the block.
42
+ #
43
+ # @example
44
+ # # Given the following tool:
45
+ #
46
+ # tool "hello" do
47
+ # flag :shout
48
+ # def run
49
+ # puts message
50
+ # end
51
+ # def message
52
+ # shout ? "HELLO" : "hello"
53
+ # end
54
+ # end
55
+ #
56
+ # # You can test the `message` method as follows:
42
57
  #
43
- # @return [Toys::Utils::Exec::Controller] The subprocess controller, if
44
- # the process is running in the background.
45
- # @return [Toys::Utils::Exec::Result] The result, if the process ran in
46
- # the foreground.
58
+ # class MyTest < Minitest::Test
59
+ # include Toys::Testing
60
+ # def test_message_without_shout
61
+ # toys_load_tool(["hello"]) do |tool|
62
+ # assert_equal("hello", tool.message)
63
+ # end
64
+ # end
65
+ # def test_message_with_shout
66
+ # toys_load_tool(["hello", "--shout"]) do |tool|
67
+ # assert_equal("HELLO", tool.message)
68
+ # end
69
+ # end
70
+ # end
47
71
  #
48
- def exec_tool(cmd, **opts, &block)
49
- cli = opts.delete(:cli) || toys_cli
72
+ def toys_load_tool(cmd, cli: nil, &block)
73
+ cli ||= toys_cli
50
74
  cmd = ::Shellwords.split(cmd) if cmd.is_a?(::String)
51
- cli.loader.lookup(cmd)
52
- tool_caller = proc { ::Kernel.exit(cli.run(*cmd)) }
53
- self.class.toys_exec.exec_proc(tool_caller, **opts, &block)
75
+ cli.load_tool(*cmd, &block)
54
76
  end
55
77
 
56
78
  ##
57
- # Runs the tool corresponding to the given command line, provided as an
58
- # array of arguments, in a separately spawned process, and returns a
59
- # {Toys::Exec::Result}.
79
+ # Runs the tool corresponding to the given command line, in-process, and
80
+ # returns the result code.
60
81
  #
61
- # Unlike {#exec_tool}, this method does not use the shared CLI, but instead
62
- # spawns a completely new Toys process for each run. It is thus slower than
63
- # {#exec_tool}, but compatible with environments without "fork" support,
64
- # such as JRuby or Ruby on Windows.
82
+ # By default, a single CLI is shared among the tests in each test class or
83
+ # _describe_ block. Thus, tools are loaded only once, and the loader is
84
+ # shared across the tests. If you need to isolate loading for a test,
85
+ # create a separate CLI and pass it in using the `:cli` keyword argument.
65
86
  #
66
- # Supported keyword arguments are the same as those defined by the
67
- # `Toys::Utils::Exec` class. If a block is given, a
68
- # `Toys::Utils::Exec::Controller` is yielded to it. For more info, see the
69
- # documentation for `Toys::Utils::Exec#exec`.
87
+ # Note: This method runs the tool in-process. This is often faster than
88
+ # running it in a separate process with {#toys_exec_tool}, but it also
89
+ # means any input or output performed by the tool, will manifest during
90
+ # your test. If this is a problem, you might consider redirecting the
91
+ # standard streams when calling this method, for example by using
92
+ # [capture_subprocess_io](https://docs.seattlerb.org/minitest/Minitest/Assertions.html#method-i-capture_subprocess_io).
70
93
  #
71
94
  # @param cmd [String,Array<String>] The command to execute.
72
- # @param opts [keywords] The command options.
73
- # @yieldparam controller [Toys::Utils::Exec::Controller] A controller
74
- # for the subprocess streams.
75
- #
76
- # @return [Toys::Utils::Exec::Controller] The subprocess controller, if
77
- # the process is running in the background.
78
- # @return [Toys::Utils::Exec::Result] The result, if the process ran in
79
- # the foreground.
95
+ # @return [Integer] The integer result code (i.e. 0 for success).
80
96
  #
81
- def exec_separate_tool(cmd, **opts, &block)
97
+ def toys_run_tool(cmd, cli: nil)
98
+ cli ||= toys_cli
82
99
  cmd = ::Shellwords.split(cmd) if cmd.is_a?(::String)
83
- cmd = [::RbConfig.ruby, "--disable=gems", ::Toys.executable_path] + cmd
84
- self.class.toys_exec.exec(cmd, **opts, &block)
100
+ cli.run(*cmd)
85
101
  end
86
102
 
87
103
  ##
88
- # Runs the tool corresponding to the given command line, and returns the
89
- # data written to `STDOUT`. This is equivalent to calling {#exec_tool}
90
- # with the keyword arguments `out: :capture, background: false`, and
91
- # calling `#captured_out` on the result.
92
- #
93
- # Note: this method uses "fork" to execute the tool. If you are using an
94
- # environment without "fork" support, such as JRuby oor Ruby on Windows,
95
- # consider {#capture_separate_tool}.
104
+ # Runs the tool corresponding to the given command line, in a separate
105
+ # forked process, and returns a {Toys::Exec::Result}. You can either
106
+ # provide a block to control the process, or simply let it run and capture
107
+ # its output.
96
108
  #
97
- # @param cmd [String,Array<String>] The command to execute.
98
- # @param opts [keywords] The command options.
99
- # @yieldparam controller [Toys::Utils::Exec::Controller] A controller
100
- # for the subprocess streams.
101
- #
102
- # @return [Toys::Utils::Exec::Controller] The subprocess controller, if
103
- # the process is running in the background.
104
- # @return [Toys::Utils::Exec::Result] The result, if the process ran in
105
- # the foreground.
109
+ # By default, a single CLI is shared among the tests in each test class or
110
+ # _describe_ block. Thus, tools are loaded only once, and the loader is
111
+ # shared across the tests. If you need to isolate loading for a test,
112
+ # create a separate CLI and pass it in using the `:cli` keyword argument.
106
113
  #
107
- def capture_tool(cmd, **opts, &block)
108
- opts = opts.merge(out: :capture, background: false)
109
- exec_tool(cmd, **opts, &block).captured_out
110
- end
111
-
112
- ##
113
- # Runs the tool corresponding to the given command line, and returns the
114
- # data written to `STDOUT`. This is equivalent to calling
115
- # {#exec_separate_tool} with the keyword arguments
116
- # `out: :capture, background: false`, and calling `#captured_out` on the
117
- # result.
114
+ # All other keyword arguments are the same as those defined by the
115
+ # {Toys::Utils::Exec} class. If a block is given, all streams are directed
116
+ # to a {Toys::Utils::Exec::Controller} which is yielded to the block. If no
117
+ # block is given, the output and error streams are captured and the input
118
+ # stream is closed.
118
119
  #
119
- # Unlike {#capture_tool}, this method does not use "fork", and thus can be
120
- # called in an environment such as JRuby or Ruby on Windows.
120
+ # This method uses "fork" to isolate the run of the tool. It will not work
121
+ # on environments such as JRuby or Ruby on Windows that do not support
122
+ # process forking.
121
123
  #
122
124
  # @param cmd [String,Array<String>] The command to execute.
123
125
  # @param opts [keywords] The command options.
124
126
  # @yieldparam controller [Toys::Utils::Exec::Controller] A controller
125
127
  # for the subprocess streams.
128
+ # @return [Toys::Utils::Exec::Result] The process result.
126
129
  #
127
- # @return [Toys::Utils::Exec::Controller] The subprocess controller, if
128
- # the process is running in the background.
129
- # @return [Toys::Utils::Exec::Result] The result, if the process ran in
130
- # the foreground.
131
- #
132
- def capture_separate_tool(cmd, **opts, &block)
133
- opts = opts.merge(out: :capture, background: false)
134
- exec_separate_tool(cmd, **opts, &block).captured_out
135
- end
136
-
137
- ##
138
- # Runs the tool corresponding to the given command line, managing streams
139
- # using a controller. This is equivalent to calling {#exec_tool} with the
140
- # keyword arguments:
130
+ # @example
131
+ # # Given the following tool:
141
132
  #
142
- # out: :controller,
143
- # err: :controller,
144
- # in: :controller,
145
- # background: block.nil?
133
+ # tool "hello" do
134
+ # flag :shout
135
+ # def run
136
+ # puts message
137
+ # end
138
+ # def message
139
+ # shout ? "HELLO" : "hello"
140
+ # end
141
+ # end
146
142
  #
147
- # If a block is given, the command is run in the foreground, the
148
- # controller is passed to the block during the run, and a result object is
149
- # returned. If no block is given, the command is run in the background, and
150
- # the controller object is returned.
143
+ # # You can test the tool's output as follows:
151
144
  #
152
- # @param cmd [String,Array<String>] The command to execute.
153
- # @param opts [keywords] The command options.
154
- # @yieldparam controller [Toys::Utils::Exec::Controller] A controller
155
- # for the subprocess streams.
145
+ # class MyTest < Minitest::Test
146
+ # include Toys::Testing
147
+ # def test_output_without_shout
148
+ # result = toys_exec_tool(["hello"])
149
+ # assert_equal("hello hello\n", result.captured_out)
150
+ # end
151
+ # def test_with_shout
152
+ # result = toys_exec_tool(["hello", "--shout"])
153
+ # assert_equal("HELLO HELLO\n", result.captured_out)
154
+ # end
155
+ # end
156
156
  #
157
- # @return [Toys::Utils::Exec::Controller] The subprocess controller, if
158
- # the process is running in the background.
159
- # @return [Toys::Utils::Exec::Result] The result, if the process ran in
160
- # the foreground.
161
- #
162
- def control_tool(cmd, **opts, &block)
163
- opts = opts.merge(out: :controller, err: :controller, in: :controller, background: block.nil?)
164
- exec_tool(cmd, **opts, &block)
157
+ def toys_exec_tool(cmd, cli: nil, **opts, &block)
158
+ cli ||= toys_cli
159
+ cmd = ::Shellwords.split(cmd) if cmd.is_a?(::String)
160
+ opts =
161
+ if block
162
+ {
163
+ out: :controller,
164
+ err: :controller,
165
+ in: :controller,
166
+ }.merge(opts)
167
+ else
168
+ {
169
+ out: :capture,
170
+ err: :capture,
171
+ in: :close,
172
+ }.merge(opts)
173
+ end
174
+ cli.loader.lookup(cmd)
175
+ tool_caller = proc { ::Kernel.exit(cli.run(*cmd)) }
176
+ self.class.toys_exec.exec_proc(tool_caller, **opts, &block)
165
177
  end
178
+ alias exec_tool toys_exec_tool
166
179
 
167
180
  @toys_mutex = ::Mutex.new
168
181
 
182
+ ##
169
183
  # @private
184
+ #
170
185
  def self.included(klass)
171
186
  klass.extend(ClassMethods)
172
187
  end
173
188
 
189
+ ##
174
190
  # @private
191
+ #
175
192
  def self.toys_mutex
176
193
  @toys_mutex
177
194
  end
178
195
 
196
+ ##
179
197
  # @private
198
+ #
199
+ def self.toys_custom_paths(paths = :read)
200
+ @toys_custom_paths = paths unless paths == :read
201
+ @toys_custom_paths
202
+ end
203
+
204
+ ##
205
+ # @private
206
+ #
207
+ def self.toys_include_builtins(value = :read)
208
+ @toys_include_builtins = value unless value == :read
209
+ @toys_include_builtins
210
+ end
211
+
212
+ @toys_custom_paths = nil
213
+ @toys_include_builtins = true
214
+
215
+ ##
216
+ # Class methods added to a test class or describe block when
217
+ # {Toys::Testing} is included. Generally, these are methods that configure
218
+ # the load path for the CLI in scope for the block.
219
+ #
180
220
  module ClassMethods
221
+ ##
222
+ # Configure the Toys CLI to load tools from the given paths, and ignore
223
+ # the current directory and global paths.
224
+ #
225
+ # @param paths [String,Array<String>] The paths to load from.
226
+ #
227
+ def toys_custom_paths(paths = :read)
228
+ @toys_custom_paths = paths unless paths == :read
229
+ return @toys_custom_paths if defined?(@toys_custom_paths)
230
+ begin
231
+ super
232
+ rescue ::NoMethodError
233
+ Testing.toys_custom_paths
234
+ end
235
+ end
236
+
237
+ ##
238
+ # Configure the Toys CLI to include or exclude builtins. Normally
239
+ # builtins are included unless false is passed to this method.
240
+ #
241
+ # @param value [boolean] Whether to include builtins.
242
+ #
243
+ def toys_include_builtins(value = :read)
244
+ @toys_include_builtins = value unless value == :read
245
+ return @toys_include_builtins if defined?(@toys_include_builtins)
246
+ begin
247
+ super
248
+ rescue ::NoMethodError
249
+ Testing.toys_include_builtins
250
+ end
251
+ end
252
+
253
+ ##
181
254
  # @private
255
+ #
182
256
  def toys_cli
183
257
  Testing.toys_mutex.synchronize do
184
- @toys_cli ||= StandardCLI.new
258
+ @toys_cli ||= StandardCLI.new(custom_paths: toys_custom_paths,
259
+ include_builtins: toys_include_builtins)
185
260
  end
186
261
  end
187
262
 
263
+ ##
188
264
  # @private
265
+ #
189
266
  def toys_exec
190
267
  Testing.toys_mutex.synchronize do
191
268
  require "toys/utils/exec"
data/lib/toys/version.rb CHANGED
@@ -5,5 +5,5 @@ module Toys
5
5
  # Current version of the Toys command line executable.
6
6
  # @return [String]
7
7
  #
8
- VERSION = "0.12.2"
8
+ VERSION = "0.13.0"
9
9
  end
data/lib/toys.rb CHANGED
@@ -6,7 +6,7 @@ require "toys/version"
6
6
  # environment variable explicitly, but in production, we get it from rubygems.
7
7
  # We prepend to $LOAD_PATH directly rather than calling Kernel.gem, so that we
8
8
  # don't get clobbered in case someone sets up bundler later.
9
- ::ENV["TOYS_CORE_LIB_PATH"] ||= begin
9
+ unless ::ENV.key?("TOYS_CORE_LIB_PATH")
10
10
  path = ::File.expand_path("../../toys-core-#{::Toys::VERSION}/lib", __dir__)
11
11
  unless path && ::File.directory?(path)
12
12
  require "rubygems"
@@ -14,7 +14,7 @@ require "toys/version"
14
14
  path = dep.to_spec.full_require_paths.first
15
15
  end
16
16
  abort "Unable to find toys-core gem!" unless path && ::File.directory?(path)
17
- path
17
+ ::ENV.store("TOYS_CORE_LIB_PATH", path)
18
18
  end
19
19
 
20
20
  $LOAD_PATH.delete(::ENV["TOYS_CORE_LIB_PATH"])
@@ -39,7 +39,9 @@ module Toys
39
39
  #
40
40
  EXECUTABLE_PATH = ::ENV["TOYS_BIN_PATH"]
41
41
 
42
+ ##
42
43
  # @private
44
+ #
43
45
  LIB_PATH = __dir__
44
46
 
45
47
  ##
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: toys
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.12.2
4
+ version: 0.13.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: 2021-08-30 00:00:00.000000000 Z
11
+ date: 2022-02-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: toys-core
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - '='
18
18
  - !ruby/object:Gem::Version
19
- version: 0.12.2
19
+ version: 0.13.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - '='
25
25
  - !ruby/object:Gem::Version
26
- version: 0.12.2
26
+ version: 0.13.0
27
27
  description: Toys is a configurable command line tool. Write commands in Ruby using
28
28
  a simple DSL, and Toys will provide the command line executable and take care of
29
29
  all the details such as argument parsing, online help, and error reporting. Toys
@@ -45,8 +45,58 @@ files:
45
45
  - bin/toys
46
46
  - builtins/do.rb
47
47
  - builtins/system/bash-completion.rb
48
+ - builtins/system/git-cache.rb
48
49
  - builtins/system/test.rb
49
50
  - builtins/system/update.rb
51
+ - core-docs/toys-core.rb
52
+ - core-docs/toys/acceptor.rb
53
+ - core-docs/toys/arg_parser.rb
54
+ - core-docs/toys/cli.rb
55
+ - core-docs/toys/compat.rb
56
+ - core-docs/toys/completion.rb
57
+ - core-docs/toys/context.rb
58
+ - core-docs/toys/core.rb
59
+ - core-docs/toys/dsl/base.rb
60
+ - core-docs/toys/dsl/flag.rb
61
+ - core-docs/toys/dsl/flag_group.rb
62
+ - core-docs/toys/dsl/internal.rb
63
+ - core-docs/toys/dsl/positional_arg.rb
64
+ - core-docs/toys/dsl/tool.rb
65
+ - core-docs/toys/errors.rb
66
+ - core-docs/toys/flag.rb
67
+ - core-docs/toys/flag_group.rb
68
+ - core-docs/toys/input_file.rb
69
+ - core-docs/toys/loader.rb
70
+ - core-docs/toys/middleware.rb
71
+ - core-docs/toys/mixin.rb
72
+ - core-docs/toys/module_lookup.rb
73
+ - core-docs/toys/positional_arg.rb
74
+ - core-docs/toys/settings.rb
75
+ - core-docs/toys/source_info.rb
76
+ - core-docs/toys/standard_middleware/add_verbosity_flags.rb
77
+ - core-docs/toys/standard_middleware/apply_config.rb
78
+ - core-docs/toys/standard_middleware/handle_usage_errors.rb
79
+ - core-docs/toys/standard_middleware/set_default_descriptions.rb
80
+ - core-docs/toys/standard_middleware/show_help.rb
81
+ - core-docs/toys/standard_middleware/show_root_version.rb
82
+ - core-docs/toys/standard_mixins/bundler.rb
83
+ - core-docs/toys/standard_mixins/exec.rb
84
+ - core-docs/toys/standard_mixins/fileutils.rb
85
+ - core-docs/toys/standard_mixins/gems.rb
86
+ - core-docs/toys/standard_mixins/git_cache.rb
87
+ - core-docs/toys/standard_mixins/highline.rb
88
+ - core-docs/toys/standard_mixins/terminal.rb
89
+ - core-docs/toys/standard_mixins/xdg.rb
90
+ - core-docs/toys/template.rb
91
+ - core-docs/toys/tool_definition.rb
92
+ - core-docs/toys/utils/completion_engine.rb
93
+ - core-docs/toys/utils/exec.rb
94
+ - core-docs/toys/utils/gems.rb
95
+ - core-docs/toys/utils/git_cache.rb
96
+ - core-docs/toys/utils/help_text.rb
97
+ - core-docs/toys/utils/terminal.rb
98
+ - core-docs/toys/utils/xdg.rb
99
+ - core-docs/toys/wrappable_string.rb
50
100
  - docs/guide.md
51
101
  - lib/toys.rb
52
102
  - lib/toys/standard_cli.rb
@@ -66,10 +116,10 @@ homepage: https://github.com/dazuma/toys
66
116
  licenses:
67
117
  - MIT
68
118
  metadata:
69
- changelog_uri: https://dazuma.github.io/toys/gems/toys/v0.12.2/file.CHANGELOG.html
119
+ changelog_uri: https://dazuma.github.io/toys/gems/toys/v0.13.0/file.CHANGELOG.html
70
120
  source_code_uri: https://github.com/dazuma/toys/tree/main/toys
71
121
  bug_tracker_uri: https://github.com/dazuma/toys/issues
72
- documentation_uri: https://dazuma.github.io/toys/gems/toys/v0.12.2
122
+ documentation_uri: https://dazuma.github.io/toys/gems/toys/v0.13.0
73
123
  post_install_message:
74
124
  rdoc_options: []
75
125
  require_paths: