squared 0.0.9 → 0.0.10
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/README.md +2 -6
- data/README.ruby.md +112 -33
- data/lib/squared/common/base.rb +12 -4
- data/lib/squared/common/format.rb +45 -31
- data/lib/squared/common/shell.rb +16 -7
- data/lib/squared/common/system.rb +5 -5
- data/lib/squared/common/task.rb +1 -1
- data/lib/squared/common/utils.rb +60 -0
- data/lib/squared/common.rb +1 -0
- data/lib/squared/config.rb +18 -15
- data/lib/squared/version.rb +1 -1
- data/lib/squared/workspace/application.rb +104 -70
- data/lib/squared/workspace/project/base.rb +304 -118
- data/lib/squared/workspace/project/git.rb +43 -52
- data/lib/squared/workspace/project/node.rb +125 -126
- data/lib/squared/workspace/project/python.rb +23 -3
- data/lib/squared/workspace/project/ruby.rb +129 -116
- data/lib/squared/workspace/repo.rb +82 -88
- data/lib/squared/workspace/series.rb +15 -13
- metadata +3 -2
@@ -7,6 +7,16 @@ module Squared
|
|
7
7
|
include Format
|
8
8
|
include ::Rake::DSL
|
9
9
|
|
10
|
+
SCRIPT_OBJ = {
|
11
|
+
run: nil,
|
12
|
+
script: nil,
|
13
|
+
dev: nil,
|
14
|
+
prod: nil,
|
15
|
+
global: false,
|
16
|
+
env: false
|
17
|
+
}.freeze
|
18
|
+
private_constant :SCRIPT_OBJ
|
19
|
+
|
10
20
|
class << self
|
11
21
|
def implement(*objs)
|
12
22
|
objs.each do |obj|
|
@@ -38,9 +48,11 @@ module Squared
|
|
38
48
|
@impl_series = Workspace::Series
|
39
49
|
|
40
50
|
attr_reader :root, :home, :main, :prefix, :series, :theme
|
41
|
-
attr_accessor :exception, :
|
51
|
+
attr_accessor :exception, :pipe, :verbose, :warning
|
42
52
|
|
43
|
-
def initialize(home = Dir.pwd, *,
|
53
|
+
def initialize(home = Dir.pwd, *,
|
54
|
+
main: nil, prefix: nil, verbose: nil,
|
55
|
+
common: Common::KEY[:COMMON], pipe: Common::KEY[:PIPE], exception: Common::KEY[:FAIL], **)
|
44
56
|
@home = (home = Pathname.new(home)).realdirpath
|
45
57
|
@main = (main || home.basename).to_s
|
46
58
|
@root = @home.parent
|
@@ -48,25 +60,27 @@ module Squared
|
|
48
60
|
@series = Application.impl_series.new(self)
|
49
61
|
@project = {}
|
50
62
|
@extensions = []
|
51
|
-
@
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
env: false
|
58
|
-
}
|
59
|
-
@exception = exception.is_a?(String) ? !env(exception, ignore: '0').nil? : exception
|
60
|
-
@pipe = pipe.is_a?(String) ? !env(pipe, ignore: '0').nil? : pipe
|
61
|
-
@verbose = verbose.nil? ? !@pipe : verbose
|
62
|
-
@warning = @verbose
|
63
|
-
if kwargs.fetch(:common, true)
|
63
|
+
@pipe = env_pipe(pipe)
|
64
|
+
@exception = env_bool(exception)
|
65
|
+
@verbose = verbose.nil? ? @pipe > 0 : verbose
|
66
|
+
@warning = @verbose != false
|
67
|
+
@envname = @main.gsub(/[^\w]+/, '_').upcase
|
68
|
+
if common
|
64
69
|
@theme = __get__(:theme)[:workspace]
|
65
|
-
__set__(:no_color, true) if @pipe
|
70
|
+
__set__(:no_color, true) if @pipe == 0
|
66
71
|
else
|
67
72
|
@theme = {}
|
68
73
|
end
|
69
|
-
@
|
74
|
+
@script = {
|
75
|
+
group: {},
|
76
|
+
ref: {},
|
77
|
+
group!: {},
|
78
|
+
ref!: {}
|
79
|
+
}.freeze
|
80
|
+
@banner = {
|
81
|
+
group: {},
|
82
|
+
ref: {}
|
83
|
+
}.freeze
|
70
84
|
end
|
71
85
|
|
72
86
|
def build(**kwargs)
|
@@ -89,16 +103,19 @@ module Squared
|
|
89
103
|
yield self if block_given?
|
90
104
|
end
|
91
105
|
|
92
|
-
def with(val, &blk)
|
106
|
+
def with(*val, &blk)
|
93
107
|
@group = nil
|
94
108
|
@ref = nil
|
95
|
-
|
109
|
+
kind = val.first
|
110
|
+
val = kind if val.size == 1
|
111
|
+
case kind
|
112
|
+
when ::String
|
96
113
|
@group = val
|
97
114
|
if block_given?
|
98
115
|
instance_eval(&blk)
|
99
116
|
@group = nil
|
100
117
|
end
|
101
|
-
|
118
|
+
when ::Symbol
|
102
119
|
@ref = val
|
103
120
|
if block_given?
|
104
121
|
instance_eval(&blk)
|
@@ -128,18 +145,23 @@ module Squared
|
|
128
145
|
script_command :test, script, group, ref
|
129
146
|
end
|
130
147
|
|
148
|
+
def log(script, group: @group, ref: @ref)
|
149
|
+
script_command :log, script, group, ref
|
150
|
+
end
|
151
|
+
|
131
152
|
def exclude(base, group: @group, ref: @ref)
|
132
153
|
script_command :exclude, as_a(base, :to_sym).freeze, group, ref
|
133
154
|
end
|
134
155
|
|
135
|
-
def add(
|
156
|
+
def add(path, name = nil, **kwargs, &blk)
|
136
157
|
ref = if kwargs.key?(:ref)
|
137
158
|
kwargs.delete(:ref)
|
138
|
-
elsif
|
159
|
+
elsif @ref.is_a?(::Symbol)
|
139
160
|
@ref
|
140
161
|
end
|
141
|
-
kwargs[:group] = @group if !kwargs.key?(:group) &&
|
142
|
-
path = root_path(path
|
162
|
+
kwargs[:group] = @group if !kwargs.key?(:group) && @group.is_a?(::String)
|
163
|
+
path = root_path(path)
|
164
|
+
name ||= path.basename.to_s
|
143
165
|
proj = ((if !ref.is_a?(::Class)
|
144
166
|
Application.find(ref, path: path)
|
145
167
|
elsif ref < Project::Base
|
@@ -147,10 +169,11 @@ module Squared
|
|
147
169
|
end) || Project::Base).new(task_name(name), path, self, **kwargs)
|
148
170
|
@project[name = name.to_sym] = proj
|
149
171
|
__get__(:project)[name] = proj unless kwargs[:private]
|
172
|
+
proj.instance_eval(&blk) if block_given?
|
150
173
|
self
|
151
174
|
end
|
152
175
|
|
153
|
-
def group(
|
176
|
+
def group(path, name, override: {}, **kwargs)
|
154
177
|
root_path(path).children.map do |ent|
|
155
178
|
next unless (dir = Pathname.new(ent)).directory?
|
156
179
|
|
@@ -196,13 +219,10 @@ module Squared
|
|
196
219
|
end
|
197
220
|
|
198
221
|
def banner(*order, command: true, styles: [], border: [], group: nil, ref: nil)
|
199
|
-
|
222
|
+
if order.empty?
|
223
|
+
return (group && @banner[:group][group.to_sym]) || (ref && @banner[:ref][ref]) || @banner[:ref][:_]
|
224
|
+
end
|
200
225
|
|
201
|
-
key = if group ||= @group
|
202
|
-
group.to_sym
|
203
|
-
else
|
204
|
-
:"_#{ref || @ref || ''}"
|
205
|
-
end
|
206
226
|
data = { command: command, order: [], styles: check_style(styles, empty: false), border: check_style(border) }
|
207
227
|
order.flatten.each do |val|
|
208
228
|
case (val = val.to_sym)
|
@@ -210,27 +230,33 @@ module Squared
|
|
210
230
|
data[:order] << val
|
211
231
|
end
|
212
232
|
end
|
213
|
-
|
233
|
+
if command || !data[:order].empty?
|
234
|
+
if group ||= @group
|
235
|
+
label = :group
|
236
|
+
items = as_a(group)
|
237
|
+
else
|
238
|
+
label = :ref
|
239
|
+
items = as_a(ref || @ref || :_)
|
240
|
+
end
|
241
|
+
items.each { |val| @banner[label][val.to_sym] = data }
|
242
|
+
end
|
214
243
|
self
|
215
244
|
end
|
216
245
|
|
217
246
|
def script(*args, group: nil, ref: nil)
|
218
|
-
if group
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
args.empty? || (!r && !g) || (r && args.include?(r)) || (g && args.include?(g)) ? [val, @script[:env]] : []
|
226
|
-
else
|
227
|
-
[]
|
247
|
+
return @script[:group][group.to_sym] if group
|
248
|
+
return @script[:ref][ref] if ref
|
249
|
+
|
250
|
+
args.reverse_each do |val|
|
251
|
+
next unless val && (ret = val.is_a?(::Symbol) ? @script[:ref!][val] : @script[:group!][val.to_sym])
|
252
|
+
|
253
|
+
return ret
|
228
254
|
end
|
255
|
+
@script[:ref][:_] || SCRIPT_OBJ
|
229
256
|
end
|
230
257
|
|
231
258
|
def env(key, default = nil, equals: nil, ignore: nil)
|
232
|
-
|
233
|
-
ret = ENV.fetch("#{key}_#{@env}", ENV[key]).to_s
|
259
|
+
ret = (ENV["#{key}_#{@envname}"] || ENV[key]).to_s
|
234
260
|
return ret == equals.to_s unless equals.nil?
|
235
261
|
|
236
262
|
ret.empty? || (ignore && as_a(ignore).any? { |val| ret == val.to_s }) ? default : ret
|
@@ -254,9 +280,8 @@ module Squared
|
|
254
280
|
end
|
255
281
|
|
256
282
|
def task_namespace(val, first: false)
|
257
|
-
return nil unless (
|
283
|
+
return nil unless (ret = val.to_s.split(':')).size > 1
|
258
284
|
|
259
|
-
ret = val.split(':')
|
260
285
|
first ? ret.first : ret[0..-2].join(':')
|
261
286
|
end
|
262
287
|
|
@@ -269,7 +294,7 @@ module Squared
|
|
269
294
|
end
|
270
295
|
|
271
296
|
def enabled?
|
272
|
-
!@extensions.empty? || @project.any?
|
297
|
+
!@extensions.empty? || @project.values.any?(&:enabled?)
|
273
298
|
end
|
274
299
|
|
275
300
|
def task_extend?(obj, key)
|
@@ -280,33 +305,35 @@ module Squared
|
|
280
305
|
::Rake::Task.task_defined?(key)
|
281
306
|
end
|
282
307
|
|
283
|
-
def dev?(
|
284
|
-
script?(:dev,
|
308
|
+
def dev?(**kwargs)
|
309
|
+
script?(:dev, **kwargs)
|
285
310
|
end
|
286
311
|
|
287
|
-
def prod?(
|
288
|
-
|
289
|
-
|
290
|
-
script?(:prod, global: global, **kwargs)
|
312
|
+
def prod?(**kwargs)
|
313
|
+
script?(:prod, **kwargs)
|
291
314
|
end
|
292
315
|
|
293
316
|
private
|
294
317
|
|
295
|
-
def __build__(**
|
296
|
-
if !task_defined?('default') &&
|
318
|
+
def __build__(default: nil, **)
|
319
|
+
if !task_defined?('default') && default && task_defined?(target = task_name(default))
|
297
320
|
task 'default' => target
|
298
321
|
end
|
299
322
|
return unless series.some?(:build)
|
300
323
|
|
301
|
-
init = [task_name('depend'), task_name(dev? && series.some?(:refresh) ? 'refresh' : 'build')]
|
324
|
+
init = [task_name('depend'), task_name(dev?(global: true) && series.some?(:refresh) ? 'refresh' : 'build')]
|
302
325
|
|
303
|
-
task 'default' => init[1] unless task_defined?('default')
|
326
|
+
task 'default' => init[1] unless default || task_defined?('default')
|
304
327
|
return unless series.some?(:depend) && !task_defined?(key = task_name('init'))
|
305
328
|
|
306
329
|
desc key
|
307
330
|
task key => init
|
308
331
|
end
|
309
332
|
|
333
|
+
def puts(*args)
|
334
|
+
@pipe == 2 ? $stderr.puts(*args) : $stdout.puts(*args)
|
335
|
+
end
|
336
|
+
|
310
337
|
def script_command(task, val, group, ref)
|
311
338
|
if group
|
312
339
|
label = :group
|
@@ -319,23 +346,30 @@ module Squared
|
|
319
346
|
self
|
320
347
|
end
|
321
348
|
|
322
|
-
def
|
323
|
-
|
324
|
-
|
325
|
-
|
326
|
-
|
327
|
-
|
328
|
-
end
|
329
|
-
if pat.is_a?(::Regexp)
|
330
|
-
script = script[state == :prod ? 1 : 0] if script.is_a?(::Array)
|
331
|
-
pat.match?(script)
|
349
|
+
def script_set(data, group: nil, ref: nil)
|
350
|
+
data.freeze
|
351
|
+
if group
|
352
|
+
as_a(group).each { |val| @script[:group!][val.to_sym] = data }
|
353
|
+
elsif ref
|
354
|
+
as_a(ref).each { |val| @script[:ref!][val.to_sym] = data }
|
332
355
|
else
|
333
|
-
|
356
|
+
@script[:ref][:_] = data
|
334
357
|
end
|
335
358
|
end
|
336
359
|
|
337
|
-
def
|
338
|
-
|
360
|
+
def script_obj
|
361
|
+
SCRIPT_OBJ.dup
|
362
|
+
end
|
363
|
+
|
364
|
+
def script?(state, target: nil, pat: nil, group: nil, ref: Project::Base.ref, global: false)
|
365
|
+
data = script(ref, group)
|
366
|
+
if global
|
367
|
+
target = data[:script] || data[:run] if target.nil?
|
368
|
+
pat = data[state] if pat.nil?
|
369
|
+
end
|
370
|
+
return false if state == :prod && data[:dev] == true && data[:global]
|
371
|
+
|
372
|
+
target && pat.is_a?(::Regexp) ? as_a(target).any? { |val| pat.match?(val) } : pat == true
|
339
373
|
end
|
340
374
|
end
|
341
375
|
end
|