squared 0.4.39 → 0.5.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 +64 -577
- data/README.md +1283 -663
- data/README.ruby.md +722 -0
- data/lib/squared/common/base.rb +8 -9
- data/lib/squared/common/format.rb +26 -39
- data/lib/squared/common/prompt.rb +46 -51
- data/lib/squared/common/shell.rb +51 -78
- data/lib/squared/common/system.rb +34 -38
- data/lib/squared/common/utils.rb +4 -37
- data/lib/squared/common.rb +2 -1
- data/lib/squared/config.rb +30 -33
- data/lib/squared/version.rb +1 -1
- data/lib/squared/workspace/application.rb +84 -132
- data/lib/squared/workspace/project/base.rb +439 -600
- data/lib/squared/workspace/project/docker.rb +197 -215
- data/lib/squared/workspace/project/git.rb +384 -535
- data/lib/squared/workspace/project/node.rb +196 -316
- data/lib/squared/workspace/project/python.rb +126 -357
- data/lib/squared/workspace/project/ruby.rb +260 -343
- data/lib/squared/workspace/project/support/class.rb +93 -314
- data/lib/squared/workspace/project.rb +0 -10
- data/lib/squared/workspace/repo.rb +59 -100
- data/lib/squared/workspace/series.rb +41 -47
- data/lib/squared/workspace/support/data.rb +3 -2
- data/lib/squared/workspace/support.rb +0 -1
- data/lib/squared/workspace.rb +3 -5
- data/squared.gemspec +5 -5
- metadata +7 -8
- data/lib/squared/common/class.rb +0 -186
- data/lib/squared/workspace/support/base.rb +0 -32
|
@@ -26,10 +26,10 @@ module Squared
|
|
|
26
26
|
next unless base || obj < impl_project
|
|
27
27
|
|
|
28
28
|
if base
|
|
29
|
-
|
|
29
|
+
@impl_project = obj
|
|
30
30
|
impl_series.base_set(obj)
|
|
31
31
|
else
|
|
32
|
-
kind_project.
|
|
32
|
+
kind_project.prepend(obj)
|
|
33
33
|
obj.tasks&.each { |task| impl_series.add(task, obj) }
|
|
34
34
|
end
|
|
35
35
|
if (args = obj.batchargs)
|
|
@@ -39,7 +39,7 @@ module Squared
|
|
|
39
39
|
impl_series.alias(*args)
|
|
40
40
|
end
|
|
41
41
|
if (args = obj.bannerargs)
|
|
42
|
-
attr_banner.merge(args)
|
|
42
|
+
@attr_banner.merge(args)
|
|
43
43
|
end
|
|
44
44
|
end
|
|
45
45
|
end
|
|
@@ -73,7 +73,7 @@ module Squared
|
|
|
73
73
|
end
|
|
74
74
|
|
|
75
75
|
@kind_project = []
|
|
76
|
-
@task_exclude =
|
|
76
|
+
@task_exclude = Set.new
|
|
77
77
|
|
|
78
78
|
attr_reader :root, :home, :main, :prefix, :exception, :warning, :pipe, :verbose, :theme, :series, :closed
|
|
79
79
|
|
|
@@ -83,7 +83,7 @@ module Squared
|
|
|
83
83
|
basename = @home.basename.to_s
|
|
84
84
|
if main
|
|
85
85
|
@main = main.to_s.freeze
|
|
86
|
-
@home += @main unless @main == basename || (windows? && @main.
|
|
86
|
+
@home += @main unless @main == basename || (windows? && @main.downcase == basename.downcase)
|
|
87
87
|
else
|
|
88
88
|
@main = basename.freeze
|
|
89
89
|
end
|
|
@@ -92,24 +92,12 @@ module Squared
|
|
|
92
92
|
@prefix = prefix
|
|
93
93
|
@series = Application.series_wrap(self)
|
|
94
94
|
@project = {}
|
|
95
|
-
@kind =
|
|
95
|
+
@kind = {}
|
|
96
96
|
@extensions = []
|
|
97
|
-
@envname =
|
|
98
|
-
@pipe =
|
|
99
|
-
2
|
|
100
|
-
elsif (out = ARG[:OUT]) && out.include?(File::SEPARATOR)
|
|
101
|
-
env_pipe(out, pipe, root: home)
|
|
102
|
-
else
|
|
103
|
-
env_pipe(pipe, (out && env(out)) || 1, root: home)
|
|
104
|
-
end
|
|
97
|
+
@envname = @main.gsub(/[^\w]+/, '_').upcase.freeze
|
|
98
|
+
@pipe = env_pipe(pipe, (ARG[:OUT] && env(ARG[:OUT])) || 1, root: @home)
|
|
105
99
|
@exception = env_bool exception
|
|
106
|
-
@verbose =
|
|
107
|
-
false
|
|
108
|
-
elsif verbose.nil?
|
|
109
|
-
@pipe != 0
|
|
110
|
-
else
|
|
111
|
-
env_bool(verbose, verbose.is_a?(String) ? @pipe != 0 : verbose, index: true)
|
|
112
|
-
end
|
|
100
|
+
@verbose = env_bool(verbose, verbose.nil? || verbose.is_a?(String) ? @pipe != 0 : verbose, index: true)
|
|
113
101
|
@warning = @verbose != false
|
|
114
102
|
@closed = false
|
|
115
103
|
if common
|
|
@@ -118,20 +106,20 @@ module Squared
|
|
|
118
106
|
else
|
|
119
107
|
@theme = {}
|
|
120
108
|
end
|
|
121
|
-
@chain =
|
|
109
|
+
@chain = {}
|
|
122
110
|
@script = {
|
|
123
|
-
group:
|
|
124
|
-
ref:
|
|
111
|
+
group: {},
|
|
112
|
+
ref: {},
|
|
125
113
|
group!: {},
|
|
126
114
|
ref!: {}
|
|
127
115
|
}.freeze
|
|
128
116
|
@events = {
|
|
129
|
-
group:
|
|
130
|
-
ref:
|
|
117
|
+
group: {},
|
|
118
|
+
ref: {}
|
|
131
119
|
}.freeze
|
|
132
120
|
@pass = {
|
|
133
|
-
group:
|
|
134
|
-
ref:
|
|
121
|
+
group: {},
|
|
122
|
+
ref: {},
|
|
135
123
|
global: {},
|
|
136
124
|
pattern: []
|
|
137
125
|
}.freeze
|
|
@@ -146,19 +134,20 @@ module Squared
|
|
|
146
134
|
return unless @pipe.is_a?(Pathname)
|
|
147
135
|
|
|
148
136
|
msg = "Session started on #{Time.now} by #{@main}"
|
|
149
|
-
bord = '#' *
|
|
137
|
+
bord = '#' * s.size
|
|
150
138
|
puts bord, msg, bord
|
|
151
139
|
end
|
|
152
140
|
|
|
153
141
|
def build(parallel: [], pass: nil, **kwargs)
|
|
154
142
|
return self unless enabled? && !@closed
|
|
155
143
|
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
144
|
+
if kwargs[:pattern].is_a?(Array)
|
|
145
|
+
kwargs[:parallel] = parallel.map(&:to_s)
|
|
146
|
+
else
|
|
147
|
+
kwargs[:pattern] = []
|
|
148
|
+
kwargs[:parallel] = parallel.reject { |val| val.is_a?(Regexp) && (kwargs[:pattern] << val) }
|
|
149
|
+
.map(&:to_s)
|
|
150
|
+
end
|
|
162
151
|
@pass[:pattern].concat(pass.map { |val| val.is_a?(Regexp) ? val : val.to_s }) if pass
|
|
163
152
|
@project.each_value do |proj|
|
|
164
153
|
if proj.enabled?
|
|
@@ -184,26 +173,7 @@ module Squared
|
|
|
184
173
|
self
|
|
185
174
|
end
|
|
186
175
|
|
|
187
|
-
def with(*val,
|
|
188
|
-
if hide.nil? && kwargs.key?(:pass)
|
|
189
|
-
pass = kwargs[:pass]
|
|
190
|
-
case pass
|
|
191
|
-
when true, false
|
|
192
|
-
hide = pass
|
|
193
|
-
kwargs.delete(:pass)
|
|
194
|
-
else
|
|
195
|
-
hide, pass = Array(pass).partition { |s| respond_to?(s) || s.to_s.end_with?('?') }
|
|
196
|
-
if pass.empty?
|
|
197
|
-
kwargs.delete(:pass)
|
|
198
|
-
elsif hide.empty?
|
|
199
|
-
hide = nil
|
|
200
|
-
else
|
|
201
|
-
kwargs[:pass] = pass
|
|
202
|
-
end
|
|
203
|
-
end
|
|
204
|
-
end
|
|
205
|
-
return self if hide == true || (hide && Array(hide).any? { |s| respond_to?(s) && __send__(s) rescue nil })
|
|
206
|
-
|
|
176
|
+
def with(*val, group: nil, **kwargs, &blk)
|
|
207
177
|
@group = nil
|
|
208
178
|
@ref = nil
|
|
209
179
|
@withargs = kwargs.empty? ? nil : kwargs
|
|
@@ -250,12 +220,12 @@ module Squared
|
|
|
250
220
|
if arg.include?(':') || (keys && !keys.include?(arg))
|
|
251
221
|
task_name(arg)
|
|
252
222
|
else
|
|
253
|
-
|
|
223
|
+
/#{Regexp.escape(arg)}:/
|
|
254
224
|
end
|
|
255
225
|
end
|
|
256
226
|
end
|
|
257
|
-
data =
|
|
258
|
-
@chain[task_name(task.to_s)] << data
|
|
227
|
+
data = Support::ChainData.new(action, step, ns.call(with), ns.call(before), ns.call(after), sync)
|
|
228
|
+
(@chain[task_name(task.to_s)] ||= []) << data
|
|
259
229
|
self
|
|
260
230
|
end
|
|
261
231
|
|
|
@@ -297,9 +267,9 @@ module Squared
|
|
|
297
267
|
|
|
298
268
|
def pass(name, group: @group, ref: @ref, &blk)
|
|
299
269
|
data = if group
|
|
300
|
-
@pass[:group][group
|
|
270
|
+
@pass[:group][group] ||= {}
|
|
301
271
|
elsif ref
|
|
302
|
-
@pass[:ref][ref
|
|
272
|
+
@pass[:ref][ref] ||= {}
|
|
303
273
|
else
|
|
304
274
|
@pass[:global]
|
|
305
275
|
end
|
|
@@ -308,7 +278,7 @@ module Squared
|
|
|
308
278
|
end
|
|
309
279
|
|
|
310
280
|
def banner(*args, command: true, styles: nil, border: nil, group: @group, ref: @ref)
|
|
311
|
-
data =
|
|
281
|
+
data = Support::BannerData.new(command, [], check_style(styles, empty: false), check_style(border))
|
|
312
282
|
args.each do |meth|
|
|
313
283
|
if meth.is_a?(Array)
|
|
314
284
|
found = false
|
|
@@ -331,24 +301,31 @@ module Squared
|
|
|
331
301
|
elsif !Application.attr_banner.include?(meth = meth.to_sym)
|
|
332
302
|
next
|
|
333
303
|
end
|
|
334
|
-
data
|
|
304
|
+
data.order << meth
|
|
335
305
|
end
|
|
336
|
-
data = {} if !command && data[:order].empty?
|
|
337
306
|
if group
|
|
338
307
|
label = :group
|
|
339
|
-
items =
|
|
308
|
+
items = as_a group
|
|
340
309
|
else
|
|
341
310
|
label = :ref
|
|
342
|
-
items =
|
|
311
|
+
items = ref ? as_a(ref) : [:_]
|
|
343
312
|
end
|
|
344
313
|
items.each { |val| @banner[label][val.to_sym] = data }
|
|
345
314
|
self
|
|
346
315
|
end
|
|
347
316
|
|
|
348
317
|
def add(path, project = nil, **kwargs, &blk)
|
|
349
|
-
kwargs =
|
|
350
|
-
ref = kwargs.key?(:ref)
|
|
351
|
-
|
|
318
|
+
kwargs = @withargs.yield_self { |data| data.dup.update(kwargs) } if @withargs
|
|
319
|
+
ref = if kwargs.key?(:ref)
|
|
320
|
+
kwargs = kwargs.dup unless @withargs
|
|
321
|
+
kwargs.delete(:ref)
|
|
322
|
+
elsif @ref.is_a?(Symbol)
|
|
323
|
+
@ref
|
|
324
|
+
end
|
|
325
|
+
if @group.is_a?(String) && !kwargs.key?(:group)
|
|
326
|
+
kwargs = kwargs.dup unless @withargs
|
|
327
|
+
kwargs[:group] = @group
|
|
328
|
+
end
|
|
352
329
|
path = root + path
|
|
353
330
|
project = (project || path.basename).to_s
|
|
354
331
|
name = task_name project
|
|
@@ -359,9 +336,9 @@ module Squared
|
|
|
359
336
|
end
|
|
360
337
|
proj = ((if !ref.is_a?(Class)
|
|
361
338
|
Application.find(ref, path: path)
|
|
362
|
-
elsif ref <
|
|
339
|
+
elsif ref < Project::Base
|
|
363
340
|
ref
|
|
364
|
-
end) || @kind[name]&.last ||
|
|
341
|
+
end) || @kind[name]&.last || Project::Base).new(self, path, name, **kwargs)
|
|
365
342
|
proj.__send__(:index_set, @project.size)
|
|
366
343
|
@project[name] = proj
|
|
367
344
|
__get__(:project)[name] = proj unless kwargs[:private]
|
|
@@ -378,14 +355,14 @@ module Squared
|
|
|
378
355
|
end
|
|
379
356
|
.each do |dir, basename, opts|
|
|
380
357
|
args = kwargs.dup
|
|
381
|
-
args.
|
|
358
|
+
args.update(opts) if opts
|
|
382
359
|
add(dir, basename, group: val, **args, &blk)
|
|
383
360
|
end
|
|
384
361
|
self
|
|
385
362
|
end
|
|
386
363
|
|
|
387
364
|
def compose(name, &blk)
|
|
388
|
-
namespace(task_name(name), &blk)
|
|
365
|
+
namespace(task_name(name), &blk) if block_given?
|
|
389
366
|
self
|
|
390
367
|
end
|
|
391
368
|
|
|
@@ -397,7 +374,7 @@ module Squared
|
|
|
397
374
|
def style(obj, *args, target: nil, empty: false)
|
|
398
375
|
data = nil
|
|
399
376
|
if target
|
|
400
|
-
|
|
377
|
+
as_a(target).each_with_index do |key, i|
|
|
401
378
|
if i == 0
|
|
402
379
|
break unless (data = __get__(:theme)[key.to_sym])
|
|
403
380
|
else
|
|
@@ -417,7 +394,7 @@ module Squared
|
|
|
417
394
|
}
|
|
418
395
|
data.each do |key, val|
|
|
419
396
|
key = key.to_s
|
|
420
|
-
if key.
|
|
397
|
+
if key.start_with?(/(\\A|\^)/) || key.match?(/(\\z|\$)\z/)
|
|
421
398
|
@describe[:replace] << [Regexp.new(key), val]
|
|
422
399
|
else
|
|
423
400
|
@describe[val.is_a?(Regexp) ? :pattern : :alias][key.to_s] = val
|
|
@@ -435,13 +412,13 @@ module Squared
|
|
|
435
412
|
if ret.empty?
|
|
436
413
|
ret = @project.select { |_, item| item.ref?(ref) }.map(&:last) if ref
|
|
437
414
|
if ret.empty? && (path || name)
|
|
438
|
-
path &&= rootpath
|
|
415
|
+
path &&= rootpath path
|
|
439
416
|
name &&= name.to_s
|
|
440
417
|
proj = @project.find { |_, item| (path && item.path == path) || (name && item.name == name) }&.last
|
|
441
418
|
ret << proj if proj
|
|
442
419
|
end
|
|
443
420
|
end
|
|
444
|
-
return (group || ref ? ret : ret
|
|
421
|
+
return (group || ref ? ret : ret[0]) unless block_given?
|
|
445
422
|
|
|
446
423
|
ret.each(&blk)
|
|
447
424
|
self
|
|
@@ -503,7 +480,7 @@ module Squared
|
|
|
503
480
|
end
|
|
504
481
|
|
|
505
482
|
def task_namespace(val, first: false)
|
|
506
|
-
return unless (ret = val.to_s.split(':')).size > 1
|
|
483
|
+
return nil unless (ret = val.to_s.split(':')).size > 1
|
|
507
484
|
|
|
508
485
|
first ? ret.first : task_join(*ret[0..-2])
|
|
509
486
|
end
|
|
@@ -513,7 +490,7 @@ module Squared
|
|
|
513
490
|
if (base = task_base?(key))
|
|
514
491
|
tasks << key if obj.has?(key, baseref)
|
|
515
492
|
elsif (batch = series.batch_get(key))
|
|
516
|
-
obj.allref do |ref|
|
|
493
|
+
obj.allref.each do |ref|
|
|
517
494
|
next unless obj.has?(key, ref) && (data = batch[ref])
|
|
518
495
|
|
|
519
496
|
data.each do |val|
|
|
@@ -532,10 +509,10 @@ module Squared
|
|
|
532
509
|
if tasks.empty?
|
|
533
510
|
return [] if (base && !obj.ref?(baseref)) || !(data = series.alias_get(key))
|
|
534
511
|
|
|
535
|
-
obj.allref do |ref|
|
|
512
|
+
obj.allref.each do |ref|
|
|
536
513
|
next unless obj.has?(key, ref) && (alt = data[ref])
|
|
537
514
|
|
|
538
|
-
ret = task_resolve
|
|
515
|
+
ret = task_resolve obj, alt
|
|
539
516
|
break unless ret.empty?
|
|
540
517
|
end
|
|
541
518
|
else
|
|
@@ -555,7 +532,7 @@ module Squared
|
|
|
555
532
|
end
|
|
556
533
|
|
|
557
534
|
def format_desc(val, opts = nil, arg: 'opts*', before: nil, after: nil, out: false)
|
|
558
|
-
return unless TASK_METADATA
|
|
535
|
+
return unless TASK_METADATA
|
|
559
536
|
|
|
560
537
|
val = val.split(':') if val.is_a?(String)
|
|
561
538
|
if before || after || opts
|
|
@@ -596,7 +573,7 @@ module Squared
|
|
|
596
573
|
return ret if group && (ret = @banner[:group][group.to_sym])
|
|
597
574
|
|
|
598
575
|
ref.reverse_each { |val| return ret if (ret = @banner[:ref][val]) }
|
|
599
|
-
@banner[:ref][:
|
|
576
|
+
@banner[:ref][:'']
|
|
600
577
|
end
|
|
601
578
|
|
|
602
579
|
def enabled?
|
|
@@ -641,25 +618,13 @@ module Squared
|
|
|
641
618
|
end
|
|
642
619
|
|
|
643
620
|
def home?
|
|
644
|
-
|
|
621
|
+
!(proj = find(home)).nil? && proj.enabled?
|
|
645
622
|
end
|
|
646
623
|
|
|
647
624
|
def windows?
|
|
648
625
|
Rake::Win32.windows?
|
|
649
626
|
end
|
|
650
627
|
|
|
651
|
-
def mri?
|
|
652
|
-
RUBY_ENGINE == 'ruby'
|
|
653
|
-
end
|
|
654
|
-
|
|
655
|
-
def jruby?
|
|
656
|
-
RUBY_ENGINE == 'jruby'
|
|
657
|
-
end
|
|
658
|
-
|
|
659
|
-
def truffleruby?
|
|
660
|
-
RUBY_ENGINE == 'truffleruby'
|
|
661
|
-
end
|
|
662
|
-
|
|
663
628
|
def docker?
|
|
664
629
|
!Dir['/.dockerenv', '/docker-*.{sh,d}'].empty?
|
|
665
630
|
end
|
|
@@ -696,10 +661,6 @@ module Squared
|
|
|
696
661
|
{ exception: exception, warning: warning }
|
|
697
662
|
end
|
|
698
663
|
|
|
699
|
-
def size
|
|
700
|
-
@project.size
|
|
701
|
-
end
|
|
702
|
-
|
|
703
664
|
def to_s
|
|
704
665
|
(home? ? home : root).to_s
|
|
705
666
|
end
|
|
@@ -713,14 +674,9 @@ module Squared
|
|
|
713
674
|
private
|
|
714
675
|
|
|
715
676
|
def __build__(default: nil, **)
|
|
716
|
-
unless task_defined?(
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
end
|
|
720
|
-
end
|
|
721
|
-
if default && task_defined?(out = task_name(default))
|
|
722
|
-
task Rake.application.default_task_name => out
|
|
723
|
-
end
|
|
677
|
+
return unless default && task_defined?(out = task_name(default))
|
|
678
|
+
|
|
679
|
+
task Rake.application.default_task_name => out
|
|
724
680
|
end
|
|
725
681
|
|
|
726
682
|
def __chain__(*)
|
|
@@ -742,7 +698,7 @@ module Squared
|
|
|
742
698
|
else
|
|
743
699
|
step = 0
|
|
744
700
|
catch :found do
|
|
745
|
-
has = ->(c, d) { c.any? { |e| e.is_a?(Regexp) ? d.
|
|
701
|
+
has = ->(c, d) { c.any? { |e| e.is_a?(Regexp) ? d.start_with?(e) : d == e } }
|
|
746
702
|
w = data.with
|
|
747
703
|
a = data.after
|
|
748
704
|
b = data.before
|
|
@@ -801,7 +757,7 @@ module Squared
|
|
|
801
757
|
end
|
|
802
758
|
end
|
|
803
759
|
if step == -1
|
|
804
|
-
level.
|
|
760
|
+
level.prepend(data.action)
|
|
805
761
|
step = 0
|
|
806
762
|
elsif step > 0
|
|
807
763
|
(level[step -= 1] ||= []).concat(data.action)
|
|
@@ -822,8 +778,8 @@ module Squared
|
|
|
822
778
|
format_desc key
|
|
823
779
|
task key do
|
|
824
780
|
unless failed.empty? && group.empty?
|
|
825
|
-
puts
|
|
826
|
-
subject: 'failed placement', hint: false
|
|
781
|
+
puts log_message(Logger::ERROR, *(failed + group.map { |val| val.action }.flatten),
|
|
782
|
+
subject: 'failed placement', hint: false, pass: true)
|
|
827
783
|
end
|
|
828
784
|
cols = level.flatten(1).map(&:size).max
|
|
829
785
|
level.each_with_index do |grp, n|
|
|
@@ -833,19 +789,19 @@ module Squared
|
|
|
833
789
|
' (sync)'
|
|
834
790
|
end}"
|
|
835
791
|
emphasize(grp, title: title, cols: [cols, title.size].max, border: theme[:border],
|
|
836
|
-
sub: [
|
|
792
|
+
sub: [pat: /\A(Step \d+)(.*)\z/, styles: theme[:header]])
|
|
837
793
|
end
|
|
838
794
|
end
|
|
839
795
|
end
|
|
840
796
|
end
|
|
841
797
|
|
|
842
|
-
def puts(*args
|
|
843
|
-
|
|
798
|
+
def puts(*args)
|
|
799
|
+
puts_oe(*args, pipe: pipe)
|
|
844
800
|
end
|
|
845
801
|
|
|
846
|
-
def script_command(task, val, group, ref, on
|
|
802
|
+
def script_command(task, val, group, ref, on, &blk)
|
|
847
803
|
if block_given?
|
|
848
|
-
val =
|
|
804
|
+
val = Support::RunData.new(val, blk)
|
|
849
805
|
elsif !val
|
|
850
806
|
return self
|
|
851
807
|
end
|
|
@@ -854,11 +810,11 @@ module Squared
|
|
|
854
810
|
items = as_a(group, :to_sym)
|
|
855
811
|
else
|
|
856
812
|
label = :ref
|
|
857
|
-
items = as_a(ref
|
|
813
|
+
items = as_a(ref, :to_sym)
|
|
858
814
|
end
|
|
859
815
|
items.each do |name|
|
|
860
|
-
@script[label][name][task] = val
|
|
861
|
-
@events[label][name][task] = on if on.is_a?(Hash)
|
|
816
|
+
(@script[label][name] ||= {})[task] = val
|
|
817
|
+
(@events[label][name] ||= {})[task] = on if on.is_a?(Hash)
|
|
862
818
|
end
|
|
863
819
|
self
|
|
864
820
|
end
|
|
@@ -866,36 +822,32 @@ module Squared
|
|
|
866
822
|
def script_set(data, group: nil, ref: nil)
|
|
867
823
|
data.freeze
|
|
868
824
|
if group
|
|
869
|
-
|
|
825
|
+
as_a(group).each { |val| @script[:group!][val.to_sym] = data }
|
|
870
826
|
elsif ref
|
|
871
|
-
|
|
827
|
+
as_a(ref).each { |val| @script[:ref!][val.to_sym] = data }
|
|
872
828
|
else
|
|
873
829
|
@script[:ref!][:''] = data
|
|
874
830
|
end
|
|
875
831
|
end
|
|
876
832
|
|
|
877
833
|
def data_get(*args, group: nil, ref: nil, target: nil)
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
elsif ref.is_a?(Enumerable)
|
|
834
|
+
target[:group][group.to_sym] if group
|
|
835
|
+
if ref.is_a?(Enumerable)
|
|
881
836
|
ref.each do |key|
|
|
882
|
-
next unless target[:ref]
|
|
837
|
+
next unless (ret = target[:ref][key])
|
|
883
838
|
|
|
884
|
-
ret = target[:ref][key]
|
|
885
839
|
return ret if args.empty? || args.any? { |val| ret.key?(val) }
|
|
886
840
|
end
|
|
887
841
|
nil
|
|
888
|
-
elsif ref
|
|
842
|
+
elsif ref
|
|
889
843
|
target[:ref][ref]
|
|
890
|
-
else
|
|
891
|
-
target[:ref][:_]
|
|
892
844
|
end
|
|
893
845
|
end
|
|
894
846
|
|
|
895
847
|
def root?(path, pass: [])
|
|
896
848
|
return false unless path.directory?
|
|
897
849
|
|
|
898
|
-
path.
|
|
850
|
+
path.each_child do |c|
|
|
899
851
|
name = c.basename.to_s
|
|
900
852
|
next if c.to_s == __FILE__ || (@main == name && c.directory? && c.empty?) || pass.any? { |val| val == name }
|
|
901
853
|
|
|
@@ -905,14 +857,14 @@ module Squared
|
|
|
905
857
|
end
|
|
906
858
|
|
|
907
859
|
def script?(state, target: nil, pat: nil, group: nil, ref: baseref, global: false)
|
|
908
|
-
data = script_find
|
|
860
|
+
data = script_find ref, group
|
|
909
861
|
if global
|
|
910
862
|
target = data[:script] || data[:run] if target.nil?
|
|
911
863
|
pat = data[state] if pat.nil?
|
|
912
864
|
end
|
|
913
865
|
return false if state == :prod && data[:dev] == true && data[:global]
|
|
914
866
|
|
|
915
|
-
target && pat.is_a?(Regexp) ?
|
|
867
|
+
target && pat.is_a?(Regexp) ? as_a(target).any?(pat) : pat == true
|
|
916
868
|
end
|
|
917
869
|
|
|
918
870
|
def scriptobj
|