toys 0.2.0 → 0.2.1
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/lib/toys/builtins/system.rb +1 -1
- data/lib/toys/cli.rb +17 -7
- data/lib/toys/lookup.rb +35 -19
- data/lib/toys/parser.rb +2 -6
- data/lib/toys/templates/gem_build.rb +2 -2
- data/lib/toys/templates/minitest.rb +1 -1
- data/lib/toys/tool.rb +0 -38
- data/lib/toys/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4a2d413fba0285f718e4d586832a78010060e68e52ad2f0ef7df54e4295a71b6
|
4
|
+
data.tar.gz: 431cbcb0425cf2bcde91c145a574238293d83c47b81668abf9c67de6cc16d6cc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2f7988dd0108eb50afc3a44dabf5b2d3a04f272af2c6d58135a525250d50c42d5e7902e1f1c07768cabb80fb88cfca0e8a2513fe2a5274a7c1a1d1ac90c02650
|
7
|
+
data.tar.gz: b5199ca795795821bc7ba6605ec276995e9a29b73c597c5700424de0a0f01ba5d9a39392d24528c981e9d05956dbbd2691aeb513a22413ff84610ce122d29ee1
|
data/lib/toys/builtins/system.rb
CHANGED
data/lib/toys/cli.rb
CHANGED
@@ -4,19 +4,21 @@ module Toys
|
|
4
4
|
DEFAULT_DIR_NAME = ".toys"
|
5
5
|
DEFAULT_FILE_NAME = ".toys.rb"
|
6
6
|
DEFAULT_BINARY_NAME = "toys"
|
7
|
-
|
7
|
+
DEFAULT_PRELOAD_NAME = ".preload.rb"
|
8
8
|
|
9
9
|
def initialize(
|
10
10
|
binary_name: nil,
|
11
11
|
logger: nil,
|
12
12
|
config_dir_name: nil,
|
13
13
|
config_file_name: nil,
|
14
|
-
index_file_name: nil
|
14
|
+
index_file_name: nil,
|
15
|
+
preload_file_name: nil
|
15
16
|
)
|
16
17
|
@lookup = Toys::Lookup.new(
|
17
18
|
config_dir_name: config_dir_name,
|
18
19
|
config_file_name: config_file_name,
|
19
|
-
index_file_name: index_file_name
|
20
|
+
index_file_name: index_file_name,
|
21
|
+
preload_file_name: preload_file_name)
|
20
22
|
@context = Context.new(
|
21
23
|
@lookup,
|
22
24
|
logger: logger || self.class.default_logger,
|
@@ -47,6 +49,15 @@ module Toys
|
|
47
49
|
self
|
48
50
|
end
|
49
51
|
|
52
|
+
def add_standard_config_paths
|
53
|
+
toys_path = ENV["TOYS_PATH"].to_s.split(File::PATH_SEPARATOR)
|
54
|
+
if toys_path.size == 0
|
55
|
+
toys_path << ENV["HOME"] if ENV["HOME"]
|
56
|
+
toys_path << "/etc" if File.directory?("/etc") && File.readable?("/etc")
|
57
|
+
end
|
58
|
+
@lookup.add_config_paths(toys_path)
|
59
|
+
end
|
60
|
+
|
50
61
|
def run(*args)
|
51
62
|
@context.run(*args)
|
52
63
|
end
|
@@ -57,12 +68,11 @@ module Toys
|
|
57
68
|
binary_name: DEFAULT_BINARY_NAME,
|
58
69
|
config_dir_name: DEFAULT_DIR_NAME,
|
59
70
|
config_file_name: DEFAULT_FILE_NAME,
|
60
|
-
index_file_name: DEFAULT_FILE_NAME
|
71
|
+
index_file_name: DEFAULT_FILE_NAME,
|
72
|
+
preload_file_name: DEFAULT_PRELOAD_NAME
|
61
73
|
)
|
62
74
|
cli.add_config_path_hierarchy
|
63
|
-
|
64
|
-
cli.add_config_paths(ETC_PATH)
|
65
|
-
end
|
75
|
+
cli.add_standard_config_paths
|
66
76
|
cli.add_paths(BUILTINS_PATH)
|
67
77
|
cli
|
68
78
|
end
|
data/lib/toys/lookup.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
module Toys
|
2
2
|
class Lookup
|
3
|
-
def initialize(config_dir_name: nil, config_file_name: nil,
|
3
|
+
def initialize(config_dir_name: nil, config_file_name: nil,
|
4
|
+
index_file_name: nil, preload_file_name: nil)
|
4
5
|
@config_dir_name = config_dir_name
|
5
6
|
if @config_dir_name && File.extname(@config_dir_name) == ".rb"
|
6
7
|
raise LookupError, "Illegal config dir name #{@config_dir_name.inspect}"
|
@@ -13,6 +14,10 @@ module Toys
|
|
13
14
|
if @index_file_name && File.extname(@index_file_name) != ".rb"
|
14
15
|
raise LookupError, "Illegal index file name #{@index_file_name.inspect}"
|
15
16
|
end
|
17
|
+
@preload_file_name = preload_file_name
|
18
|
+
if @preload_file_name && File.extname(@preload_file_name) != ".rb"
|
19
|
+
raise LookupError, "Illegal preload file name #{@preload_file_name.inspect}"
|
20
|
+
end
|
16
21
|
@load_worklist = []
|
17
22
|
@tools = {[] => [Tool.new(nil, nil), nil]}
|
18
23
|
@max_priority = @min_priority = 0
|
@@ -33,9 +38,7 @@ module Toys
|
|
33
38
|
paths = Array(paths)
|
34
39
|
paths = paths.reverse if high_priority
|
35
40
|
paths.each do |path|
|
36
|
-
|
37
|
-
raise LookupError, "Cannot read config directory #{path}"
|
38
|
-
end
|
41
|
+
path = check_path(path, type: :dir)
|
39
42
|
priority = high_priority ? (@max_priority += 1) : (@min_priority -= 1)
|
40
43
|
if @config_file_name
|
41
44
|
p = File.join(path, @config_file_name)
|
@@ -135,13 +138,23 @@ module Toys
|
|
135
138
|
Parser.parse(path, tool, remaining_words, priority, self, IO.read(path))
|
136
139
|
end
|
137
140
|
else
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
141
|
+
if @preload_file_name
|
142
|
+
preload_path = File.join(path, @preload_file_name)
|
143
|
+
if File.exist?(preload_path)
|
144
|
+
preload_path = check_path(preload_path, type: :file)
|
145
|
+
require preload_path
|
146
|
+
end
|
147
|
+
end
|
148
|
+
if @index_file_name
|
149
|
+
index_path = File.join(path, @index_file_name)
|
150
|
+
if File.exist?(index_path)
|
151
|
+
index_path = check_path(index_path, type: :file)
|
152
|
+
load_path(index_path, words, remaining_words, priority)
|
153
|
+
end
|
154
|
+
end
|
155
|
+
Dir.entries(path).each do |child|
|
156
|
+
if !child.start_with?(".") && child != @preload_file_name && child != @index_file_name
|
157
|
+
child_path = check_path(File.join(path, child))
|
145
158
|
child_word = File.basename(child, ".rb")
|
146
159
|
next_words = words + [child_word]
|
147
160
|
next_remaining_words =
|
@@ -158,19 +171,22 @@ module Toys
|
|
158
171
|
end
|
159
172
|
end
|
160
173
|
|
161
|
-
def check_path(path,
|
162
|
-
|
174
|
+
def check_path(path, lenient: false, type: nil)
|
175
|
+
path = File.expand_path(path)
|
176
|
+
type ||= File.extname(path) == ".rb" ? :file : :dir
|
177
|
+
case type
|
178
|
+
when :file
|
163
179
|
if File.directory?(path) || !File.readable?(path)
|
180
|
+
return nil if lenient
|
164
181
|
raise LookupError, "Cannot read file #{path}"
|
165
182
|
end
|
166
|
-
|
183
|
+
when :dir
|
167
184
|
if !File.directory?(path) || !File.readable?(path)
|
168
|
-
if
|
169
|
-
|
170
|
-
else
|
171
|
-
return nil
|
172
|
-
end
|
185
|
+
return nil if lenient
|
186
|
+
raise LookupError, "Cannot read directory #{path}"
|
173
187
|
end
|
188
|
+
else
|
189
|
+
raise ArgumentError, "Illegal type #{type}"
|
174
190
|
end
|
175
191
|
path
|
176
192
|
end
|
data/lib/toys/parser.rb
CHANGED
@@ -114,12 +114,8 @@ module Toys
|
|
114
114
|
self
|
115
115
|
end
|
116
116
|
|
117
|
-
def
|
118
|
-
|
119
|
-
@tool.define_helper_module(mod, &block)
|
120
|
-
else
|
121
|
-
@tool.use_helper_module(mod)
|
122
|
-
end
|
117
|
+
def use(mod)
|
118
|
+
@tool.use_helper_module(mod)
|
123
119
|
self
|
124
120
|
end
|
125
121
|
|
@@ -32,8 +32,8 @@ module Toys
|
|
32
32
|
name toy_name do
|
33
33
|
short_desc "#{push_gem ? 'Release' : 'Build'} the gem: #{gem_name}"
|
34
34
|
|
35
|
-
|
36
|
-
|
35
|
+
use :file_utils
|
36
|
+
use :exec
|
37
37
|
|
38
38
|
execute do
|
39
39
|
gemspec = Gem::Specification.load "#{gem_name}.gemspec"
|
data/lib/toys/tool.rb
CHANGED
@@ -26,8 +26,6 @@ module Toys
|
|
26
26
|
@helpers = {}
|
27
27
|
@modules = []
|
28
28
|
@executor = nil
|
29
|
-
|
30
|
-
@defined_modules = {}
|
31
29
|
end
|
32
30
|
|
33
31
|
attr_reader :simple_name
|
@@ -105,29 +103,6 @@ module Toys
|
|
105
103
|
@alias_target = target_tool
|
106
104
|
end
|
107
105
|
|
108
|
-
def define_helper_module(name, &block)
|
109
|
-
if @alias_target
|
110
|
-
raise ToolDefinitionError, "Tool #{display_name.inspect} is an alias"
|
111
|
-
end
|
112
|
-
unless name.is_a?(String)
|
113
|
-
raise ToolDefinitionError,
|
114
|
-
"Helper module name #{name.inspect} is not a string"
|
115
|
-
end
|
116
|
-
if @defined_modules.key?(name)
|
117
|
-
raise ToolDefinitionError,
|
118
|
-
"Helper module #{name.inspect} is already defined"
|
119
|
-
end
|
120
|
-
mod = Module.new(&block)
|
121
|
-
mod.instance_methods.each do |meth|
|
122
|
-
name_str = meth.to_s
|
123
|
-
unless name_str =~ /^[a-z]\w+$/
|
124
|
-
raise ToolDefinitionError,
|
125
|
-
"Illegal helper method name: #{name_str.inspect}"
|
126
|
-
end
|
127
|
-
end
|
128
|
-
@defined_modules[name] = mod
|
129
|
-
end
|
130
|
-
|
131
106
|
def short_desc=(str)
|
132
107
|
check_definition_state
|
133
108
|
@short_desc = str
|
@@ -158,8 +133,6 @@ module Toys
|
|
158
133
|
require "toys/helpers/#{file_name}"
|
159
134
|
const_name = mod.gsub(/(^|_)([a-zA-Z0-9])/){ |m| $2.upcase }
|
160
135
|
@modules << Toys::Helpers.const_get(const_name)
|
161
|
-
when String
|
162
|
-
@modules << mod
|
163
136
|
else
|
164
137
|
raise ToolDefinitionError, "Illegal helper module name: #{mod.inspect}"
|
165
138
|
end
|
@@ -220,12 +193,6 @@ module Toys
|
|
220
193
|
|
221
194
|
protected
|
222
195
|
|
223
|
-
def find_module_named(name)
|
224
|
-
return @defined_modules[name] if @defined_modules.key?(name)
|
225
|
-
return @parent.find_module_named(name) if @parent
|
226
|
-
nil
|
227
|
-
end
|
228
|
-
|
229
196
|
def ensure_collection_only(source_name)
|
230
197
|
if has_definition?
|
231
198
|
raise ToolDefinitionError, "Cannot create tool #{source_name.inspect}" \
|
@@ -393,11 +360,6 @@ module Toys
|
|
393
360
|
full_name, args, execution_data[:options])
|
394
361
|
context.logger.level += execution_data[:delta_severity]
|
395
362
|
@modules.each do |mod|
|
396
|
-
unless Module === mod
|
397
|
-
found = find_module_named(mod)
|
398
|
-
raise StandardError, "Unable to find module #{mod}" unless found
|
399
|
-
mod = found
|
400
|
-
end
|
401
363
|
context.extend(mod)
|
402
364
|
end
|
403
365
|
@helpers.each do |name, block|
|
data/lib/toys/version.rb
CHANGED
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.2.
|
4
|
+
version: 0.2.1
|
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-03-
|
11
|
+
date: 2018-03-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|