toys 0.14.7 → 0.15.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +24 -0
- data/LICENSE.md +1 -1
- data/README.md +5 -2
- data/builtins/system/test.rb +53 -35
- data/core-docs/toys/cli.rb +37 -64
- data/core-docs/toys/context.rb +51 -0
- data/core-docs/toys/core.rb +1 -1
- data/core-docs/toys/dsl/flag.rb +24 -1
- data/core-docs/toys/dsl/flag_group.rb +10 -2
- data/core-docs/toys/dsl/positional_arg.rb +16 -0
- data/core-docs/toys/dsl/tool.rb +144 -43
- data/core-docs/toys/middleware.rb +3 -2
- data/core-docs/toys/settings.rb +1 -1
- data/core-docs/toys/standard_mixins/bundler.rb +16 -1
- data/core-docs/toys/standard_mixins/exec.rb +25 -6
- data/core-docs/toys/standard_mixins/gems.rb +17 -3
- data/core-docs/toys/tool_definition.rb +125 -41
- data/core-docs/toys/utils/exec.rb +22 -1
- data/core-docs/toys/utils/standard_ui.rb +184 -0
- data/core-docs/toys-core.rb +51 -3
- data/docs/guide.md +152 -63
- data/lib/toys/standard_cli.rb +17 -2
- data/lib/toys/templates/gem_build.rb +13 -7
- data/lib/toys/templates/minitest.rb +47 -17
- data/lib/toys/templates/rake.rb +18 -6
- data/lib/toys/templates/rdoc.rb +28 -17
- data/lib/toys/templates/rspec.rb +18 -11
- data/lib/toys/templates/rubocop.rb +14 -8
- data/lib/toys/templates/yardoc.rb +46 -29
- data/lib/toys/testing.rb +1 -1
- data/lib/toys/version.rb +1 -1
- data/lib/toys.rb +22 -0
- metadata +8 -7
data/lib/toys/templates/rspec.rb
CHANGED
@@ -343,17 +343,28 @@ module Toys
|
|
343
343
|
complete: :file_system,
|
344
344
|
desc: "Paths to the specs to run (defaults to all specs)"
|
345
345
|
|
346
|
-
|
347
|
-
|
348
|
-
|
346
|
+
static :libs, template.libs
|
347
|
+
static :gem_version, template.gem_version
|
348
|
+
static :rspec_options, template.options
|
349
|
+
|
350
|
+
# @private
|
351
|
+
def run # rubocop:disable all
|
352
|
+
gem "rspec", *gem_version
|
349
353
|
|
350
354
|
::Dir.chdir(context_directory || ::Dir.getwd) do
|
351
355
|
ruby_args = []
|
352
|
-
libs = Array(template.libs)
|
353
356
|
ruby_args << "-I#{libs.join(::File::PATH_SEPARATOR)}" unless libs.empty?
|
354
357
|
ruby_args << "-w" if warnings
|
355
|
-
|
356
|
-
|
358
|
+
|
359
|
+
code = <<~CODE
|
360
|
+
gem 'rspec', *#{gem_version.inspect}
|
361
|
+
require 'rspec/core'
|
362
|
+
::RSpec::Core::Runner.invoke
|
363
|
+
CODE
|
364
|
+
ruby_args << "-e" << code
|
365
|
+
|
366
|
+
ruby_args << "--"
|
367
|
+
ruby_args << "--options" << rspec_options if rspec_options
|
357
368
|
ruby_args << "--order" << order if order
|
358
369
|
ruby_args << "--format" << format if format
|
359
370
|
ruby_args << "--out" << out if out
|
@@ -364,11 +375,7 @@ module Toys
|
|
364
375
|
ruby_args << "--tag" << tag if tag
|
365
376
|
ruby_args.concat(files)
|
366
377
|
|
367
|
-
result = exec_ruby(ruby_args
|
368
|
-
controller.in.puts("gem 'rspec', *#{gem_requirements.inspect}")
|
369
|
-
controller.in.puts("require 'rspec/core'")
|
370
|
-
controller.in.puts("::RSpec::Core::Runner.invoke")
|
371
|
-
end
|
378
|
+
result = exec_ruby(ruby_args)
|
372
379
|
if result.error?
|
373
380
|
logger.error("RSpec failed!")
|
374
381
|
exit(result.exit_code)
|
@@ -173,25 +173,31 @@ module Toys
|
|
173
173
|
|
174
174
|
set_context_directory template.context_directory if template.context_directory
|
175
175
|
|
176
|
+
static :gem_version, template.gem_version
|
177
|
+
static :rubocop_options, template.options
|
178
|
+
static :fail_on_error, template.fail_on_error
|
179
|
+
|
176
180
|
include :gems
|
177
181
|
include :exec
|
178
182
|
|
179
183
|
bundler_settings = template.bundler_settings
|
180
184
|
include :bundler, **bundler_settings if bundler_settings
|
181
185
|
|
182
|
-
|
183
|
-
|
186
|
+
# @private
|
187
|
+
def run
|
188
|
+
gem "rubocop", *gem_version
|
184
189
|
|
185
190
|
::Dir.chdir(context_directory || ::Dir.getwd) do
|
186
191
|
logger.info "Running RuboCop..."
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
+
code = <<~CODE
|
193
|
+
gem 'rubocop', *#{gem_version.inspect}
|
194
|
+
require 'rubocop'
|
195
|
+
exit(::RuboCop::CLI.new.run(#{rubocop_options.inspect}))
|
196
|
+
CODE
|
197
|
+
result = exec_ruby(["-e", code])
|
192
198
|
if result.error?
|
193
199
|
logger.error "RuboCop failed!"
|
194
|
-
exit(1) if
|
200
|
+
exit(1) if fail_on_error
|
195
201
|
end
|
196
202
|
end
|
197
203
|
end
|
@@ -464,6 +464,23 @@ module Toys
|
|
464
464
|
static :generate_output, template.generate_output
|
465
465
|
end
|
466
466
|
|
467
|
+
static :gem_version, template.gem_version
|
468
|
+
static :template_files, template.files
|
469
|
+
static :run_options, template.options.dup
|
470
|
+
static :stats_options, template.stats_options.dup
|
471
|
+
static :fail_on_undocumented_objects, template.fail_on_undocumented_objects
|
472
|
+
static :fail_on_warning, template.fail_on_warning
|
473
|
+
static :output_dir, template.output_dir
|
474
|
+
static :show_public, template.show_public
|
475
|
+
static :show_protected, template.show_protected
|
476
|
+
static :show_private, template.show_private
|
477
|
+
static :hide_private_tag, template.hide_private_tag
|
478
|
+
static :readme, template.readme
|
479
|
+
static :markup, template.markup
|
480
|
+
static :yard_template, template.template
|
481
|
+
static :template_path, template.template_path
|
482
|
+
static :yard_format, template.format
|
483
|
+
|
467
484
|
include :exec
|
468
485
|
include :terminal
|
469
486
|
include :gems
|
@@ -471,60 +488,60 @@ module Toys
|
|
471
488
|
bundler_settings = template.bundler_settings
|
472
489
|
include :bundler, **bundler_settings if bundler_settings
|
473
490
|
|
474
|
-
|
475
|
-
|
476
|
-
gem "yard", *
|
491
|
+
# @private
|
492
|
+
def run # rubocop:disable all
|
493
|
+
gem "yard", *gem_version
|
477
494
|
|
478
495
|
::Dir.chdir(context_directory || ::Dir.getwd) do
|
479
496
|
files = []
|
480
|
-
|
497
|
+
template_files.each do |pattern|
|
481
498
|
files.concat(::Dir.glob(pattern))
|
482
499
|
end
|
483
500
|
files.uniq!
|
484
501
|
|
485
|
-
|
486
|
-
|
487
|
-
stats_options << "--list-undoc" if template.fail_on_undocumented_objects
|
488
|
-
run_options << "--fail-on-warning" if template.fail_on_warning
|
502
|
+
stats_options << "--list-undoc" if fail_on_undocumented_objects
|
503
|
+
run_options << "--fail-on-warning" if fail_on_warning
|
489
504
|
run_options << "--no-output" unless generate_output
|
490
|
-
run_options << "--output-dir" <<
|
491
|
-
run_options << "--no-public" unless
|
492
|
-
run_options << "--protected" if
|
493
|
-
run_options << "--private" if
|
494
|
-
run_options << "--no-private" if
|
495
|
-
run_options << "-r" <<
|
496
|
-
run_options << "-m" <<
|
497
|
-
run_options << "-t" <<
|
498
|
-
run_options << "-p" <<
|
499
|
-
run_options << "-f" <<
|
505
|
+
run_options << "--output-dir" << output_dir if output_dir
|
506
|
+
run_options << "--no-public" unless show_public
|
507
|
+
run_options << "--protected" if show_protected
|
508
|
+
run_options << "--private" if show_private
|
509
|
+
run_options << "--no-private" if hide_private_tag
|
510
|
+
run_options << "-r" << readme if readme
|
511
|
+
run_options << "-m" << markup if markup
|
512
|
+
run_options << "-t" << yard_template if yard_template
|
513
|
+
run_options << "-p" << template_path if template_path
|
514
|
+
run_options << "-f" << yard_format if yard_format
|
500
515
|
unless stats_options.empty?
|
501
516
|
run_options << "--no-stats"
|
502
517
|
stats_options << "--use-cache"
|
503
518
|
end
|
504
519
|
run_options.concat(files)
|
505
520
|
|
506
|
-
|
507
|
-
|
508
|
-
|
509
|
-
|
510
|
-
|
521
|
+
code = <<~CODE
|
522
|
+
gem 'yard', *#{gem_version.inspect}
|
523
|
+
require 'yard'
|
524
|
+
::YARD::CLI::Yardoc.run(*#{run_options.inspect})
|
525
|
+
CODE
|
526
|
+
result = exec_ruby(["-e", code])
|
511
527
|
if result.error?
|
512
528
|
puts("Yardoc encountered errors", :red, :bold) unless verbosity.negative?
|
513
529
|
exit(1)
|
514
530
|
end
|
515
531
|
unless stats_options.empty?
|
516
|
-
|
517
|
-
|
518
|
-
|
519
|
-
|
520
|
-
|
532
|
+
code = <<~CODE
|
533
|
+
gem 'yard', *#{gem_version.inspect}
|
534
|
+
require 'yard'
|
535
|
+
::YARD::CLI::Stats.run(*#{stats_options.inspect})
|
536
|
+
CODE
|
537
|
+
result = exec_ruby(["-e", code], out: :capture)
|
521
538
|
puts result.captured_out
|
522
539
|
if result.error?
|
523
540
|
puts("Yardoc encountered errors", :red, :bold) unless verbosity.negative?
|
524
541
|
exit(1)
|
525
542
|
end
|
526
543
|
exit_on_nonzero_status(result)
|
527
|
-
if
|
544
|
+
if fail_on_undocumented_objects && result.captured_out =~ /Undocumented\sObjects:/
|
528
545
|
unless verbosity.negative?
|
529
546
|
puts("Yardoc encountered undocumented objects", :red, :bold)
|
530
547
|
end
|
data/lib/toys/testing.rb
CHANGED
data/lib/toys/version.rb
CHANGED
data/lib/toys.rb
CHANGED
@@ -8,6 +8,7 @@ require "toys/version"
|
|
8
8
|
# don't get clobbered in case someone sets up bundler later.
|
9
9
|
unless ::ENV.key?("TOYS_CORE_LIB_PATH")
|
10
10
|
path = ::File.expand_path("../../toys-core-#{::Toys::VERSION}/lib", __dir__)
|
11
|
+
path = ::File.expand_path("../../toys-core/lib", __dir__) unless path && ::File.directory?(path)
|
11
12
|
unless path && ::File.directory?(path)
|
12
13
|
require "rubygems"
|
13
14
|
dep = ::Gem::Dependency.new("toys-core", "= #{::Toys::VERSION}")
|
@@ -30,6 +31,24 @@ require "toys-core"
|
|
30
31
|
# workflows. It can also be used as a Rake replacement, providing a more
|
31
32
|
# natural command line interface for your project's build tasks.
|
32
33
|
#
|
34
|
+
# This set of documentation includes classes from both Toys-Core, the
|
35
|
+
# underlying command line framework, and the Toys executable itself. Most of
|
36
|
+
# the actual classes you will likely need to look up are from Toys-Core.
|
37
|
+
#
|
38
|
+
# ## Common starting points
|
39
|
+
#
|
40
|
+
# * For information on the DSL used to write tools, start with
|
41
|
+
# {Toys::DSL::Tool}.
|
42
|
+
# * The base class for tool runtime (i.e. that defines the basic methods
|
43
|
+
# available to a tool's implementation) is {Toys::Context}.
|
44
|
+
# * For information on writing mixins, see {Toys::Mixin}.
|
45
|
+
# * For information on writing templates, see {Toys::Template}.
|
46
|
+
# * For information on writing acceptors, see {Toys::Acceptor}.
|
47
|
+
# * For information on writing custom shell completions, see {Toys::Completion}.
|
48
|
+
# * Standard mixins are defined under the {Toys::StandardMixins} module.
|
49
|
+
# * Various utilities are defined under {Toys::Utils}. Some of these serve as
|
50
|
+
# the implementations of corresponding mixins.
|
51
|
+
#
|
33
52
|
module Toys
|
34
53
|
##
|
35
54
|
# Path to the Toys executable.
|
@@ -47,6 +66,9 @@ module Toys
|
|
47
66
|
##
|
48
67
|
# Namespace for standard template classes.
|
49
68
|
#
|
69
|
+
# These templates are provided by Toys and can be expanded by name by passing
|
70
|
+
# a symbol to {Toys::DSL::Tool#expand}.
|
71
|
+
#
|
50
72
|
module Templates; end
|
51
73
|
end
|
52
74
|
|
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.
|
4
|
+
version: 0.15.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: 2023-
|
11
|
+
date: 2023-10-13 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.
|
19
|
+
version: 0.15.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.
|
26
|
+
version: 0.15.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
|
@@ -98,6 +98,7 @@ files:
|
|
98
98
|
- core-docs/toys/utils/git_cache.rb
|
99
99
|
- core-docs/toys/utils/help_text.rb
|
100
100
|
- core-docs/toys/utils/pager.rb
|
101
|
+
- core-docs/toys/utils/standard_ui.rb
|
101
102
|
- core-docs/toys/utils/terminal.rb
|
102
103
|
- core-docs/toys/utils/xdg.rb
|
103
104
|
- core-docs/toys/wrappable_string.rb
|
@@ -120,10 +121,10 @@ homepage: https://github.com/dazuma/toys
|
|
120
121
|
licenses:
|
121
122
|
- MIT
|
122
123
|
metadata:
|
123
|
-
changelog_uri: https://dazuma.github.io/toys/gems/toys/v0.
|
124
|
+
changelog_uri: https://dazuma.github.io/toys/gems/toys/v0.15.0/file.CHANGELOG.html
|
124
125
|
source_code_uri: https://github.com/dazuma/toys/tree/main/toys
|
125
126
|
bug_tracker_uri: https://github.com/dazuma/toys/issues
|
126
|
-
documentation_uri: https://dazuma.github.io/toys/gems/toys/v0.
|
127
|
+
documentation_uri: https://dazuma.github.io/toys/gems/toys/v0.15.0
|
127
128
|
post_install_message:
|
128
129
|
rdoc_options: []
|
129
130
|
require_paths:
|
@@ -139,7 +140,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
139
140
|
- !ruby/object:Gem::Version
|
140
141
|
version: '0'
|
141
142
|
requirements: []
|
142
|
-
rubygems_version: 3.
|
143
|
+
rubygems_version: 3.4.10
|
143
144
|
signing_key:
|
144
145
|
specification_version: 4
|
145
146
|
summary: A configurable command line tool
|