toys 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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +54 -0
- data/LICENSE.md +16 -24
- data/README.md +263 -57
- data/bin/toys +17 -25
- data/builtins/do.rb +38 -38
- data/builtins/system.rb +111 -30
- data/docs/guide.md +783 -321
- data/lib/toys.rb +32 -34
- data/lib/toys/standard_cli.rb +69 -90
- data/lib/toys/templates/clean.rb +19 -27
- data/lib/toys/templates/gem_build.rb +78 -41
- data/lib/toys/templates/minitest.rb +25 -31
- data/lib/toys/templates/rake.rb +21 -29
- data/lib/toys/templates/rdoc.rb +27 -35
- data/lib/toys/templates/rspec.rb +30 -36
- data/lib/toys/templates/rubocop.rb +21 -29
- data/lib/toys/templates/yardoc.rb +36 -44
- data/lib/toys/version.rb +18 -26
- data/share/bash-completion-remove.sh +26 -0
- data/share/bash-completion.sh +26 -0
- metadata +14 -12
@@ -1,81 +1,97 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
# Copyright
|
3
|
+
# Copyright 2019 Daniel Azuma
|
4
4
|
#
|
5
|
-
#
|
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
|
-
#
|
8
|
-
#
|
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
|
-
#
|
11
|
-
#
|
12
|
-
#
|
13
|
-
#
|
14
|
-
#
|
15
|
-
#
|
16
|
-
#
|
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
|
module Toys
|
33
25
|
module Templates
|
34
26
|
##
|
35
|
-
# A template for tools that build and release gems
|
27
|
+
# A template for tools that build, install, and release gems
|
36
28
|
#
|
37
29
|
class GemBuild
|
38
30
|
include Template
|
39
31
|
|
40
32
|
##
|
41
|
-
# Default tool name
|
33
|
+
# Default tool name.
|
42
34
|
# @return [String]
|
43
35
|
#
|
44
36
|
DEFAULT_TOOL_NAME = "build"
|
45
37
|
|
38
|
+
##
|
39
|
+
# Default output flags. If `output_flags` is set to `true`, this is the
|
40
|
+
# value used.
|
41
|
+
# @return [Array<String>]
|
42
|
+
#
|
43
|
+
DEFAULT_OUTPUT_FLAGS = ["-o", "--output"].freeze
|
44
|
+
|
46
45
|
##
|
47
46
|
# Create the template settings for the GemBuild template.
|
48
47
|
#
|
49
|
-
# @param [String]
|
48
|
+
# @param name [String] Name of the tool to create. Defaults to
|
50
49
|
# {DEFAULT_TOOL_NAME}.
|
51
|
-
# @param [String]
|
50
|
+
# @param gem_name [String] Name of the gem to build. If not provided,
|
52
51
|
# defaults to the first gemspec file it finds.
|
53
|
-
# @param [
|
54
|
-
#
|
55
|
-
#
|
52
|
+
# @param output [String] Path to the gem package to generate. Optional.
|
53
|
+
# If not provided, generates a default file name based on the gem
|
54
|
+
# name and version, under the "pkg" directory.
|
55
|
+
# @param output_flags [Array<String>,true] Provide flags on the tool that
|
56
|
+
# set the output path. Optional. If not provided, no flags are
|
57
|
+
# created. You may set this to an array of flags (e.g. `["-o"]`) or
|
58
|
+
# set to `true` to choose {DEFAULT_OUTPUT_FLAGS}.
|
59
|
+
# @param push_gem [Boolean] If true, pushes the built gem to rubygems.
|
60
|
+
# @param install_gem [Boolean] If true, installs the built gem locally.
|
61
|
+
# @param tag [Boolean] If true, tags the git repo with the gem version.
|
62
|
+
# @param push_tag [Boolean,String] If truthy, pushes the new tag to
|
56
63
|
# a git remote. You may specify which remote by setting the value to
|
57
64
|
# a string. Otherwise, if the value is simply `true`, the "origin"
|
58
65
|
# remote is used by default.
|
59
66
|
#
|
60
67
|
def initialize(name: DEFAULT_TOOL_NAME,
|
61
68
|
gem_name: nil,
|
69
|
+
output: nil,
|
70
|
+
output_flags: nil,
|
62
71
|
push_gem: false,
|
72
|
+
install_gem: false,
|
63
73
|
tag: false,
|
64
74
|
push_tag: false)
|
65
75
|
@name = name
|
66
76
|
@gem_name = gem_name
|
77
|
+
@output = output
|
78
|
+
@output_flags = output_flags == true ? DEFAULT_OUTPUT_FLAGS : output_flags
|
67
79
|
@push_gem = push_gem
|
80
|
+
@install_gem = install_gem
|
68
81
|
@tag = tag
|
69
82
|
@push_tag = push_tag
|
70
83
|
end
|
71
84
|
|
72
85
|
attr_accessor :name
|
73
86
|
attr_accessor :gem_name
|
87
|
+
attr_accessor :output
|
88
|
+
attr_accessor :output_flags
|
74
89
|
attr_accessor :push_gem
|
90
|
+
attr_accessor :install_gem
|
75
91
|
attr_accessor :tag
|
76
92
|
attr_accessor :push_tag
|
77
93
|
|
78
|
-
|
94
|
+
on_expand do |template|
|
79
95
|
unless template.gem_name
|
80
96
|
candidates = ::Dir.chdir(context_directory || ::Dir.getwd) do
|
81
97
|
::Dir.glob("*.gemspec")
|
@@ -85,12 +101,25 @@ module Toys
|
|
85
101
|
end
|
86
102
|
template.gem_name = candidates.first.sub(/\.gemspec$/, "")
|
87
103
|
end
|
88
|
-
|
104
|
+
task_names = []
|
105
|
+
task_names << "Install" if template.install_gem
|
106
|
+
task_names << "Release" if template.push_gem
|
107
|
+
task_names = task_names.empty? ? "Build" : task_names.join(" and ")
|
89
108
|
|
90
109
|
tool(template.name) do
|
91
|
-
desc "#{
|
110
|
+
desc "#{task_names} the gem: #{template.gem_name}"
|
92
111
|
|
93
112
|
flag :yes, "-y", "--yes", desc: "Do not ask for interactive confirmation"
|
113
|
+
if template.output_flags
|
114
|
+
flag :output do
|
115
|
+
flags(Array(template.output_flags).map { |f| "#{f} VAL" })
|
116
|
+
desc "output gem with the given filename"
|
117
|
+
default template.output
|
118
|
+
complete_values :file_system
|
119
|
+
end
|
120
|
+
else
|
121
|
+
static :output, template.output
|
122
|
+
end
|
94
123
|
|
95
124
|
include :exec, exit_on_nonzero_status: true
|
96
125
|
include :fileutils
|
@@ -99,19 +128,27 @@ module Toys
|
|
99
128
|
to_run do
|
100
129
|
require "rubygems/package"
|
101
130
|
::Dir.chdir(context_directory || ::Dir.getwd) do
|
102
|
-
|
103
|
-
|
104
|
-
gemfile = "#{template.gem_name}-#{version}.gem"
|
131
|
+
gem_name = template.gem_name
|
132
|
+
gemspec = ::Gem::Specification.load("#{gem_name}.gemspec")
|
105
133
|
::Gem::Package.build(gemspec)
|
106
|
-
|
107
|
-
|
134
|
+
version = gemspec.version
|
135
|
+
archive_name = "#{gem_name}-#{version}.gem"
|
136
|
+
archive_path = output || "pkg/#{archive_name}"
|
137
|
+
if archive_name != archive_path
|
138
|
+
mkdir_p(::File.dirname(archive_path))
|
139
|
+
mv(archive_name, archive_path)
|
140
|
+
end
|
141
|
+
if template.install_gem
|
142
|
+
exit(1) unless yes || confirm("Install #{gem_name} #{version}? ", default: true)
|
143
|
+
exec ["gem", "install", archive_path]
|
144
|
+
end
|
108
145
|
if template.push_gem
|
109
146
|
if ::File.directory?(".git") && capture("git status -s").strip != ""
|
110
147
|
logger.error "Cannot push the gem when there are uncommited changes"
|
111
148
|
exit(1)
|
112
149
|
end
|
113
|
-
exit(1) unless yes || confirm("Release #{
|
114
|
-
exec(["gem", "push",
|
150
|
+
exit(1) unless yes || confirm("Release #{gem_name} #{version}? ", default: true)
|
151
|
+
exec(["gem", "push", archive_path])
|
115
152
|
if template.tag
|
116
153
|
exec(["git", "tag", "v#{version}"])
|
117
154
|
if template.push_tag
|
@@ -1,32 +1,24 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
# Copyright
|
3
|
+
# Copyright 2019 Daniel Azuma
|
4
4
|
#
|
5
|
-
#
|
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
|
-
#
|
8
|
-
#
|
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
|
-
#
|
11
|
-
#
|
12
|
-
#
|
13
|
-
#
|
14
|
-
#
|
15
|
-
#
|
16
|
-
#
|
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
|
module Toys
|
@@ -64,15 +56,15 @@ module Toys
|
|
64
56
|
##
|
65
57
|
# Create the template settings for the Minitest template.
|
66
58
|
#
|
67
|
-
# @param [String]
|
59
|
+
# @param name [String] Name of the tool to create. Defaults to
|
68
60
|
# {DEFAULT_TOOL_NAME}.
|
69
|
-
# @param [String,Array<String>]
|
61
|
+
# @param gem_version [String,Array<String>] Version requirements for
|
70
62
|
# the minitest gem. Defaults to {DEFAULT_GEM_VERSION_REQUIREMENTS}.
|
71
|
-
# @param [Array<String>]
|
63
|
+
# @param libs [Array<String>] An array of library paths to add to the
|
72
64
|
# ruby require path. Defaults to {DEFAULT_LIBS}.
|
73
|
-
# @param [Array<String>]
|
65
|
+
# @param files [Array<String>] An array of globs indicating the test
|
74
66
|
# files to load. Defaults to {DEFAULT_FILES}.
|
75
|
-
# @param [Boolean]
|
67
|
+
# @param warnings [Boolean] If true, runs tests with Ruby warnings.
|
76
68
|
# Defaults to true.
|
77
69
|
#
|
78
70
|
def initialize(name: nil,
|
@@ -99,7 +91,7 @@ module Toys
|
|
99
91
|
attr_accessor :verbose
|
100
92
|
attr_accessor :warnings
|
101
93
|
|
102
|
-
|
94
|
+
on_expand do |template|
|
103
95
|
tool(template.name) do
|
104
96
|
desc "Run minitest on the current project."
|
105
97
|
|
@@ -116,7 +108,9 @@ module Toys
|
|
116
108
|
flag :exclude, "-e", "--exclude PATTERN",
|
117
109
|
desc: "Exclude /regexp/ or string from run."
|
118
110
|
|
119
|
-
remaining_args :tests,
|
111
|
+
remaining_args :tests,
|
112
|
+
complete: :file_system,
|
113
|
+
desc: "Paths to the tests to run (defaults to all tests)"
|
120
114
|
|
121
115
|
to_run do
|
122
116
|
gem "minitest", *Array(template.gem_version)
|
data/lib/toys/templates/rake.rb
CHANGED
@@ -1,32 +1,24 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
# Copyright
|
3
|
+
# Copyright 2019 Daniel Azuma
|
4
4
|
#
|
5
|
-
#
|
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
|
-
#
|
8
|
-
#
|
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
|
-
#
|
11
|
-
#
|
12
|
-
#
|
13
|
-
#
|
14
|
-
#
|
15
|
-
#
|
16
|
-
#
|
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
|
module Toys
|
@@ -46,13 +38,13 @@ module Toys
|
|
46
38
|
##
|
47
39
|
# Create the template settings for the rake template.
|
48
40
|
#
|
49
|
-
# @param [String,Array<String>,nil]
|
41
|
+
# @param gem_version [String,Array<String>,nil] Version requirements for
|
50
42
|
# the rake gem. Defaults to nil, indicating no version requirement.
|
51
|
-
# @param [String]
|
43
|
+
# @param rakefile_path [String] Path to the Rakefile. Defaults to
|
52
44
|
# {DEFAULT_RAKEFILE_PATH}.
|
53
|
-
# @param [Boolean]
|
45
|
+
# @param only_described [Boolean] If true, tools are generated only for
|
54
46
|
# rake tasks with descriptions. Default is false.
|
55
|
-
# @param [Boolean]
|
47
|
+
# @param use_flags [Boolean] Generated tools use flags instead of
|
56
48
|
# positional arguments to pass arguments to rake tasks. Default is
|
57
49
|
# false.
|
58
50
|
#
|
@@ -71,7 +63,7 @@ module Toys
|
|
71
63
|
attr_accessor :only_described
|
72
64
|
attr_accessor :use_flags
|
73
65
|
|
74
|
-
|
66
|
+
on_expand do |template|
|
75
67
|
gem "rake", *Array(template.gem_version)
|
76
68
|
require "rake"
|
77
69
|
rakefile_path = Templates::Rake.find_rakefile(template.rakefile_path, context_directory)
|
data/lib/toys/templates/rdoc.rb
CHANGED
@@ -1,32 +1,24 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
# Copyright
|
3
|
+
# Copyright 2019 Daniel Azuma
|
4
4
|
#
|
5
|
-
#
|
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
|
-
#
|
8
|
-
#
|
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
|
-
#
|
11
|
-
#
|
12
|
-
#
|
13
|
-
#
|
14
|
-
#
|
15
|
-
#
|
16
|
-
#
|
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
|
module Toys
|
@@ -58,25 +50,25 @@ module Toys
|
|
58
50
|
##
|
59
51
|
# Create the template settings for the Rdoc template.
|
60
52
|
#
|
61
|
-
# @param [String]
|
53
|
+
# @param name [String] Name of the tool to create. Defaults to
|
62
54
|
# {DEFAULT_TOOL_NAME}.
|
63
|
-
# @param [String,Array<String>]
|
55
|
+
# @param gem_version [String,Array<String>] Version requirements for
|
64
56
|
# the rdoc gem. Defaults to {DEFAULT_GEM_VERSION_REQUIREMENTS}.
|
65
|
-
# @param [Array<String>]
|
57
|
+
# @param files [Array<String>] An array of globs indicating the files
|
66
58
|
# to document.
|
67
|
-
# @param [String]
|
59
|
+
# @param output_dir [String] Name of directory to receive html output
|
68
60
|
# files. Defaults to {DEFAULT_OUTPUT_DIR}.
|
69
|
-
# @param [String,nil]
|
61
|
+
# @param markup [String,nil] Markup format. Allowed values include
|
70
62
|
# "rdoc", "rd", and "tomdoc". Default is "rdoc".
|
71
|
-
# @param [String,nil]
|
63
|
+
# @param title [String,nil] Title of RDoc documentation. If `nil`, RDoc
|
72
64
|
# will use a default title.
|
73
|
-
# @param [String,nil]
|
65
|
+
# @param main [String,nil] Name of the file to use as the main top level
|
74
66
|
# document. Default is none.
|
75
|
-
# @param [String,nil]
|
67
|
+
# @param template [String,nil] Name of the template to use. If `nil`,
|
76
68
|
# RDoc will use its default template.
|
77
|
-
# @param [String,nil]
|
69
|
+
# @param generator [String,nil] Name of the format generator. If `nil`,
|
78
70
|
# RDoc will use its default generator.
|
79
|
-
# @param [Array<String>]
|
71
|
+
# @param options [Array<String>] Additional options to pass to RDoc.
|
80
72
|
#
|
81
73
|
def initialize(name: nil,
|
82
74
|
gem_version: nil,
|
@@ -111,7 +103,7 @@ module Toys
|
|
111
103
|
attr_accessor :generator
|
112
104
|
attr_accessor :options
|
113
105
|
|
114
|
-
|
106
|
+
on_expand do |template|
|
115
107
|
tool(template.name) do
|
116
108
|
desc "Run rdoc on the current project."
|
117
109
|
|
data/lib/toys/templates/rspec.rb
CHANGED
@@ -1,32 +1,24 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
# Copyright
|
3
|
+
# Copyright 2019 Daniel Azuma
|
4
4
|
#
|
5
|
-
#
|
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
|
-
#
|
8
|
-
#
|
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
|
-
#
|
11
|
-
#
|
12
|
-
#
|
13
|
-
#
|
14
|
-
#
|
15
|
-
#
|
16
|
-
#
|
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
|
module Toys
|
@@ -70,21 +62,21 @@ module Toys
|
|
70
62
|
##
|
71
63
|
# Create the template settings for the RSpec template.
|
72
64
|
#
|
73
|
-
# @param [String]
|
65
|
+
# @param name [String] Name of the tool to create. Defaults to
|
74
66
|
# {DEFAULT_TOOL_NAME}.
|
75
|
-
# @param [String,Array<String>]
|
67
|
+
# @param gem_version [String,Array<String>] Version requirements for
|
76
68
|
# the rspec gem. Defaults to {DEFAULT_GEM_VERSION_REQUIREMENTS}.
|
77
|
-
# @param [Array<String>]
|
69
|
+
# @param libs [Array<String>] An array of library paths to add to the
|
78
70
|
# ruby require path. Defaults to {DEFAULT_LIBS}.
|
79
|
-
# @param [String]
|
80
|
-
# @param [String]
|
71
|
+
# @param options [String] The path to a custom options file.
|
72
|
+
# @param order [String] The order in which to run examples. Default is
|
81
73
|
# {DEFAULT_ORDER}.
|
82
|
-
# @param [String]
|
83
|
-
# @param [String]
|
84
|
-
# @param [Boolean]
|
85
|
-
# @param [String]
|
74
|
+
# @param format [String] Choose a formatter code. Default is `p`.
|
75
|
+
# @param out [String] Write output to a file instead of stdout.
|
76
|
+
# @param backtrace [Boolean] Enable full backtrace (default is false).
|
77
|
+
# @param pattern [String] A glob indicating the spec files to load.
|
86
78
|
# Defaults to {DEFAULT_PATTERN}.
|
87
|
-
# @param [Boolean]
|
79
|
+
# @param warnings [Boolean] If true, runs specs with Ruby warnings.
|
88
80
|
# Defaults to true.
|
89
81
|
#
|
90
82
|
def initialize(name: nil,
|
@@ -120,7 +112,7 @@ module Toys
|
|
120
112
|
attr_accessor :pattern
|
121
113
|
attr_accessor :warnings
|
122
114
|
|
123
|
-
|
115
|
+
on_expand do |template|
|
124
116
|
tool(template.name) do
|
125
117
|
desc "Run rspec on the current project."
|
126
118
|
|
@@ -154,7 +146,9 @@ module Toys
|
|
154
146
|
desc: "Run examples with the specified tag, or exclude" \
|
155
147
|
" examples by adding ~ before the tag."
|
156
148
|
|
157
|
-
remaining_args :files,
|
149
|
+
remaining_args :files,
|
150
|
+
complete: :file_system,
|
151
|
+
desc: "Paths to the specs to run (defaults to all specs)"
|
158
152
|
|
159
153
|
to_run do
|
160
154
|
gem "rspec", *Array(template.gem_version)
|