squared 0.6.8 → 0.7.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.
@@ -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).tap do |subkey|
154
- if sync.include?(tasks) || (tasks.size == 1 && (sync << tasks))
155
- task subkey => tasks
156
- else
157
- multitask subkey => tasks
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
- (TASK_NAME[key] || key).to_s
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
- TASK_BATCH[key]
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 TASK_ALIAS.key?(key)
141
+ return unless @task.alias.key?(key)
184
142
 
185
- TASK_ALIAS[key]
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
- TASK_BASE.include?(key)
156
+ @task.base.include?(key)
199
157
  end
200
158
 
201
159
  def extend?(obj, key)
202
- return false unless TASK_EXTEND.key?(key)
160
+ return false unless @task.project.key?(key)
203
161
 
204
162
  ret = false
205
- TASK_EXTEND[key].each do |kind|
163
+ @task.project[key].each do |kind|
206
164
  next unless obj.is_a?(kind)
207
165
 
208
166
  meth = :"#{key}?"
209
- if TASK_METHODS[kind].include?(meth)
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, :order, :styles, :border)
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.6.8
4
+ version: 0.7.0
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
@@ -124,7 +125,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
124
125
  - !ruby/object:Gem::Version
125
126
  version: '0'
126
127
  requirements: []
127
- rubygems_version: 3.6.9
128
+ rubygems_version: 4.0.3
128
129
  specification_version: 4
129
130
  summary: Rake task generator for managing multi-language workspaces.
130
131
  test_files: []