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
|
@@ -8,88 +8,48 @@ module Squared
|
|
|
8
8
|
include Rake::DSL
|
|
9
9
|
extend Forwardable
|
|
10
10
|
|
|
11
|
-
TASK_BASE = []
|
|
12
|
-
TASK_BATCH = {}
|
|
13
|
-
TASK_EXTEND = Support.hashlist
|
|
14
|
-
TASK_METHODS = {}
|
|
15
|
-
TASK_KEYS = []
|
|
16
|
-
TASK_ALIAS = Support.hashobj
|
|
17
|
-
TASK_NAME = {}
|
|
18
|
-
private_constant :TASK_BASE, :TASK_BATCH, :TASK_EXTEND, :TASK_METHODS, :TASK_KEYS, :TASK_ALIAS, :TASK_NAME
|
|
19
|
-
|
|
20
|
-
class << self
|
|
21
|
-
def add(task, obj)
|
|
22
|
-
key_set task
|
|
23
|
-
TASK_EXTEND[task] << obj
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
def batch(*args, obj)
|
|
27
|
-
if obj.is_a?(Hash)
|
|
28
|
-
obj.each do |key, val|
|
|
29
|
-
key_set key
|
|
30
|
-
data = TASK_BATCH[key] ||= {}
|
|
31
|
-
args.each { |ref| (data[ref] ||= []).concat(val) }
|
|
32
|
-
end
|
|
33
|
-
elsif (data = TASK_BATCH[obj])
|
|
34
|
-
args.each { |ref| data.delete(ref) }
|
|
35
|
-
if data.empty?
|
|
36
|
-
TASK_KEYS.delete(obj)
|
|
37
|
-
TASK_BATCH.delete(obj)
|
|
38
|
-
end
|
|
39
|
-
end
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
def alias(ref, obj)
|
|
43
|
-
if obj.is_a?(Hash)
|
|
44
|
-
obj.each { |key, val| TASK_ALIAS[key][ref] = val }
|
|
45
|
-
elsif TASK_ALIAS.key?(obj)
|
|
46
|
-
TASK_ALIAS[obj].delete(ref)
|
|
47
|
-
TASK_ALIAS.delete(obj) if TASK_ALIAS[obj].empty?
|
|
48
|
-
end
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
def rename(key, task)
|
|
52
|
-
TASK_NAME[key.to_sym] = task.to_sym
|
|
53
|
-
end
|
|
54
|
-
|
|
55
|
-
def base_set(obj)
|
|
56
|
-
TASK_BASE.clear
|
|
57
|
-
TASK_BASE.concat(obj.tasks.reject { |val| TASK_KEYS.include?(val) })
|
|
58
|
-
end
|
|
59
|
-
|
|
60
|
-
def extend_set(obj)
|
|
61
|
-
obj.tasks&.each { |task| add(task, obj) }
|
|
62
|
-
TASK_METHODS[obj] = obj.instance_methods(false)
|
|
63
|
-
end
|
|
64
|
-
|
|
65
|
-
private
|
|
66
|
-
|
|
67
|
-
def key_set(val)
|
|
68
|
-
return if TASK_KEYS.include?(val)
|
|
69
|
-
|
|
70
|
-
TASK_KEYS << val
|
|
71
|
-
TASK_BASE.delete(val)
|
|
72
|
-
end
|
|
73
|
-
end
|
|
74
|
-
|
|
75
11
|
attr_reader :sync, :multiple, :parallel
|
|
76
12
|
|
|
77
13
|
def_delegators :@data, :[], :each, :each_key, :keys, :key?, :include?, :fetch, :update, :merge!, :any?, :none?,
|
|
78
14
|
:delete, :delete_if, :find, :find_all, :to_a, :to_s, :inspect
|
|
79
15
|
def_delegators :@workspace, :task_desc, :task_name, :task_namespace, :task_join, :format_desc
|
|
80
16
|
|
|
81
|
-
def initialize(workspace, exclude: [])
|
|
17
|
+
def initialize(workspace, project, exclude: [])
|
|
82
18
|
@workspace = workspace
|
|
83
19
|
@sync = []
|
|
84
20
|
@multiple = []
|
|
85
21
|
@parallel = []
|
|
86
22
|
@chain = {}
|
|
87
23
|
@exclude = exclude.freeze
|
|
24
|
+
@task = Struct::SeriesData.new(workspace.config_get(:rename))
|
|
25
|
+
@data = {}
|
|
26
|
+
project.each_with_index do |obj, index|
|
|
27
|
+
if index == 0
|
|
28
|
+
target = @task.base
|
|
29
|
+
obj.tasks.each do |key|
|
|
30
|
+
target << key
|
|
31
|
+
@data[key] = []
|
|
32
|
+
end
|
|
33
|
+
else
|
|
34
|
+
target = @task.project
|
|
35
|
+
obj.tasks&.each do |key|
|
|
36
|
+
task_set key
|
|
37
|
+
target[key] << obj
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
if (args = obj.batchargs)
|
|
41
|
+
batch_set(*args)
|
|
42
|
+
end
|
|
43
|
+
if (args = obj.aliasargs)
|
|
44
|
+
alias_set(*args)
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
workspace.config_get(:batch)&.each { |args| batch_set(*args) }
|
|
88
48
|
@session = {
|
|
89
49
|
group: Support.hashlist,
|
|
90
50
|
parent: Support.hashlist,
|
|
91
51
|
id: []
|
|
92
|
-
}
|
|
52
|
+
}.freeze
|
|
93
53
|
end
|
|
94
54
|
|
|
95
55
|
def populate(proj, **)
|
|
@@ -150,13 +110,13 @@ module Squared
|
|
|
150
110
|
|
|
151
111
|
index = 0
|
|
152
112
|
prereqs = level.map do |tasks|
|
|
153
|
-
task_join(key, index += 1)
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
end
|
|
113
|
+
name = task_join(key, index += 1)
|
|
114
|
+
if sync.include?(tasks) || (tasks.size == 1 && (sync << tasks))
|
|
115
|
+
task name => tasks
|
|
116
|
+
else
|
|
117
|
+
multitask name => tasks
|
|
159
118
|
end
|
|
119
|
+
name
|
|
160
120
|
end
|
|
161
121
|
@chain[key] = level.freeze
|
|
162
122
|
parallel << key
|
|
@@ -165,24 +125,22 @@ module Squared
|
|
|
165
125
|
task key => prereqs
|
|
166
126
|
end
|
|
167
127
|
|
|
168
|
-
def reset
|
|
169
|
-
@data = {}
|
|
170
|
-
(TASK_BASE + TASK_KEYS).each { |key| @data[key] = [] }
|
|
171
|
-
@data
|
|
172
|
-
end
|
|
173
|
-
|
|
174
128
|
def name_get(key)
|
|
175
|
-
|
|
129
|
+
return key.to_s unless @task.rename&.key?(key)
|
|
130
|
+
|
|
131
|
+
@task.rename[key]
|
|
176
132
|
end
|
|
177
133
|
|
|
178
134
|
def batch_get(key)
|
|
179
|
-
|
|
135
|
+
return unless @task.batch.key?(key)
|
|
136
|
+
|
|
137
|
+
@task.batch[key]
|
|
180
138
|
end
|
|
181
139
|
|
|
182
140
|
def alias_get(key)
|
|
183
|
-
return unless
|
|
141
|
+
return unless @task.alias.key?(key)
|
|
184
142
|
|
|
185
|
-
|
|
143
|
+
@task.alias[key]
|
|
186
144
|
end
|
|
187
145
|
|
|
188
146
|
def some?(key)
|
|
@@ -195,18 +153,18 @@ module Squared
|
|
|
195
153
|
end
|
|
196
154
|
|
|
197
155
|
def base?(key)
|
|
198
|
-
|
|
156
|
+
@task.base.include?(key)
|
|
199
157
|
end
|
|
200
158
|
|
|
201
159
|
def extend?(obj, key)
|
|
202
|
-
return false unless
|
|
160
|
+
return false unless @task.project.key?(key)
|
|
203
161
|
|
|
204
162
|
ret = false
|
|
205
|
-
|
|
163
|
+
@task.project[key].each do |kind|
|
|
206
164
|
next unless obj.is_a?(kind)
|
|
207
165
|
|
|
208
166
|
meth = :"#{key}?"
|
|
209
|
-
if
|
|
167
|
+
if kind.method_defined?(meth)
|
|
210
168
|
out = obj.__send__(meth)
|
|
211
169
|
return true if out == 1
|
|
212
170
|
return out if obj.ref?(kind.ref)
|
|
@@ -223,6 +181,11 @@ module Squared
|
|
|
223
181
|
data.keys.any? { |ref| obj.ref?(ref) }
|
|
224
182
|
end
|
|
225
183
|
|
|
184
|
+
def missing?(obj, key)
|
|
185
|
+
obj = obj.ref unless obj.is_a?(Symbol)
|
|
186
|
+
@task.missing.key?(obj) && @task.missing.include?(key)
|
|
187
|
+
end
|
|
188
|
+
|
|
226
189
|
def chain?(val)
|
|
227
190
|
@chain.each_value do |tasks|
|
|
228
191
|
tasks.flatten(1).each do |name|
|
|
@@ -252,6 +215,48 @@ module Squared
|
|
|
252
215
|
|
|
253
216
|
private
|
|
254
217
|
|
|
218
|
+
def task_set(key)
|
|
219
|
+
@data[key] = []
|
|
220
|
+
@task.base.delete(key)
|
|
221
|
+
@task.keys << key
|
|
222
|
+
end
|
|
223
|
+
|
|
224
|
+
def batch_set(*args, obj)
|
|
225
|
+
data = @task.batch
|
|
226
|
+
if obj.is_a?(Hash)
|
|
227
|
+
obj.each do |key, val|
|
|
228
|
+
task_set key
|
|
229
|
+
if val.first.is_a?(Array)
|
|
230
|
+
missing = val.last
|
|
231
|
+
val = val.first
|
|
232
|
+
end
|
|
233
|
+
target = data[key]
|
|
234
|
+
args.each do |ref|
|
|
235
|
+
(target[ref] ||= []).concat(val)
|
|
236
|
+
next unless missing == true
|
|
237
|
+
|
|
238
|
+
@task.missing[ref] << key
|
|
239
|
+
end
|
|
240
|
+
end
|
|
241
|
+
elsif data.key?(obj)
|
|
242
|
+
args.each { |ref| data[obj].delete(ref) }
|
|
243
|
+
if data[obj].empty?
|
|
244
|
+
@task.keys.delete(obj)
|
|
245
|
+
data.delete(obj)
|
|
246
|
+
end
|
|
247
|
+
end
|
|
248
|
+
end
|
|
249
|
+
|
|
250
|
+
def alias_set(ref, obj)
|
|
251
|
+
data = @task.alias
|
|
252
|
+
if obj.is_a?(Hash)
|
|
253
|
+
obj.each { |key, val| data[key][ref] = val }
|
|
254
|
+
elsif data.key?(obj)
|
|
255
|
+
data[obj].delete(ref)
|
|
256
|
+
data.delete(obj) if data[obj].empty?
|
|
257
|
+
end
|
|
258
|
+
end
|
|
259
|
+
|
|
255
260
|
def invoked_get(name)
|
|
256
261
|
return unless Rake::Task.task_defined?(name) && (ret = Rake::Task[name]).already_invoked
|
|
257
262
|
|
|
@@ -5,7 +5,21 @@ module Squared
|
|
|
5
5
|
module Support
|
|
6
6
|
RunData = Struct.new('RunData', :run, :block)
|
|
7
7
|
ChainData = Struct.new('ChainData', :action, :step, :with, :before, :after, :sync)
|
|
8
|
-
BannerData = Struct.new('BannerData', :command, :
|
|
8
|
+
BannerData = Struct.new('BannerData', :command, :styles, :border, :order) do
|
|
9
|
+
def initialize(command = true, styles = nil, border = nil, order = [])
|
|
10
|
+
super(command, Array(styles), Array(border), order)
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
SessionData = Struct.new('SessionData', :group, :ref, :store, :items) do
|
|
14
|
+
def initialize
|
|
15
|
+
super(Support.hashobj, Support.hashobj, {}, [])
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
SeriesData = Struct.new('SeriesData', :keys, :base, :project, :batch, :missing, :alias, :rename) do
|
|
19
|
+
def initialize(rename = nil)
|
|
20
|
+
super(Set.new, [], Support.hashlist, Support.hashobj, Support.hashlist, Support.hashobj, rename)
|
|
21
|
+
end
|
|
22
|
+
end
|
|
9
23
|
end
|
|
10
24
|
end
|
|
11
25
|
end
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: squared
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.7.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- An Pham
|
|
@@ -97,6 +97,7 @@ files:
|
|
|
97
97
|
- lib/squared/workspace/project/ruby.rb
|
|
98
98
|
- lib/squared/workspace/project/support/class.rb
|
|
99
99
|
- lib/squared/workspace/project/support/optionpartition.rb
|
|
100
|
+
- lib/squared/workspace/project/support/utils.rb
|
|
100
101
|
- lib/squared/workspace/repo.rb
|
|
101
102
|
- lib/squared/workspace/series.rb
|
|
102
103
|
- lib/squared/workspace/support.rb
|