toys 0.9.4 → 0.10.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/.yardopts +2 -1
- data/CHANGELOG.md +16 -0
- data/LICENSE.md +1 -1
- data/README.md +3 -3
- data/bin/toys +0 -21
- data/builtins/do.rb +0 -20
- data/builtins/system.rb +1 -20
- data/docs/guide.md +332 -57
- data/lib/toys.rb +20 -32
- data/lib/toys/standard_cli.rb +0 -23
- data/lib/toys/templates/clean.rb +27 -26
- data/lib/toys/templates/gem_build.rb +127 -53
- data/lib/toys/templates/minitest.rb +148 -36
- data/lib/toys/templates/rake.rb +99 -28
- data/lib/toys/templates/rdoc.rb +193 -50
- data/lib/toys/templates/rspec.rb +190 -41
- data/lib/toys/templates/rubocop.rb +107 -32
- data/lib/toys/templates/yardoc.rb +294 -59
- data/lib/toys/version.rb +1 -22
- data/share/bash-completion-remove.sh +0 -20
- data/share/bash-completion.sh +0 -20
- metadata +25 -11
data/lib/toys/templates/rake.rb
CHANGED
@@ -1,26 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
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
3
|
module Toys
|
25
4
|
module Templates
|
26
5
|
##
|
@@ -47,24 +26,114 @@ module Toys
|
|
47
26
|
# @param use_flags [Boolean] Generated tools use flags instead of
|
48
27
|
# positional arguments to pass arguments to rake tasks. Default is
|
49
28
|
# false.
|
29
|
+
# @param bundler [Boolean,Hash] If `false` (the default), bundler is not
|
30
|
+
# enabled for Rake tools. If `true` or a Hash of options, bundler is
|
31
|
+
# enabled. See the documentation for the
|
32
|
+
# [bundler mixin](https://dazuma.github.io/toys/gems/toys-core/latest/Toys/StandardMixins/Bundler)
|
33
|
+
# for information on available options.
|
50
34
|
#
|
51
35
|
def initialize(gem_version: nil,
|
52
36
|
rakefile_path: nil,
|
53
37
|
only_described: false,
|
54
|
-
use_flags: false
|
38
|
+
use_flags: false,
|
39
|
+
bundler: false)
|
55
40
|
@gem_version = gem_version
|
56
|
-
@rakefile_path = rakefile_path
|
41
|
+
@rakefile_path = rakefile_path
|
57
42
|
@only_described = only_described
|
58
43
|
@use_flags = use_flags
|
44
|
+
@bundler = bundler
|
59
45
|
end
|
60
46
|
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
47
|
+
##
|
48
|
+
# Version requirements for the minitest gem.
|
49
|
+
# If set to `nil`, has no version requirement (unless one is specified in
|
50
|
+
# the bundle.)
|
51
|
+
#
|
52
|
+
# @param value [String,Array<String>,nil]
|
53
|
+
# @return [String,Array<String>,nil]
|
54
|
+
#
|
55
|
+
attr_writer :gem_version
|
56
|
+
|
57
|
+
##
|
58
|
+
# Path to the Rakefile.
|
59
|
+
# If set to `nil`, defaults to {DEFAULT_RAKEFILE_PATH}.
|
60
|
+
#
|
61
|
+
# @param value [String,nil]
|
62
|
+
# @return [String,nil]
|
63
|
+
#
|
64
|
+
attr_writer :rakefile_path
|
65
|
+
|
66
|
+
##
|
67
|
+
# Whether to generate tools only for rake tasks with descriptions.
|
68
|
+
#
|
69
|
+
# @param value [Boolean]
|
70
|
+
# @return [Boolean]
|
71
|
+
#
|
72
|
+
attr_writer :only_described
|
73
|
+
|
74
|
+
##
|
75
|
+
# Whether generated tools should use flags instead of positional
|
76
|
+
# arguments to pass arguments to rake tasks.
|
77
|
+
#
|
78
|
+
# @param value [Boolean]
|
79
|
+
# @return [Boolean]
|
80
|
+
#
|
81
|
+
attr_writer :use_flags
|
82
|
+
|
83
|
+
##
|
84
|
+
# Set the bundler state and options for all Rake tools.
|
85
|
+
#
|
86
|
+
# Pass `false` to disable bundler. Pass `true` or a hash of options to
|
87
|
+
# enable bundler. See the documentation for the
|
88
|
+
# [bundler mixin](https://dazuma.github.io/toys/gems/toys-core/latest/Toys/StandardMixins/Bundler)
|
89
|
+
# for information on the options that can be passed.
|
90
|
+
#
|
91
|
+
# @param value [Boolean,Hash]
|
92
|
+
# @return [Boolean,Hash]
|
93
|
+
#
|
94
|
+
attr_writer :bundler
|
95
|
+
|
96
|
+
##
|
97
|
+
# Use bundler for all Rake tools.
|
98
|
+
#
|
99
|
+
# See the documentation for the
|
100
|
+
# [bundler mixin](https://dazuma.github.io/toys/gems/toys-core/latest/Toys/StandardMixins/Bundler)
|
101
|
+
# for information on the options that can be passed.
|
102
|
+
#
|
103
|
+
# @param opts [keywords] Options for bundler
|
104
|
+
# @return [self]
|
105
|
+
#
|
106
|
+
def use_bundler(**opts)
|
107
|
+
@bundler = opts
|
108
|
+
self
|
109
|
+
end
|
110
|
+
|
111
|
+
# @private
|
112
|
+
attr_reader :only_described
|
113
|
+
# @private
|
114
|
+
attr_reader :use_flags
|
115
|
+
|
116
|
+
# @private
|
117
|
+
def gem_version
|
118
|
+
Array(@gem_version)
|
119
|
+
end
|
120
|
+
|
121
|
+
# @private
|
122
|
+
def rakefile_path
|
123
|
+
@rakefile_path || DEFAULT_RAKEFILE_PATH
|
124
|
+
end
|
125
|
+
|
126
|
+
# @private
|
127
|
+
def bundler_settings
|
128
|
+
if @bundler && !@bundler.is_a?(::Hash)
|
129
|
+
{}
|
130
|
+
else
|
131
|
+
@bundler
|
132
|
+
end
|
133
|
+
end
|
65
134
|
|
66
135
|
on_expand do |template|
|
67
|
-
gem "rake", *
|
136
|
+
gem "rake", *template.gem_version
|
68
137
|
require "rake"
|
69
138
|
rakefile_path = Templates::Rake.find_rakefile(template.rakefile_path, context_directory)
|
70
139
|
raise "Cannot find #{template.rakefile_path}" unless rakefile_path
|
@@ -74,6 +143,8 @@ module Toys
|
|
74
143
|
comments = task.full_comment.to_s.split("\n")
|
75
144
|
next if comments.empty? && template.only_described
|
76
145
|
tool(task.name.split(":"), if_defined: :ignore) do
|
146
|
+
bundler_settings = template.bundler_settings
|
147
|
+
include :bundler, **bundler_settings if bundler_settings
|
77
148
|
unless comments.empty?
|
78
149
|
desc(comments.first)
|
79
150
|
comments << "" << "Defined as a Rake task in #{rakefile_path}"
|
data/lib/toys/templates/rdoc.rb
CHANGED
@@ -1,26 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
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
3
|
module Toys
|
25
4
|
module Templates
|
26
5
|
##
|
@@ -33,7 +12,7 @@ module Toys
|
|
33
12
|
# Default version requirements for the rdoc gem.
|
34
13
|
# @return [Array<String>]
|
35
14
|
#
|
36
|
-
DEFAULT_GEM_VERSION_REQUIREMENTS = "
|
15
|
+
DEFAULT_GEM_VERSION_REQUIREMENTS = ["~> 6.1.0"].freeze
|
37
16
|
|
38
17
|
##
|
39
18
|
# Default tool name
|
@@ -47,6 +26,12 @@ module Toys
|
|
47
26
|
#
|
48
27
|
DEFAULT_OUTPUT_DIR = "html"
|
49
28
|
|
29
|
+
##
|
30
|
+
# Default file globs
|
31
|
+
# @return [Array<String>]
|
32
|
+
#
|
33
|
+
DEFAULT_FILES = ["lib/**/*.rb"].freeze
|
34
|
+
|
50
35
|
##
|
51
36
|
# Create the template settings for the Rdoc template.
|
52
37
|
#
|
@@ -55,53 +40,210 @@ module Toys
|
|
55
40
|
# @param gem_version [String,Array<String>] Version requirements for
|
56
41
|
# the rdoc gem. Defaults to {DEFAULT_GEM_VERSION_REQUIREMENTS}.
|
57
42
|
# @param files [Array<String>] An array of globs indicating the files
|
58
|
-
# to document.
|
43
|
+
# to document. Defaults to {DEFAULT_FILES}.
|
59
44
|
# @param output_dir [String] Name of directory to receive html output
|
60
45
|
# files. Defaults to {DEFAULT_OUTPUT_DIR}.
|
61
|
-
# @param markup [String
|
62
|
-
# "
|
63
|
-
#
|
64
|
-
#
|
65
|
-
#
|
46
|
+
# @param markup [String] Markup format. Allowed values include "rdoc",
|
47
|
+
# "rd", and "tomdoc". If not specified, RDoc will use its default
|
48
|
+
# markup, which is "rdoc".
|
49
|
+
# @param title [String] Title of RDoc documentation. If not specified,
|
50
|
+
# RDoc will use a default title.
|
51
|
+
# @param main [String] Name of the file to use as the main top level
|
66
52
|
# document. Default is none.
|
67
|
-
# @param template [String
|
53
|
+
# @param template [String] Name of the template to use. If not specified,
|
68
54
|
# RDoc will use its default template.
|
69
|
-
# @param generator [String
|
70
|
-
# RDoc will use its default generator.
|
55
|
+
# @param generator [String] Name of the format generator. If not
|
56
|
+
# specified, RDoc will use its default generator.
|
71
57
|
# @param options [Array<String>] Additional options to pass to RDoc.
|
58
|
+
# @param bundler [Boolean,Hash] If `false` (the default), bundler is not
|
59
|
+
# enabled for this tool. If `true` or a Hash of options, bundler is
|
60
|
+
# enabled. See the documentation for the
|
61
|
+
# [bundler mixin](https://dazuma.github.io/toys/gems/toys-core/latest/Toys/StandardMixins/Bundler)
|
62
|
+
# for information on available options.
|
72
63
|
#
|
73
64
|
def initialize(name: nil,
|
74
65
|
gem_version: nil,
|
75
|
-
files:
|
66
|
+
files: nil,
|
76
67
|
output_dir: nil,
|
77
68
|
markup: nil,
|
78
69
|
title: nil,
|
79
70
|
main: nil,
|
80
71
|
template: nil,
|
81
72
|
generator: nil,
|
82
|
-
options: []
|
83
|
-
|
84
|
-
@
|
73
|
+
options: [],
|
74
|
+
bundler: false)
|
75
|
+
@name = name
|
76
|
+
@gem_version = gem_version
|
85
77
|
@files = files
|
86
|
-
@output_dir = output_dir
|
78
|
+
@output_dir = output_dir
|
87
79
|
@markup = markup
|
88
80
|
@title = title
|
89
81
|
@main = main
|
90
82
|
@template = template
|
91
83
|
@generator = generator
|
92
84
|
@options = options
|
85
|
+
@bundler = bundler
|
93
86
|
end
|
94
87
|
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
88
|
+
##
|
89
|
+
# Name of the tool to create.
|
90
|
+
#
|
91
|
+
# @param value [String]
|
92
|
+
# @return [String]
|
93
|
+
#
|
94
|
+
attr_writer :name
|
95
|
+
|
96
|
+
##
|
97
|
+
# Version requirements for the rdoc gem.
|
98
|
+
# If set to `nil`, uses the bundled version if bundler is enabled, or
|
99
|
+
# defaults to {DEFAULT_GEM_VERSION_REQUIREMENTS} if bundler is not
|
100
|
+
# enabled.
|
101
|
+
#
|
102
|
+
# @param value [String,Array<String>,nil]
|
103
|
+
# @return [String,Array<String>,nil]
|
104
|
+
#
|
105
|
+
attr_writer :gem_version
|
106
|
+
|
107
|
+
##
|
108
|
+
# An array of globs indicating which files to document.
|
109
|
+
#
|
110
|
+
# @param value [Array<String>]
|
111
|
+
# @return [Array<String>]
|
112
|
+
#
|
113
|
+
attr_writer :files
|
114
|
+
|
115
|
+
##
|
116
|
+
# Name of directory to receive html output files.
|
117
|
+
# If set to `nil`, defaults to {DEFAULT_OUTPUT_DIR}.
|
118
|
+
#
|
119
|
+
# @param value [String,nil]
|
120
|
+
# @return [String,nil]
|
121
|
+
#
|
122
|
+
attr_writer :output_dir
|
123
|
+
|
124
|
+
##
|
125
|
+
# Markup format. Allowed values include "rdoc", "rd", and "tomdoc".
|
126
|
+
# If set to `nil`, RDoc will use its default markup, which is "rdoc".
|
127
|
+
#
|
128
|
+
# @param value [String,nil]
|
129
|
+
# @return [String,nil]
|
130
|
+
#
|
131
|
+
attr_writer :markup
|
132
|
+
|
133
|
+
##
|
134
|
+
# Title of RDoc documentation pages.
|
135
|
+
# If set to `nil`, RDoc will use a default title.
|
136
|
+
#
|
137
|
+
# @param value [String,nil]
|
138
|
+
# @return [String,nil]
|
139
|
+
#
|
140
|
+
attr_writer :title
|
141
|
+
|
142
|
+
##
|
143
|
+
# Name of the file to use as the main top level document, or `nil` for
|
144
|
+
# no top level document.
|
145
|
+
#
|
146
|
+
# @param value [String,nil]
|
147
|
+
# @return [String,nil]
|
148
|
+
#
|
149
|
+
attr_writer :main
|
150
|
+
|
151
|
+
##
|
152
|
+
# Name of the template to use.
|
153
|
+
# If set to `nil`, RDoc will choose a default template.
|
154
|
+
#
|
155
|
+
# @param value [String,nil]
|
156
|
+
# @return [String,nil]
|
157
|
+
#
|
158
|
+
attr_writer :template
|
159
|
+
|
160
|
+
##
|
161
|
+
# Name of the format generator.
|
162
|
+
# If set to `nil`, RDoc will use its default generator.
|
163
|
+
#
|
164
|
+
# @param value [String,nil]
|
165
|
+
# @return [String,nil]
|
166
|
+
#
|
167
|
+
attr_writer :generator
|
168
|
+
|
169
|
+
##
|
170
|
+
# Additional options to pass to RDoc
|
171
|
+
#
|
172
|
+
# @param value [Array<String>]
|
173
|
+
# @return [Array<String>]
|
174
|
+
#
|
175
|
+
attr_writer :options
|
176
|
+
|
177
|
+
##
|
178
|
+
# Set the bundler state and options for this tool.
|
179
|
+
#
|
180
|
+
# Pass `false` to disable bundler. Pass `true` or a hash of options to
|
181
|
+
# enable bundler. See the documentation for the
|
182
|
+
# [bundler mixin](https://dazuma.github.io/toys/gems/toys-core/latest/Toys/StandardMixins/Bundler)
|
183
|
+
# for information on the options that can be passed.
|
184
|
+
#
|
185
|
+
# @param value [Boolean,Hash]
|
186
|
+
# @return [Boolean,Hash]
|
187
|
+
#
|
188
|
+
attr_writer :bundler
|
189
|
+
|
190
|
+
##
|
191
|
+
# Use bundler for this tool.
|
192
|
+
#
|
193
|
+
# See the documentation for the
|
194
|
+
# [bundler mixin](https://dazuma.github.io/toys/gems/toys-core/latest/Toys/StandardMixins/Bundler)
|
195
|
+
# for information on the options that can be passed.
|
196
|
+
#
|
197
|
+
# @param opts [keywords] Options for bundler
|
198
|
+
# @return [self]
|
199
|
+
#
|
200
|
+
def use_bundler(**opts)
|
201
|
+
@bundler = opts
|
202
|
+
self
|
203
|
+
end
|
204
|
+
|
205
|
+
# @private
|
206
|
+
attr_reader :markup
|
207
|
+
# @private
|
208
|
+
attr_reader :title
|
209
|
+
# @private
|
210
|
+
attr_reader :main
|
211
|
+
# @private
|
212
|
+
attr_reader :template
|
213
|
+
# @private
|
214
|
+
attr_reader :generator
|
215
|
+
# @private
|
216
|
+
attr_reader :options
|
217
|
+
|
218
|
+
# @private
|
219
|
+
def name
|
220
|
+
@name || DEFAULT_TOOL_NAME
|
221
|
+
end
|
222
|
+
|
223
|
+
# @private
|
224
|
+
def gem_version
|
225
|
+
return Array(@gem_version) if @gem_version
|
226
|
+
@bundler ? [] : DEFAULT_GEM_VERSION_REQUIREMENTS
|
227
|
+
end
|
228
|
+
|
229
|
+
# @private
|
230
|
+
def files
|
231
|
+
@files ? Array(@files) : DEFAULT_FILES
|
232
|
+
end
|
233
|
+
|
234
|
+
# @private
|
235
|
+
def output_dir
|
236
|
+
@output_dir || DEFAULT_OUTPUT_DIR
|
237
|
+
end
|
238
|
+
|
239
|
+
# @private
|
240
|
+
def bundler_settings
|
241
|
+
if @bundler && !@bundler.is_a?(::Hash)
|
242
|
+
{}
|
243
|
+
else
|
244
|
+
@bundler
|
245
|
+
end
|
246
|
+
end
|
105
247
|
|
106
248
|
on_expand do |template|
|
107
249
|
tool(template.name) do
|
@@ -110,15 +252,16 @@ module Toys
|
|
110
252
|
include :exec, exit_on_nonzero_status: true
|
111
253
|
include :gems
|
112
254
|
|
255
|
+
bundler_settings = template.bundler_settings
|
256
|
+
include :bundler, **bundler_settings if bundler_settings
|
257
|
+
|
113
258
|
to_run do
|
114
259
|
gem_requirements = Array(template.gem_version)
|
115
260
|
gem "rdoc", *gem_requirements
|
116
261
|
|
117
262
|
::Dir.chdir(context_directory || ::Dir.getwd) do
|
118
263
|
files = []
|
119
|
-
|
120
|
-
patterns = ["lib/**/*.rb"] if patterns.empty?
|
121
|
-
patterns.each do |pattern|
|
264
|
+
template.files.each do |pattern|
|
122
265
|
files.concat(::Dir.glob(pattern))
|
123
266
|
end
|
124
267
|
files.uniq!
|
@@ -134,7 +277,7 @@ module Toys
|
|
134
277
|
exec_ruby([], in: :controller) do |controller|
|
135
278
|
controller.in.puts("gem 'rdoc', *#{gem_requirements.inspect}")
|
136
279
|
controller.in.puts("require 'rdoc'")
|
137
|
-
controller.in.puts("::RDoc::RDoc.new.document(
|
280
|
+
controller.in.puts("::RDoc::RDoc.new.document(#{(args + files).inspect})")
|
138
281
|
end
|
139
282
|
end
|
140
283
|
end
|