toys 0.3.1 → 0.3.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.yardopts +0 -2
- data/CHANGELOG.md +20 -0
- data/README.md +4 -24
- data/bin/toys +1 -1
- data/{lib/toys/builtins → builtins}/do.rb +1 -1
- data/{lib/toys/builtins → builtins}/system.rb +0 -0
- data/lib/toys.rb +9 -14
- data/lib/toys/standard_cli.rb +151 -0
- data/lib/toys/version.rb +2 -2
- metadata +19 -28
- data/lib/toys/cli.rb +0 -271
- data/lib/toys/config_dsl.rb +0 -432
- data/lib/toys/context.rb +0 -278
- data/lib/toys/errors.rb +0 -42
- data/lib/toys/helpers.rb +0 -52
- data/lib/toys/helpers/exec.rb +0 -469
- data/lib/toys/helpers/file_utils.rb +0 -39
- data/lib/toys/loader.rb +0 -423
- data/lib/toys/middleware.rb +0 -55
- data/lib/toys/middleware/base.rb +0 -51
- data/lib/toys/middleware/set_verbosity.rb +0 -54
- data/lib/toys/middleware/show_group_usage.rb +0 -68
- data/lib/toys/middleware/show_tool_usage.rb +0 -64
- data/lib/toys/middleware/show_usage_errors.rb +0 -57
- data/lib/toys/template.rb +0 -123
- data/lib/toys/templates.rb +0 -55
- data/lib/toys/templates/clean.rb +0 -80
- data/lib/toys/templates/gem_build.rb +0 -115
- data/lib/toys/templates/minitest.rb +0 -108
- data/lib/toys/templates/rubocop.rb +0 -81
- data/lib/toys/templates/yardoc.rb +0 -95
- data/lib/toys/tool.rb +0 -831
- data/lib/toys/utils/module_lookup.rb +0 -101
- data/lib/toys/utils/usage.rb +0 -163
data/lib/toys/templates.rb
DELETED
@@ -1,55 +0,0 @@
|
|
1
|
-
# Copyright 2018 Daniel Azuma
|
2
|
-
#
|
3
|
-
# All rights reserved.
|
4
|
-
#
|
5
|
-
# Redistribution and use in source and binary forms, with or without
|
6
|
-
# modification, are permitted provided that the following conditions are met:
|
7
|
-
#
|
8
|
-
# * Redistributions of source code must retain the above copyright notice,
|
9
|
-
# this list of conditions and the following disclaimer.
|
10
|
-
# * Redistributions in binary form must reproduce the above copyright notice,
|
11
|
-
# this list of conditions and the following disclaimer in the documentation
|
12
|
-
# and/or other materials provided with the distribution.
|
13
|
-
# * Neither the name of the copyright holder, nor the names of any other
|
14
|
-
# contributors to this software, may be used to endorse or promote products
|
15
|
-
# derived from this software without specific prior written permission.
|
16
|
-
#
|
17
|
-
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
18
|
-
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
19
|
-
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
20
|
-
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
21
|
-
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
22
|
-
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
23
|
-
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
24
|
-
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
25
|
-
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
26
|
-
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
27
|
-
# POSSIBILITY OF SUCH DAMAGE.
|
28
|
-
;
|
29
|
-
|
30
|
-
require "toys/utils/module_lookup"
|
31
|
-
|
32
|
-
module Toys
|
33
|
-
##
|
34
|
-
# Namespace for common templates
|
35
|
-
#
|
36
|
-
module Templates
|
37
|
-
##
|
38
|
-
# Return a template class by name.
|
39
|
-
#
|
40
|
-
# Currently recognized template names are:
|
41
|
-
#
|
42
|
-
# * `:clean` : Creates a tool that cleans build artifacts.
|
43
|
-
# * `:gem_build` : Creates a tool that builds and/or releases gems.
|
44
|
-
# * `:minitest` : Creates a tool that runs unit tests.
|
45
|
-
# * `:rubocop` : Creates a tool that runs rubocop.
|
46
|
-
# * `:yardoc` : Creates a tool that generates YARD documentation.
|
47
|
-
#
|
48
|
-
# @param [String,Symbol] name Name of the template class to return
|
49
|
-
# @return [Class,nil] The class, or `nil` if not found
|
50
|
-
#
|
51
|
-
def self.lookup(name)
|
52
|
-
Utils::ModuleLookup.lookup(:templates, name)
|
53
|
-
end
|
54
|
-
end
|
55
|
-
end
|
data/lib/toys/templates/clean.rb
DELETED
@@ -1,80 +0,0 @@
|
|
1
|
-
# Copyright 2018 Daniel Azuma
|
2
|
-
#
|
3
|
-
# All rights reserved.
|
4
|
-
#
|
5
|
-
# Redistribution and use in source and binary forms, with or without
|
6
|
-
# modification, are permitted provided that the following conditions are met:
|
7
|
-
#
|
8
|
-
# * Redistributions of source code must retain the above copyright notice,
|
9
|
-
# this list of conditions and the following disclaimer.
|
10
|
-
# * Redistributions in binary form must reproduce the above copyright notice,
|
11
|
-
# this list of conditions and the following disclaimer in the documentation
|
12
|
-
# and/or other materials provided with the distribution.
|
13
|
-
# * Neither the name of the copyright holder, nor the names of any other
|
14
|
-
# contributors to this software, may be used to endorse or promote products
|
15
|
-
# derived from this software without specific prior written permission.
|
16
|
-
#
|
17
|
-
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
18
|
-
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
19
|
-
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
20
|
-
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
21
|
-
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
22
|
-
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
23
|
-
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
24
|
-
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
25
|
-
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
26
|
-
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
27
|
-
# POSSIBILITY OF SUCH DAMAGE.
|
28
|
-
;
|
29
|
-
|
30
|
-
module Toys
|
31
|
-
module Templates
|
32
|
-
##
|
33
|
-
# A template for tools that clean build artifacts
|
34
|
-
#
|
35
|
-
class Clean
|
36
|
-
include Template
|
37
|
-
|
38
|
-
##
|
39
|
-
# Create the template settings for the Clean template.
|
40
|
-
#
|
41
|
-
# You may provide a hash of options when expanding this template.
|
42
|
-
# Supported options include:
|
43
|
-
#
|
44
|
-
# * `:name` (String) Name of the tool to create. Defaults to "clean".
|
45
|
-
# * `:paths` (Array<String>) An array of glob patterns indicating what
|
46
|
-
# to clean.
|
47
|
-
#
|
48
|
-
# @param [Hash] opts Options.
|
49
|
-
#
|
50
|
-
def initialize(opts = {})
|
51
|
-
@name = opts[:name] || "clean"
|
52
|
-
@paths = opts[:paths] || []
|
53
|
-
end
|
54
|
-
|
55
|
-
attr_accessor :name
|
56
|
-
attr_accessor :paths
|
57
|
-
|
58
|
-
to_expand do |template|
|
59
|
-
tool(template.name) do
|
60
|
-
desc "Clean built files and directories."
|
61
|
-
|
62
|
-
use :file_utils
|
63
|
-
|
64
|
-
execute do
|
65
|
-
files = []
|
66
|
-
patterns = Array(template.paths)
|
67
|
-
patterns.each do |pattern|
|
68
|
-
files.concat(::Dir.glob(pattern))
|
69
|
-
end
|
70
|
-
files.uniq!
|
71
|
-
|
72
|
-
files.each do |file|
|
73
|
-
rm_rf file
|
74
|
-
end
|
75
|
-
end
|
76
|
-
end
|
77
|
-
end
|
78
|
-
end
|
79
|
-
end
|
80
|
-
end
|
@@ -1,115 +0,0 @@
|
|
1
|
-
# Copyright 2018 Daniel Azuma
|
2
|
-
#
|
3
|
-
# All rights reserved.
|
4
|
-
#
|
5
|
-
# Redistribution and use in source and binary forms, with or without
|
6
|
-
# modification, are permitted provided that the following conditions are met:
|
7
|
-
#
|
8
|
-
# * Redistributions of source code must retain the above copyright notice,
|
9
|
-
# this list of conditions and the following disclaimer.
|
10
|
-
# * Redistributions in binary form must reproduce the above copyright notice,
|
11
|
-
# this list of conditions and the following disclaimer in the documentation
|
12
|
-
# and/or other materials provided with the distribution.
|
13
|
-
# * Neither the name of the copyright holder, nor the names of any other
|
14
|
-
# contributors to this software, may be used to endorse or promote products
|
15
|
-
# derived from this software without specific prior written permission.
|
16
|
-
#
|
17
|
-
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
18
|
-
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
19
|
-
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
20
|
-
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
21
|
-
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
22
|
-
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
23
|
-
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
24
|
-
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
25
|
-
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
26
|
-
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
27
|
-
# POSSIBILITY OF SUCH DAMAGE.
|
28
|
-
;
|
29
|
-
|
30
|
-
require "rubygems/package"
|
31
|
-
|
32
|
-
module Toys
|
33
|
-
module Templates
|
34
|
-
##
|
35
|
-
# A template for tools that build and release gems
|
36
|
-
#
|
37
|
-
class GemBuild
|
38
|
-
include Template
|
39
|
-
|
40
|
-
##
|
41
|
-
# Create the template settings for the GemBuild template.
|
42
|
-
#
|
43
|
-
# You may provide a hash of options when expanding this template.
|
44
|
-
# Supported options include:
|
45
|
-
#
|
46
|
-
# * `:name` (String) Name of the tool to create. Defaults to "build".
|
47
|
-
# * `:gem_name` (String) Name of the gem to build. If not provided,
|
48
|
-
# defaults to the first gemspec file it finds.
|
49
|
-
# * `:push_gem` (Boolean) If true, pushes the built gem to rubygems.
|
50
|
-
# * `:tag` (Boolean) If true, tags the git repo with the gem version.
|
51
|
-
# * `:push_tag` (Boolean,String) If truthy, pushes the new tag to
|
52
|
-
# a git remote. You may specify which remote by setting the value to
|
53
|
-
# a string. Otherwise, if the value is simply `true`, the "origin"
|
54
|
-
# remote is used by default.
|
55
|
-
#
|
56
|
-
# @param [Hash] opts Options.
|
57
|
-
#
|
58
|
-
def initialize(opts = {})
|
59
|
-
@name = opts[:name] || "build"
|
60
|
-
@gem_name = opts[:gem_name]
|
61
|
-
@push_gem = opts[:push_gem]
|
62
|
-
@tag = opts[:tag]
|
63
|
-
@push_tag = opts[:push_tag]
|
64
|
-
end
|
65
|
-
|
66
|
-
attr_accessor :name
|
67
|
-
attr_accessor :gem_name
|
68
|
-
attr_accessor :push_gem
|
69
|
-
attr_accessor :tag
|
70
|
-
attr_accessor :push_tag
|
71
|
-
|
72
|
-
to_expand do |template|
|
73
|
-
unless template.gem_name
|
74
|
-
candidates = ::Dir.glob("*.gemspec")
|
75
|
-
if candidates.empty?
|
76
|
-
raise ToolDefinitionError, "Could not find a gemspec"
|
77
|
-
end
|
78
|
-
template.gem_name = candidates.first.sub(/\.gemspec$/, "")
|
79
|
-
end
|
80
|
-
task_type = template.push_gem ? "Release" : "Build"
|
81
|
-
|
82
|
-
tool(template.name) do
|
83
|
-
desc "#{task_type} the gem: #{template.gem_name}"
|
84
|
-
|
85
|
-
use :file_utils
|
86
|
-
use :exec
|
87
|
-
|
88
|
-
execute do
|
89
|
-
configure_exec(exit_on_nonzero_status: true)
|
90
|
-
gemspec = ::Gem::Specification.load "#{template.gem_name}.gemspec"
|
91
|
-
version = gemspec.version
|
92
|
-
gemfile = "#{template.gem_name}-#{version}.gem"
|
93
|
-
::Gem::Package.build gemspec
|
94
|
-
mkdir_p "pkg"
|
95
|
-
mv gemfile, "pkg"
|
96
|
-
if template.push_gem
|
97
|
-
if ::File.directory?(".git") && capture("git status -s").strip != ""
|
98
|
-
logger.error "Cannot push the gem when there are uncommited changes"
|
99
|
-
exit(1)
|
100
|
-
end
|
101
|
-
sh "gem push pkg/#{gemfile}"
|
102
|
-
if template.tag
|
103
|
-
sh "git tag v#{version}"
|
104
|
-
if template.push_tag
|
105
|
-
template.push_tag = "origin" if template.push_tag == true
|
106
|
-
sh "git push #{template.push_tag} v#{version}"
|
107
|
-
end
|
108
|
-
end
|
109
|
-
end
|
110
|
-
end
|
111
|
-
end
|
112
|
-
end
|
113
|
-
end
|
114
|
-
end
|
115
|
-
end
|
@@ -1,108 +0,0 @@
|
|
1
|
-
# Copyright 2018 Daniel Azuma
|
2
|
-
#
|
3
|
-
# All rights reserved.
|
4
|
-
#
|
5
|
-
# Redistribution and use in source and binary forms, with or without
|
6
|
-
# modification, are permitted provided that the following conditions are met:
|
7
|
-
#
|
8
|
-
# * Redistributions of source code must retain the above copyright notice,
|
9
|
-
# this list of conditions and the following disclaimer.
|
10
|
-
# * Redistributions in binary form must reproduce the above copyright notice,
|
11
|
-
# this list of conditions and the following disclaimer in the documentation
|
12
|
-
# and/or other materials provided with the distribution.
|
13
|
-
# * Neither the name of the copyright holder, nor the names of any other
|
14
|
-
# contributors to this software, may be used to endorse or promote products
|
15
|
-
# derived from this software without specific prior written permission.
|
16
|
-
#
|
17
|
-
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
18
|
-
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
19
|
-
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
20
|
-
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
21
|
-
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
22
|
-
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
23
|
-
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
24
|
-
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
25
|
-
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
26
|
-
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
27
|
-
# POSSIBILITY OF SUCH DAMAGE.
|
28
|
-
;
|
29
|
-
|
30
|
-
module Toys
|
31
|
-
module Templates
|
32
|
-
##
|
33
|
-
# A template for tools that run minitest
|
34
|
-
#
|
35
|
-
class Minitest
|
36
|
-
include Template
|
37
|
-
|
38
|
-
##
|
39
|
-
# Create the template settings for the Minitest template.
|
40
|
-
#
|
41
|
-
# You may provide a hash of options when expanding this template.
|
42
|
-
# Supported options include:
|
43
|
-
#
|
44
|
-
# * `:name` (String) Name of the tool to create. Defaults to "test".
|
45
|
-
# * `:lib` (Array<String>) An array of library paths to add to the
|
46
|
-
# ruby require path.
|
47
|
-
# * `:files` (Array<String>) An array of globs indicating the test
|
48
|
-
# files to load.
|
49
|
-
# * `:warnings` (Boolean) If true, runs tests with Ruby warnings.
|
50
|
-
#
|
51
|
-
# @param [Hash] opts Options.
|
52
|
-
#
|
53
|
-
def initialize(opts = {})
|
54
|
-
@name = opts[:name] || "test"
|
55
|
-
@libs = opts[:libs] || ["lib"]
|
56
|
-
@files = opts[:files] || ["test/**/test*.rb"]
|
57
|
-
@warnings = opts.include?(:warnings) ? opts[:warnings] : true
|
58
|
-
end
|
59
|
-
|
60
|
-
attr_accessor :name
|
61
|
-
attr_accessor :libs
|
62
|
-
attr_accessor :files
|
63
|
-
attr_accessor :warnings
|
64
|
-
|
65
|
-
to_expand do |template|
|
66
|
-
tool(template.name) do
|
67
|
-
desc "Run minitest on the current project."
|
68
|
-
|
69
|
-
use :exec
|
70
|
-
|
71
|
-
switch(
|
72
|
-
:warnings, "-w", "--[no-]warnings",
|
73
|
-
default: template.warnings,
|
74
|
-
doc: "Turn on Ruby warnings (defaults to #{template.warnings})"
|
75
|
-
)
|
76
|
-
remaining_args(:tests, doc: "Paths to the tests to run (defaults to all tests)")
|
77
|
-
|
78
|
-
execute do
|
79
|
-
ruby_args = []
|
80
|
-
unless template.libs.empty?
|
81
|
-
lib_path = template.libs.join(::File::PATH_SEPARATOR)
|
82
|
-
ruby_args << "-I#{lib_path}"
|
83
|
-
end
|
84
|
-
ruby_args << "-w" if self[:warnings]
|
85
|
-
|
86
|
-
tests = self[:tests]
|
87
|
-
if tests.empty?
|
88
|
-
Array(template.files).each do |pattern|
|
89
|
-
tests.concat(::Dir.glob(pattern))
|
90
|
-
end
|
91
|
-
tests.uniq!
|
92
|
-
end
|
93
|
-
|
94
|
-
result = ruby(ruby_args, in_from: :controller) do |controller|
|
95
|
-
tests.each do |file|
|
96
|
-
controller.in.puts("load '#{file}'")
|
97
|
-
end
|
98
|
-
end
|
99
|
-
if result.error?
|
100
|
-
logger.error("Minitest failed!")
|
101
|
-
exit(result.exit_code)
|
102
|
-
end
|
103
|
-
end
|
104
|
-
end
|
105
|
-
end
|
106
|
-
end
|
107
|
-
end
|
108
|
-
end
|
@@ -1,81 +0,0 @@
|
|
1
|
-
# Copyright 2018 Daniel Azuma
|
2
|
-
#
|
3
|
-
# All rights reserved.
|
4
|
-
#
|
5
|
-
# Redistribution and use in source and binary forms, with or without
|
6
|
-
# modification, are permitted provided that the following conditions are met:
|
7
|
-
#
|
8
|
-
# * Redistributions of source code must retain the above copyright notice,
|
9
|
-
# this list of conditions and the following disclaimer.
|
10
|
-
# * Redistributions in binary form must reproduce the above copyright notice,
|
11
|
-
# this list of conditions and the following disclaimer in the documentation
|
12
|
-
# and/or other materials provided with the distribution.
|
13
|
-
# * Neither the name of the copyright holder, nor the names of any other
|
14
|
-
# contributors to this software, may be used to endorse or promote products
|
15
|
-
# derived from this software without specific prior written permission.
|
16
|
-
#
|
17
|
-
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
18
|
-
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
19
|
-
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
20
|
-
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
21
|
-
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
22
|
-
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
23
|
-
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
24
|
-
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
25
|
-
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
26
|
-
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
27
|
-
# POSSIBILITY OF SUCH DAMAGE.
|
28
|
-
;
|
29
|
-
|
30
|
-
module Toys
|
31
|
-
module Templates
|
32
|
-
##
|
33
|
-
# A template for tools that run rubocop
|
34
|
-
#
|
35
|
-
class Rubocop
|
36
|
-
include Template
|
37
|
-
|
38
|
-
##
|
39
|
-
# Create the template settings for the Rubocop template.
|
40
|
-
#
|
41
|
-
# You may provide a hash of options when expanding this template.
|
42
|
-
# Supported options include:
|
43
|
-
#
|
44
|
-
# * `:name` (String) Name of the tool to create. Defaults to "rubocop".
|
45
|
-
# * `:fail_on_error` (Boolean) If true, exits with a nonzero code if
|
46
|
-
# Rubocop fails. Defaults to true.
|
47
|
-
# * `:options` (Hash) Additional options passed to the Rubocop CLI.
|
48
|
-
#
|
49
|
-
# @param [Hash] opts Options.
|
50
|
-
#
|
51
|
-
def initialize(opts = {})
|
52
|
-
@name = opts[:name] || "rubocop"
|
53
|
-
@fail_on_error = opts.include?(:fail_on_error) ? opts[:fail_on_error] : true
|
54
|
-
@options = opts[:options] || []
|
55
|
-
end
|
56
|
-
|
57
|
-
attr_accessor :name
|
58
|
-
attr_accessor :fail_on_error
|
59
|
-
attr_accessor :options
|
60
|
-
|
61
|
-
to_expand do |template|
|
62
|
-
tool(template.name) do
|
63
|
-
desc "Run rubocop on the current project."
|
64
|
-
|
65
|
-
use :exec
|
66
|
-
|
67
|
-
execute do
|
68
|
-
require "rubocop"
|
69
|
-
cli = ::RuboCop::CLI.new
|
70
|
-
logger.info "Running RuboCop..."
|
71
|
-
result = cli.run(template.options)
|
72
|
-
if result.nonzero?
|
73
|
-
logger.error "RuboCop failed!"
|
74
|
-
exit(1) if template.fail_on_error
|
75
|
-
end
|
76
|
-
end
|
77
|
-
end
|
78
|
-
end
|
79
|
-
end
|
80
|
-
end
|
81
|
-
end
|
@@ -1,95 +0,0 @@
|
|
1
|
-
# Copyright 2018 Daniel Azuma
|
2
|
-
#
|
3
|
-
# All rights reserved.
|
4
|
-
#
|
5
|
-
# Redistribution and use in source and binary forms, with or without
|
6
|
-
# modification, are permitted provided that the following conditions are met:
|
7
|
-
#
|
8
|
-
# * Redistributions of source code must retain the above copyright notice,
|
9
|
-
# this list of conditions and the following disclaimer.
|
10
|
-
# * Redistributions in binary form must reproduce the above copyright notice,
|
11
|
-
# this list of conditions and the following disclaimer in the documentation
|
12
|
-
# and/or other materials provided with the distribution.
|
13
|
-
# * Neither the name of the copyright holder, nor the names of any other
|
14
|
-
# contributors to this software, may be used to endorse or promote products
|
15
|
-
# derived from this software without specific prior written permission.
|
16
|
-
#
|
17
|
-
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
18
|
-
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
19
|
-
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
20
|
-
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
21
|
-
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
22
|
-
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
23
|
-
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
24
|
-
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
25
|
-
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
26
|
-
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
27
|
-
# POSSIBILITY OF SUCH DAMAGE.
|
28
|
-
;
|
29
|
-
|
30
|
-
module Toys
|
31
|
-
module Templates
|
32
|
-
##
|
33
|
-
# A template for tools that run yardoc
|
34
|
-
#
|
35
|
-
class Yardoc
|
36
|
-
include Template
|
37
|
-
|
38
|
-
##
|
39
|
-
# Create the template settings for the Yardoc template.
|
40
|
-
#
|
41
|
-
# You may provide a hash of options when expanding this template.
|
42
|
-
# Supported options include:
|
43
|
-
#
|
44
|
-
# * `:name` (String) Name of the tool to create. Defaults to "yardoc".
|
45
|
-
# * `:files` (Array<String>) An array of globs indicating the files
|
46
|
-
# to document.
|
47
|
-
# * `:options` (Hash) Additional options passed to YARD
|
48
|
-
# * `:stats_options` (Hash) Additional options passed to YARD stats
|
49
|
-
#
|
50
|
-
# @param [Hash] opts Options.
|
51
|
-
#
|
52
|
-
def initialize(opts = {})
|
53
|
-
@name = opts[:name] || "yardoc"
|
54
|
-
@files = opts[:files] || []
|
55
|
-
@options = opts[:options] || []
|
56
|
-
@stats_options = opts[:stats_options] || []
|
57
|
-
end
|
58
|
-
|
59
|
-
attr_accessor :name
|
60
|
-
attr_accessor :files
|
61
|
-
attr_accessor :options
|
62
|
-
attr_accessor :stats_options
|
63
|
-
|
64
|
-
to_expand do |template|
|
65
|
-
tool(template.name) do
|
66
|
-
desc "Run yardoc on the current project."
|
67
|
-
|
68
|
-
use :exec
|
69
|
-
|
70
|
-
execute do
|
71
|
-
require "yard"
|
72
|
-
files = []
|
73
|
-
patterns = Array(template.files)
|
74
|
-
patterns = ["lib/**/*.rb"] if patterns.empty?
|
75
|
-
patterns.each do |pattern|
|
76
|
-
files.concat(::Dir.glob(pattern))
|
77
|
-
end
|
78
|
-
files.uniq!
|
79
|
-
|
80
|
-
unless template.stats_options.empty?
|
81
|
-
template.options << "--no-stats"
|
82
|
-
template.stats_options << "--use-cache"
|
83
|
-
end
|
84
|
-
|
85
|
-
yardoc = ::YARD::CLI::Yardoc.new
|
86
|
-
yardoc.run(*(template.options + files))
|
87
|
-
unless template.stats_options.empty?
|
88
|
-
::YARD::CLI::Stats.run(*template.stats_options)
|
89
|
-
end
|
90
|
-
end
|
91
|
-
end
|
92
|
-
end
|
93
|
-
end
|
94
|
-
end
|
95
|
-
end
|