toys-core 0.3.7.1 → 0.3.8
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +10 -0
- data/README.md +1 -2
- data/lib/toys-core.rb +23 -8
- data/lib/toys/cli.rb +62 -23
- data/lib/toys/core_version.rb +1 -1
- data/lib/toys/definition/arg.rb +0 -2
- data/lib/toys/definition/flag.rb +2 -4
- data/lib/toys/definition/tool.rb +38 -36
- data/lib/toys/dsl/arg.rb +4 -0
- data/lib/toys/dsl/flag.rb +9 -5
- data/lib/toys/dsl/tool.rb +35 -28
- data/lib/toys/input_file.rb +2 -1
- data/lib/toys/loader.rb +97 -51
- data/lib/toys/middleware.rb +61 -87
- data/lib/toys/runner.rb +19 -2
- data/lib/toys/{middleware → standard_middleware}/add_verbosity_flags.rb +24 -8
- data/lib/toys/{middleware → standard_middleware}/handle_usage_errors.rb +4 -6
- data/lib/toys/{middleware → standard_middleware}/set_default_descriptions.rb +4 -4
- data/lib/toys/{middleware → standard_middleware}/show_help.rb +32 -16
- data/lib/toys/{middleware → standard_middleware}/show_root_version.rb +4 -5
- data/lib/toys/{helpers → standard_mixins}/exec.rb +8 -8
- data/lib/toys/{helpers → standard_mixins}/fileutils.rb +1 -1
- data/lib/toys/{helpers → standard_mixins}/highline.rb +2 -3
- data/lib/toys/{helpers → standard_mixins}/terminal.rb +2 -4
- data/lib/toys/tool.rb +3 -2
- data/lib/toys/utils/exec.rb +255 -82
- data/lib/toys/utils/gems.rb +3 -3
- data/lib/toys/utils/help_text.rb +0 -2
- data/lib/toys/utils/module_lookup.rb +60 -40
- data/lib/toys/utils/wrappable_string.rb +0 -2
- metadata +11 -19
- data/lib/toys/helpers.rb +0 -54
- data/lib/toys/middleware/base.rb +0 -99
- data/lib/toys/templates.rb +0 -55
- data/lib/toys/templates/clean.rb +0 -85
- data/lib/toys/templates/gem_build.rb +0 -125
- data/lib/toys/templates/minitest.rb +0 -125
- data/lib/toys/templates/rubocop.rb +0 -86
- data/lib/toys/templates/yardoc.rb +0 -101
data/lib/toys/utils/gems.rb
CHANGED
@@ -113,8 +113,8 @@ module Toys
|
|
113
113
|
@terminal.spinner(leading_text: "Getting info on gem #{name.inspect}... ",
|
114
114
|
final_text: "Done.\n") do
|
115
115
|
req = ::Gem::Requirement.new(*requirements)
|
116
|
-
result = @exec.
|
117
|
-
if result
|
116
|
+
result = @exec.capture(["gem", "query", "-q", "-r", "-a", "-e", name])
|
117
|
+
if result =~ /\(([\w\.,\s]+)\)/
|
118
118
|
$1.split(", ")
|
119
119
|
.map { |v| ::Gem::Version.new(v) }
|
120
120
|
.find { |v| !v.prerelease? && req.satisfied_by?(v) }
|
@@ -128,7 +128,7 @@ module Toys
|
|
128
128
|
@terminal.spinner(leading_text: "Installing gem #{name} #{version}... ",
|
129
129
|
final_text: "Done.\n") do
|
130
130
|
result = @exec.exec(["gem", "install", name, "--version", version.to_s],
|
131
|
-
|
131
|
+
out: :capture, err: :capture)
|
132
132
|
if result.error?
|
133
133
|
@terminal.puts(result.captured_out + result.captured_err)
|
134
134
|
raise InstallFailedError, "Failed to install gem #{name} #{version}"
|
data/lib/toys/utils/help_text.rb
CHANGED
@@ -34,11 +34,7 @@ module Toys
|
|
34
34
|
# used to obtain named helpers, middleware, and templates from the
|
35
35
|
# respective modules.
|
36
36
|
#
|
37
|
-
|
38
|
-
# use the convenience methods {Toys::Helpers.lookup},
|
39
|
-
# {Toys::Middleware.lookup}, or {Toys::Templates.lookup}.
|
40
|
-
#
|
41
|
-
module ModuleLookup
|
37
|
+
class ModuleLookup
|
42
38
|
class << self
|
43
39
|
##
|
44
40
|
# Convert the given string to a path element. Specifically, converts
|
@@ -66,47 +62,71 @@ module Toys
|
|
66
62
|
end
|
67
63
|
|
68
64
|
##
|
69
|
-
#
|
70
|
-
# on failure.
|
71
|
-
#
|
72
|
-
# @param [String,Symbol] collection The collection to search. Typical
|
73
|
-
# values are `:helpers`, `:middleware`, and `:templates`.
|
74
|
-
# @param [String,Symbol] name The name of the module to return.
|
65
|
+
# Given a require path, return the module expected to be defined.
|
75
66
|
#
|
76
|
-
# @
|
77
|
-
# @
|
78
|
-
# be found.
|
79
|
-
# @raise [NameError] The given module was not defined.
|
67
|
+
# @param [String] path File path, delimited by forward slash
|
68
|
+
# @return [Module] The module loaded from that path
|
80
69
|
#
|
81
|
-
def
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
70
|
+
def path_to_module(path)
|
71
|
+
path.split("/").reduce(::Object) do |running_mod, seg|
|
72
|
+
mod_name = to_module_name(seg)
|
73
|
+
unless running_mod.constants.include?(mod_name)
|
74
|
+
raise ::NameError, "Module #{running_mod.name}::#{mod_name} not found"
|
75
|
+
end
|
76
|
+
running_mod.const_get(mod_name)
|
86
77
|
end
|
87
|
-
collection_mod = ::Toys.const_get(collection_sym)
|
88
|
-
name_sym = to_module_name(name)
|
89
|
-
unless collection_mod.constants.include?(name_sym)
|
90
|
-
raise ::NameError, "Module does not exist: Toys::#{collection_sym}::#{name_sym}"
|
91
|
-
end
|
92
|
-
collection_mod.const_get(name_sym)
|
93
78
|
end
|
79
|
+
end
|
94
80
|
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
81
|
+
##
|
82
|
+
# Create an empty ModuleLookup
|
83
|
+
#
|
84
|
+
def initialize
|
85
|
+
@paths = []
|
86
|
+
end
|
87
|
+
|
88
|
+
##
|
89
|
+
# Add a lookup path for modules.
|
90
|
+
#
|
91
|
+
# @param [String] path_base The base require path
|
92
|
+
# @param [Module] module_base The base module, or `nil` (the default) to
|
93
|
+
# infer a default from the path base.
|
94
|
+
# @param [Boolean] high_priority If true, add to the head of the lookup
|
95
|
+
# path, otherwise add to the end.
|
96
|
+
#
|
97
|
+
def add_path(path_base, module_base: nil, high_priority: false)
|
98
|
+
module_base ||= ModuleLookup.path_to_module(path_base)
|
99
|
+
if high_priority
|
100
|
+
@paths.unshift([path_base, module_base])
|
101
|
+
else
|
102
|
+
@paths << [path_base, module_base]
|
103
|
+
end
|
104
|
+
self
|
105
|
+
end
|
106
|
+
|
107
|
+
##
|
108
|
+
# Obtain a named module. Returns `nil` if the name is not present.
|
109
|
+
#
|
110
|
+
# @param [String,Symbol] name The name of the module to return.
|
111
|
+
#
|
112
|
+
# @return [Module] The specified module
|
113
|
+
#
|
114
|
+
def lookup(name)
|
115
|
+
@paths.each do |path_base, module_base|
|
116
|
+
path = "#{path_base}/#{ModuleLookup.to_path_name(name)}"
|
117
|
+
begin
|
118
|
+
require path
|
119
|
+
rescue ::LoadError
|
120
|
+
next
|
121
|
+
end
|
122
|
+
mod_name = ModuleLookup.to_module_name(name)
|
123
|
+
unless module_base.constants.include?(mod_name)
|
124
|
+
raise ::NameError,
|
125
|
+
"File #{path.inspect} did not define #{module_base.name}::#{mod_name}"
|
126
|
+
end
|
127
|
+
return module_base.const_get(mod_name)
|
109
128
|
end
|
129
|
+
nil
|
110
130
|
end
|
111
131
|
end
|
112
132
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: toys-core
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Daniel Azuma
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-06-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: minitest
|
@@ -105,28 +105,20 @@ files:
|
|
105
105
|
- lib/toys/dsl/flag.rb
|
106
106
|
- lib/toys/dsl/tool.rb
|
107
107
|
- lib/toys/errors.rb
|
108
|
-
- lib/toys/helpers.rb
|
109
|
-
- lib/toys/helpers/exec.rb
|
110
|
-
- lib/toys/helpers/fileutils.rb
|
111
|
-
- lib/toys/helpers/highline.rb
|
112
|
-
- lib/toys/helpers/terminal.rb
|
113
108
|
- lib/toys/input_file.rb
|
114
109
|
- lib/toys/loader.rb
|
115
110
|
- lib/toys/middleware.rb
|
116
|
-
- lib/toys/middleware/add_verbosity_flags.rb
|
117
|
-
- lib/toys/middleware/base.rb
|
118
|
-
- lib/toys/middleware/handle_usage_errors.rb
|
119
|
-
- lib/toys/middleware/set_default_descriptions.rb
|
120
|
-
- lib/toys/middleware/show_help.rb
|
121
|
-
- lib/toys/middleware/show_root_version.rb
|
122
111
|
- lib/toys/runner.rb
|
112
|
+
- lib/toys/standard_middleware/add_verbosity_flags.rb
|
113
|
+
- lib/toys/standard_middleware/handle_usage_errors.rb
|
114
|
+
- lib/toys/standard_middleware/set_default_descriptions.rb
|
115
|
+
- lib/toys/standard_middleware/show_help.rb
|
116
|
+
- lib/toys/standard_middleware/show_root_version.rb
|
117
|
+
- lib/toys/standard_mixins/exec.rb
|
118
|
+
- lib/toys/standard_mixins/fileutils.rb
|
119
|
+
- lib/toys/standard_mixins/highline.rb
|
120
|
+
- lib/toys/standard_mixins/terminal.rb
|
123
121
|
- lib/toys/template.rb
|
124
|
-
- lib/toys/templates.rb
|
125
|
-
- lib/toys/templates/clean.rb
|
126
|
-
- lib/toys/templates/gem_build.rb
|
127
|
-
- lib/toys/templates/minitest.rb
|
128
|
-
- lib/toys/templates/rubocop.rb
|
129
|
-
- lib/toys/templates/yardoc.rb
|
130
122
|
- lib/toys/tool.rb
|
131
123
|
- lib/toys/utils/exec.rb
|
132
124
|
- lib/toys/utils/gems.rb
|
data/lib/toys/helpers.rb
DELETED
@@ -1,54 +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 helper modules
|
35
|
-
#
|
36
|
-
module Helpers
|
37
|
-
##
|
38
|
-
# Return a helper module by name.
|
39
|
-
#
|
40
|
-
# Currently recognized module names are:
|
41
|
-
#
|
42
|
-
# * `:exec` : Methods to help execute subcommands.
|
43
|
-
# * `:fileutils` : The FileUtils standard library methods.
|
44
|
-
# * `:highline` : Methods from the highline gem.
|
45
|
-
# * `:spinner` : Displays a spinner on the terminal.
|
46
|
-
#
|
47
|
-
# @param [String,Symbol] name Name of the helper module to return
|
48
|
-
# @return [Module,nil] The module.
|
49
|
-
#
|
50
|
-
def self.lookup!(name)
|
51
|
-
Utils::ModuleLookup.lookup!(:helpers, name)
|
52
|
-
end
|
53
|
-
end
|
54
|
-
end
|
data/lib/toys/middleware/base.rb
DELETED
@@ -1,99 +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 Middleware
|
32
|
-
##
|
33
|
-
# This is a base middleware with a no-op implementation.
|
34
|
-
#
|
35
|
-
# A middleware is an object that has the opportunity to alter the
|
36
|
-
# configuration and runtime behavior of each tool in a Toys CLI. A CLI
|
37
|
-
# contains an ordered list of middleware, known as the *middleware stack*,
|
38
|
-
# that together define the CLI's default behavior.
|
39
|
-
#
|
40
|
-
# Specifically, a middleware can perform two functions.
|
41
|
-
#
|
42
|
-
# First, it can modify the configuration of a tool. After tools are defined
|
43
|
-
# from configuration, the middleware stack can make modifications to each
|
44
|
-
# tool. A middleware can add flags and arguments to the tool, modify the
|
45
|
-
# description, or make any other changes to how the tool is set up.
|
46
|
-
#
|
47
|
-
# Second, a middleware can intercept and change tool execution. Like a Rack
|
48
|
-
# middleware, a Toys middleware can wrap execution with its own code,
|
49
|
-
# replace it outright, or leave it unmodified.
|
50
|
-
#
|
51
|
-
class Base
|
52
|
-
##
|
53
|
-
# This method is called after a tool has been defined, and gives this
|
54
|
-
# middleware the opportunity to modify the tool definition. It is passed
|
55
|
-
# the tool definition object and the loader, and can make any changes to
|
56
|
-
# the tool definition. In most cases, this method should also call
|
57
|
-
# `yield`, which passes control to the next middleware in the stack. A
|
58
|
-
# middleware can disable modifications done by subsequent middleware by
|
59
|
-
# omitting the `yield` call, but this is uncommon.
|
60
|
-
#
|
61
|
-
# The base middleware implementation does nothing and simply yields to
|
62
|
-
# the next middleware. Subclasses should override this if they want to
|
63
|
-
# alter the tool definition.
|
64
|
-
#
|
65
|
-
# @param [Toys::Definition::Tool] _tool_definition The tool definition
|
66
|
-
# to modify.
|
67
|
-
# @param [Toys::Loader] _loader The loader that loaded this tool.
|
68
|
-
#
|
69
|
-
def config(_tool_definition, _loader)
|
70
|
-
yield
|
71
|
-
end
|
72
|
-
|
73
|
-
##
|
74
|
-
# This method is called when the tool is run. It gives the middleware an
|
75
|
-
# opportunity to modify the runtime behavior of the tool. It is passed
|
76
|
-
# the tool instance (i.e. the object that hosts a tool's `run` method),
|
77
|
-
# and you can use this object to access the tool's options and other
|
78
|
-
# context data. In most cases, this method should also call `yield`,
|
79
|
-
# which passes control to the next middleware in the stack. A middleware
|
80
|
-
# can "wrap" normal execution by calling `yield` somewhere in its
|
81
|
-
# implementation of this method, or it can completely replace the
|
82
|
-
# execution behavior by not calling `yield` at all.
|
83
|
-
#
|
84
|
-
# Like a tool's `run` method, this method's return value is unused. If
|
85
|
-
# you want to output from a tool, write to stdout or stderr. If you want
|
86
|
-
# to set the exit status code, call {Toys::Tool#exit} on the tool object.
|
87
|
-
#
|
88
|
-
# The base middleware implementation does nothing and simply yields to
|
89
|
-
# the next middleware. Subclasses should override this if they want to
|
90
|
-
# alter the tool execution.
|
91
|
-
#
|
92
|
-
# @param [Toys::Tool] _tool The tool execution instance.
|
93
|
-
#
|
94
|
-
def run(_tool)
|
95
|
-
yield
|
96
|
-
end
|
97
|
-
end
|
98
|
-
end
|
99
|
-
end
|
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,85 +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
|
-
# Default tool name
|
40
|
-
# @return [String]
|
41
|
-
#
|
42
|
-
DEFAULT_TOOL_NAME = "clean".freeze
|
43
|
-
|
44
|
-
##
|
45
|
-
# Create the template settings for the Clean template.
|
46
|
-
#
|
47
|
-
# @param [String] name Name of the tool to create. Defaults to
|
48
|
-
# {DEFAULT_TOOL_NAME}.
|
49
|
-
# @param [Array<String>] paths An array of glob patterns indicating what
|
50
|
-
# to clean.
|
51
|
-
#
|
52
|
-
def initialize(name: DEFAULT_TOOL_NAME, paths: [])
|
53
|
-
@name = name
|
54
|
-
@paths = paths
|
55
|
-
end
|
56
|
-
|
57
|
-
attr_accessor :name
|
58
|
-
attr_accessor :paths
|
59
|
-
|
60
|
-
to_expand do |template|
|
61
|
-
tool(template.name) do
|
62
|
-
desc "Clean built files and directories."
|
63
|
-
|
64
|
-
include :fileutils
|
65
|
-
|
66
|
-
run do
|
67
|
-
files = []
|
68
|
-
patterns = Array(template.paths)
|
69
|
-
patterns.each do |pattern|
|
70
|
-
files.concat(::Dir.glob(pattern))
|
71
|
-
end
|
72
|
-
files.uniq!
|
73
|
-
|
74
|
-
files.each do |file|
|
75
|
-
if ::File.exist?(file)
|
76
|
-
rm_rf file
|
77
|
-
puts "Cleaned: #{file}"
|
78
|
-
end
|
79
|
-
end
|
80
|
-
end
|
81
|
-
end
|
82
|
-
end
|
83
|
-
end
|
84
|
-
end
|
85
|
-
end
|