squared 0.6.9 → 0.7.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/CHANGELOG.md +89 -2
- data/README.md +245 -203
- data/lib/squared/common/format.rb +7 -10
- data/lib/squared/common/prompt.rb +23 -24
- data/lib/squared/common/shell.rb +16 -17
- data/lib/squared/common/system.rb +29 -20
- data/lib/squared/common/utils.rb +43 -54
- data/lib/squared/config.rb +17 -16
- data/lib/squared/version.rb +1 -1
- data/lib/squared/workspace/application.rb +290 -175
- data/lib/squared/workspace/project/base.rb +566 -446
- data/lib/squared/workspace/project/docker.rb +151 -131
- data/lib/squared/workspace/project/git.rb +205 -151
- data/lib/squared/workspace/project/node.rb +90 -88
- data/lib/squared/workspace/project/python.rb +236 -139
- data/lib/squared/workspace/project/ruby.rb +395 -281
- data/lib/squared/workspace/project/support/class.rb +12 -6
- data/lib/squared/workspace/project/support/optionpartition.rb +58 -41
- data/lib/squared/workspace/project/support/utils.rb +68 -0
- data/lib/squared/workspace/project.rb +0 -7
- data/lib/squared/workspace/repo.rb +234 -169
- data/lib/squared/workspace/series.rb +91 -86
- data/lib/squared/workspace/support/base.rb +15 -1
- metadata +2 -1
|
@@ -32,7 +32,7 @@ module Squared
|
|
|
32
32
|
@multiple << val.to_s
|
|
33
33
|
when Regexp
|
|
34
34
|
@multiple << val
|
|
35
|
-
when
|
|
35
|
+
when nil, false
|
|
36
36
|
@multiple.clear
|
|
37
37
|
end
|
|
38
38
|
end
|
|
@@ -47,7 +47,9 @@ module Squared
|
|
|
47
47
|
|
|
48
48
|
def slice!(*args)
|
|
49
49
|
data = compact
|
|
50
|
-
data.slice!(*args)
|
|
50
|
+
ret = data.slice!(*args)
|
|
51
|
+
replace Set.new(data)
|
|
52
|
+
ret
|
|
51
53
|
end
|
|
52
54
|
|
|
53
55
|
def compact
|
|
@@ -109,7 +111,9 @@ module Squared
|
|
|
109
111
|
end
|
|
110
112
|
|
|
111
113
|
def done
|
|
112
|
-
|
|
114
|
+
ret = to_s
|
|
115
|
+
clear
|
|
116
|
+
ret
|
|
113
117
|
end
|
|
114
118
|
|
|
115
119
|
def merge(enum)
|
|
@@ -131,10 +135,12 @@ module Squared
|
|
|
131
135
|
end
|
|
132
136
|
|
|
133
137
|
def <<(obj)
|
|
134
|
-
|
|
138
|
+
unless obj.nil?
|
|
139
|
+
return super if extras.empty? && !extras?(obj)
|
|
135
140
|
|
|
136
|
-
|
|
137
|
-
|
|
141
|
+
unless !extras.include?(@partition) && include?(obj) && @uniq.match?(s = obj.to_s) && !multiple?(s)
|
|
142
|
+
extras << obj
|
|
143
|
+
end
|
|
138
144
|
end
|
|
139
145
|
self
|
|
140
146
|
end
|
|
@@ -21,29 +21,30 @@ module Squared
|
|
|
21
21
|
include Prompt
|
|
22
22
|
|
|
23
23
|
def append(target, *args, delim: false, escape: false, quote: true, strip: nil, force: true, double: false,
|
|
24
|
-
filter: nil, **)
|
|
25
|
-
return if (ret = args.flatten).empty?
|
|
24
|
+
filter: nil, pass: nil, **)
|
|
25
|
+
return if (ret = args.flatten(1)).empty?
|
|
26
26
|
|
|
27
27
|
target << '--' if delim && !target.include?('--')
|
|
28
28
|
if strip
|
|
29
29
|
pat, s = Array(strip)
|
|
30
30
|
ret.map! { |val| val.is_a?(String) ? val.gsub(pat, s || '') : val }
|
|
31
31
|
end
|
|
32
|
-
|
|
32
|
+
if filter
|
|
33
|
+
ret, err = ret.partition { |val| filter.match?(val.to_s) }
|
|
34
|
+
pass&.concat(err)
|
|
35
|
+
end
|
|
33
36
|
if block_given?
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
case (s = yield val)
|
|
37
|
+
ret = ret.each_with_object([]) do |val, out|
|
|
38
|
+
arg = yield val
|
|
39
|
+
case arg
|
|
38
40
|
when String
|
|
39
|
-
out <<
|
|
40
|
-
when
|
|
41
|
-
|
|
41
|
+
out << arg
|
|
42
|
+
when nil, false
|
|
43
|
+
pass&.push(val)
|
|
42
44
|
else
|
|
43
45
|
out << val
|
|
44
46
|
end
|
|
45
47
|
end
|
|
46
|
-
ret = out
|
|
47
48
|
end
|
|
48
49
|
ret.map! do |val|
|
|
49
50
|
next val if opt?(val)
|
|
@@ -61,7 +62,7 @@ module Squared
|
|
|
61
62
|
else
|
|
62
63
|
target.concat(ret)
|
|
63
64
|
end
|
|
64
|
-
|
|
65
|
+
ret
|
|
65
66
|
end
|
|
66
67
|
|
|
67
68
|
def clear(target, opts, pass: true, styles: nil, **kwargs)
|
|
@@ -75,15 +76,13 @@ module Squared
|
|
|
75
76
|
end
|
|
76
77
|
|
|
77
78
|
def delete_key(target, *args, value: false, reverse: false, count: -1)
|
|
78
|
-
|
|
79
|
-
args.each do |val|
|
|
79
|
+
args.each_with_object([]) do |val, out|
|
|
80
80
|
next if (opts = target.grep(matchopt(val, value))).empty?
|
|
81
81
|
|
|
82
82
|
opts = opts.first(count) if count >= 0
|
|
83
83
|
opts.send(reverse ? :reverse_each : :each) { |key| target.delete(key) }
|
|
84
|
-
|
|
84
|
+
out.concat(opts)
|
|
85
85
|
end
|
|
86
|
-
ret
|
|
87
86
|
end
|
|
88
87
|
|
|
89
88
|
def strip(val)
|
|
@@ -93,7 +92,7 @@ module Squared
|
|
|
93
92
|
end
|
|
94
93
|
|
|
95
94
|
def select(list, bare: true, no: true, single: false, double: false)
|
|
96
|
-
ret = bare ? list.grep_v(/=/) : list.grep(/=/).map
|
|
95
|
+
ret = bare ? list.grep_v(/=/) : list.grep(/=/).map { |val| val.split('=', 2).first }
|
|
97
96
|
ret.map! { |val| val.split('|', 2).last }
|
|
98
97
|
ret = ret.grep_v(/\Ano-/) unless no
|
|
99
98
|
return ret if single == double
|
|
@@ -115,6 +114,18 @@ module Squared
|
|
|
115
114
|
list
|
|
116
115
|
end
|
|
117
116
|
|
|
117
|
+
def parse_option(val)
|
|
118
|
+
val = val.strip
|
|
119
|
+
return [val, nil, ''] unless (i = val.index('='))
|
|
120
|
+
|
|
121
|
+
last = val[i.succ..-1].strip
|
|
122
|
+
if last =~ /\A(["'])(.*)\1\z/m
|
|
123
|
+
last = $2
|
|
124
|
+
quote = $1
|
|
125
|
+
end
|
|
126
|
+
[val[0..i.pred], last, quote || '']
|
|
127
|
+
end
|
|
128
|
+
|
|
118
129
|
def parse_arg!(name, val)
|
|
119
130
|
return unless val.is_a?(String)
|
|
120
131
|
|
|
@@ -141,7 +152,8 @@ module Squared
|
|
|
141
152
|
end
|
|
142
153
|
|
|
143
154
|
def pattern?(val)
|
|
144
|
-
val.
|
|
155
|
+
val.start_with?('\A', '^') || val.end_with?('\z', '$') ||
|
|
156
|
+
val.match?(/[.)][*+?]|\(\?:|\\[dsw\d]|\[.+\]|\{\d+,?\d*\}/i)
|
|
145
157
|
end
|
|
146
158
|
|
|
147
159
|
private
|
|
@@ -159,13 +171,13 @@ module Squared
|
|
|
159
171
|
end
|
|
160
172
|
|
|
161
173
|
def shortopt(*group)
|
|
162
|
-
group.map
|
|
163
|
-
"-(?:#{
|
|
174
|
+
g = group.map { |s| Regexp.escape(s.delete_prefix('-')) }
|
|
175
|
+
"-(?:#{g.join('|')})(?:\\z|[^ =]| +[^ -])"
|
|
164
176
|
end
|
|
165
177
|
|
|
166
178
|
def longopt(*group, value)
|
|
167
|
-
group.map
|
|
168
|
-
"--(?:#{
|
|
179
|
+
g = group.map { |s| Regexp.escape(s.delete_prefix('--')) }
|
|
180
|
+
"--(?:#{g.join('|')})(?:#{value ? '=[^ ]| +[^ -]' : '[= ]|\z'})"
|
|
169
181
|
end
|
|
170
182
|
end
|
|
171
183
|
|
|
@@ -356,13 +368,14 @@ module Squared
|
|
|
356
368
|
|
|
357
369
|
def append(*args, **kwargs, &blk)
|
|
358
370
|
args = extras if args.empty?
|
|
359
|
-
|
|
360
|
-
|
|
371
|
+
pass = kwargs[:pass] ||= []
|
|
372
|
+
OptionPartition.append(target, *args, **kwargs, &blk)
|
|
373
|
+
errors.concat(pass)
|
|
361
374
|
self
|
|
362
375
|
end
|
|
363
376
|
|
|
364
377
|
def append_any(*args, escape: false, quote: true, **kwargs)
|
|
365
|
-
(args.empty? ? extras : args.flatten).each do |val|
|
|
378
|
+
(args.empty? ? extras : args.flatten(1)).each do |val|
|
|
366
379
|
if block_given?
|
|
367
380
|
temp = val
|
|
368
381
|
val = yield val
|
|
@@ -399,7 +412,7 @@ module Squared
|
|
|
399
412
|
g = ["\"((?:[^\"]|(?<=\\\\)\"(?!$#{'| ' if windows?}))*)\""]
|
|
400
413
|
g << "'((?:[^']|'\\\\'')*)'" unless windows?
|
|
401
414
|
g << "(#{s})"
|
|
402
|
-
args.map
|
|
415
|
+
list = args.map do |opt|
|
|
403
416
|
if opt.size == 1
|
|
404
417
|
/(?:\A| )-#{opt} ?([^ ]+)/
|
|
405
418
|
else
|
|
@@ -408,7 +421,7 @@ module Squared
|
|
|
408
421
|
end
|
|
409
422
|
ret = []
|
|
410
423
|
target.each do |opt|
|
|
411
|
-
|
|
424
|
+
list.each do |pat|
|
|
412
425
|
next unless opt =~ pat
|
|
413
426
|
|
|
414
427
|
ret << ($1 || $2 || $3)
|
|
@@ -494,10 +507,10 @@ module Squared
|
|
|
494
507
|
|
|
495
508
|
def add_path(*args, option: nil, force: true, double: false, **kwargs)
|
|
496
509
|
if args.empty?
|
|
497
|
-
|
|
498
|
-
found.concat(
|
|
499
|
-
|
|
500
|
-
append(
|
|
510
|
+
list = select { |val| val.is_a?(String) }
|
|
511
|
+
found.concat(list)
|
|
512
|
+
list.map! { |val| path + val } if path
|
|
513
|
+
append(list, force: force, **kwargs)
|
|
501
514
|
else
|
|
502
515
|
val = path ? path.join(*args) : File.join(*args)
|
|
503
516
|
if option
|
|
@@ -510,8 +523,7 @@ module Squared
|
|
|
510
523
|
end
|
|
511
524
|
|
|
512
525
|
def add_quote(*args, **kwargs)
|
|
513
|
-
merge(args.compact
|
|
514
|
-
.map! { |val| val == '--' || OptionPartition.opt?(val) ? val : shell_quote(val, **kwargs) })
|
|
526
|
+
merge(args.compact.map { |s| s == '--' || OptionPartition.opt?(s) ? s : shell_quote(s, **kwargs) })
|
|
515
527
|
self
|
|
516
528
|
end
|
|
517
529
|
|
|
@@ -544,6 +556,12 @@ module Squared
|
|
|
544
556
|
self
|
|
545
557
|
end
|
|
546
558
|
|
|
559
|
+
def detach
|
|
560
|
+
ret = extras
|
|
561
|
+
@extras = []
|
|
562
|
+
ret
|
|
563
|
+
end
|
|
564
|
+
|
|
547
565
|
def delim
|
|
548
566
|
add '--'
|
|
549
567
|
self
|
|
@@ -552,7 +570,7 @@ module Squared
|
|
|
552
570
|
def last(val = nil, &blk)
|
|
553
571
|
unless block_given?
|
|
554
572
|
case val
|
|
555
|
-
when
|
|
573
|
+
when nil
|
|
556
574
|
return extras.last
|
|
557
575
|
when Numeric
|
|
558
576
|
return extras.last(val)
|
|
@@ -566,7 +584,7 @@ module Squared
|
|
|
566
584
|
ret = find_all(&blk)
|
|
567
585
|
unless ret.empty?
|
|
568
586
|
ret = case val
|
|
569
|
-
when
|
|
587
|
+
when nil
|
|
570
588
|
ret.first(1)
|
|
571
589
|
when Numeric
|
|
572
590
|
ret.first(val)
|
|
@@ -584,8 +602,6 @@ module Squared
|
|
|
584
602
|
def splice(*exclude, quote: true, delim: true, path: false, pattern: false, &blk)
|
|
585
603
|
temp, other = if block_given?
|
|
586
604
|
partition(&blk)
|
|
587
|
-
elsif exclude.first.is_a?(Symbol)
|
|
588
|
-
partition(&exclude.first)
|
|
589
605
|
else
|
|
590
606
|
exclude.map! { |pat| Regexp.new(pat) }
|
|
591
607
|
partition do |val|
|
|
@@ -664,10 +680,11 @@ module Squared
|
|
|
664
680
|
end
|
|
665
681
|
|
|
666
682
|
def uniq!(list)
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
683
|
+
list = uniq list
|
|
684
|
+
return if list.empty?
|
|
685
|
+
|
|
686
|
+
concat list
|
|
687
|
+
self
|
|
671
688
|
end
|
|
672
689
|
|
|
673
690
|
private
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Squared
|
|
4
|
+
module Workspace
|
|
5
|
+
module Project
|
|
6
|
+
module Support
|
|
7
|
+
module Utils
|
|
8
|
+
private
|
|
9
|
+
|
|
10
|
+
def rand_s(size)
|
|
11
|
+
if RUBY_VERSION >= '3.1'
|
|
12
|
+
require 'random/formatter'
|
|
13
|
+
Random.new.alphanumeric(size)
|
|
14
|
+
else
|
|
15
|
+
(0...size).map { rand(97..122).chr }.join
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def merge_list(target, list)
|
|
20
|
+
list = Array(list)
|
|
21
|
+
case target
|
|
22
|
+
when Array
|
|
23
|
+
target.concat(list)
|
|
24
|
+
when Set
|
|
25
|
+
target.merge(list)
|
|
26
|
+
else
|
|
27
|
+
Array(target).concat(list)
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def matchmap(list, prefix = nil)
|
|
32
|
+
list.map do |val|
|
|
33
|
+
next val if val.is_a?(Regexp)
|
|
34
|
+
|
|
35
|
+
val = ".*#{val}" if prefix && !val.sub!(/\A(\^|\\A)/, '')
|
|
36
|
+
Regexp.new("#{prefix}#{val == '*' ? '.+' : val}")
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def matchany?(list, *args, empty: true)
|
|
41
|
+
return empty if list.empty?
|
|
42
|
+
|
|
43
|
+
list.any? { |pat| args.any?(pat) }
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def has_value?(target, *args)
|
|
47
|
+
args.any? { |obj,| target.include?(obj) }
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def has_value!(target, *args, first: false)
|
|
51
|
+
ret = nil
|
|
52
|
+
args.each do |val|
|
|
53
|
+
if target.respond_to?(:delete?)
|
|
54
|
+
ret = target if target.delete?(val)
|
|
55
|
+
elsif target.respond_to?(:delete)
|
|
56
|
+
ret = target if target.delete(val)
|
|
57
|
+
elsif target.include?(val)
|
|
58
|
+
ret = target
|
|
59
|
+
end
|
|
60
|
+
break if ret && first
|
|
61
|
+
end
|
|
62
|
+
ret
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
end
|