squared 0.0.11 → 0.0.12

Sign up to get free protection for your applications and to get access to all the features.
@@ -3,8 +3,8 @@
3
3
  module Squared
4
4
  module Workspace
5
5
  class Application
6
- include Common
7
- include Format
6
+ include Common::Format
7
+ include Utils
8
8
  include ::Rake::DSL
9
9
 
10
10
  SCRIPT_OBJ = {
@@ -20,9 +20,9 @@ module Squared
20
20
  class << self
21
21
  def implement(*objs)
22
22
  objs.each do |obj|
23
- next unless obj < base_project
23
+ next unless obj < impl_project
24
24
 
25
- impl_project.unshift(obj)
25
+ kind_project.unshift(obj)
26
26
  obj.tasks&.each { |task| impl_series.add(task, obj) }
27
27
  if (args = obj.batchargs)
28
28
  impl_series.batch(*args)
@@ -30,36 +30,38 @@ module Squared
30
30
  if (args = obj.aliasargs)
31
31
  impl_series.alias(*args)
32
32
  end
33
+ if (args = obj.bannerargs)
34
+ @attr_banner += args
35
+ end
33
36
  end
34
37
  end
35
38
 
36
39
  def find(ref = nil, path: nil)
37
- if ref && (ret = impl_project.find { |proj| proj.ref == ref.to_sym })
40
+ if ref && (ret = kind_project.find { |proj| proj.ref == ref })
38
41
  ret
39
42
  elsif path
40
- impl_project.find { |proj| proj.config?(path) }
43
+ kind_project.find { |proj| proj.config?(path) }
41
44
  end
42
45
  end
43
46
 
44
47
  def baseref
45
- base_project.ref
48
+ impl_project.ref
46
49
  end
47
50
 
48
51
  def to_s
49
- super.to_s.match(/[^:]+$/)[0]
52
+ super.match(/[^:]+$/)[0]
50
53
  end
51
54
 
52
- attr_reader :impl_project, :attr_banner
53
- attr_accessor :impl_series, :base_project
55
+ attr_reader :kind_project
56
+ attr_accessor :impl_series, :impl_project, :attr_banner
54
57
  end
55
58
 
56
- @impl_project = []
57
- @attr_banner = SymSet.new(%i[name project path ref group parent version])
59
+ @kind_project = []
58
60
 
59
61
  attr_reader :root, :home, :main, :prefix, :exception, :warning, :pipe, :verbose, :theme, :series, :closed
60
62
 
61
- def initialize(home = Dir.pwd, *, main: nil, prefix: nil, verbose: nil,
62
- common: ARG[:COMMON], pipe: ARG[:PIPE], exception: ARG[:FAIL], **)
63
+ def initialize(home = Dir.pwd, *, main: nil, prefix: nil,
64
+ verbose: ARG[:VERBOSE], common: ARG[:COMMON], pipe: ARG[:PIPE], exception: ARG[:FAIL], **)
63
65
  @home = Pathname.new(home).realdirpath
64
66
  @root = @home.parent
65
67
  @main = (main || @home.basename).to_s.freeze
@@ -69,7 +71,7 @@ module Squared
69
71
  @extensions = []
70
72
  @pipe = env_pipe(pipe, (ARG[:OUT] && env(ARG[:OUT])) || 1, root: @home)
71
73
  @exception = env_bool(exception)
72
- @verbose = verbose.nil? ? @pipe != 0 : verbose
74
+ @verbose = env_bool(verbose, verbose.nil? || verbose.is_a?(::String) ? @pipe != 0 : verbose)
73
75
  @warning = @verbose != false
74
76
  @closed = false
75
77
  if common
@@ -100,9 +102,9 @@ module Squared
100
102
  end
101
103
 
102
104
  def build(parallel: [], **kwargs)
103
- kwargs[:parallel] = parallel.map(&:to_s)
104
- return if @closed || !enabled?
105
+ return self unless enabled? && !@closed
105
106
 
107
+ kwargs[:parallel] = parallel.map(&:to_s)
106
108
  @project.each_value do |proj|
107
109
  next unless proj.enabled?
108
110
 
@@ -110,7 +112,7 @@ module Squared
110
112
  series.populate(proj)
111
113
  end
112
114
 
113
- Application.impl_project.each { |obj| obj.populate(self, **kwargs) }
115
+ Application.kind_project.each { |obj| obj.populate(self, **kwargs) }
114
116
  @extensions.each { |ext| __send__(ext, **kwargs) }
115
117
 
116
118
  series.build(**kwargs)
@@ -118,13 +120,14 @@ module Squared
118
120
 
119
121
  yield self if block_given?
120
122
  @closed = true
123
+ self
121
124
  end
122
125
 
123
126
  def with(*val, group: nil, **kwargs, &blk)
124
127
  @group = nil
125
128
  @ref = nil
126
129
  @withargs = kwargs.empty? ? nil : kwargs
127
- val = [group || kwargs[:ref]].compact.flatten if val.empty?
130
+ val = as_a(group || kwargs[:ref], flat: true, compact: true) if val.empty?
128
131
  kind = val.first
129
132
  val = kind if val.size == 1
130
133
  case kind
@@ -152,6 +155,10 @@ module Squared
152
155
  script_command :depend, script, group, ref
153
156
  end
154
157
 
158
+ def graph(script, group: @group, ref: @ref)
159
+ script_command :graph, as_a(script, :to_s).freeze, group, ref
160
+ end
161
+
155
162
  def clean(script, group: @group, ref: @ref)
156
163
  script_command :clean, script, group, ref
157
164
  end
@@ -211,7 +218,7 @@ module Squared
211
218
  self
212
219
  end
213
220
 
214
- def add(path, val = nil, **kwargs, &blk)
221
+ def add(path, project = nil, **kwargs, &blk)
215
222
  if @withargs
216
223
  data = @withargs.dup
217
224
  data.merge!(kwargs)
@@ -227,19 +234,19 @@ module Squared
227
234
  kwargs = kwargs.dup unless @withargs
228
235
  kwargs[:group] = @group
229
236
  end
230
- path = root_path(path)
231
- val = (val || path.basename).to_s
232
- name = val.to_sym
237
+ path = rootpath(path)
238
+ project = (project || path.basename).to_s
239
+ name = task_name(project)
233
240
  index = 0
234
241
  while @project[name]
235
242
  index += 1
236
- name = :"#{val}-#{index}"
243
+ name = "#{project}-#{index}"
237
244
  end
238
245
  proj = ((if !ref.is_a?(::Class)
239
246
  Application.find(ref, path: path)
240
247
  elsif ref < Project::Base
241
248
  ref
242
- end) || Project::Base).new(self, path, task_name(name), **kwargs)
249
+ end) || Project::Base).new(self, path, name, **kwargs)
243
250
  @project[name] = proj
244
251
  __get__(:project)[name] = proj unless kwargs[:private]
245
252
  proj.instance_eval(&blk) if block_given?
@@ -247,11 +254,11 @@ module Squared
247
254
  end
248
255
 
249
256
  def group(path, val, override: {}, **kwargs, &blk)
250
- root_path(path).children.map do |dir|
257
+ rootpath(path).children.map do |dir|
251
258
  next unless dir.directory?
252
259
 
253
- basename = dir.basename.to_s.to_sym
254
- [dir, basename, override[basename]]
260
+ basename = dir.basename.to_s
261
+ [dir, basename, override[basename.to_sym]]
255
262
  end
256
263
  .each do |dir, basename, opts|
257
264
  args = kwargs.dup
@@ -271,7 +278,7 @@ module Squared
271
278
  self
272
279
  end
273
280
 
274
- def style(name, *args, target: nil, empty: false)
281
+ def style(obj, *args, target: nil, empty: false)
275
282
  data = nil
276
283
  if target
277
284
  as_a(target).each_with_index do |key, i|
@@ -282,13 +289,14 @@ module Squared
282
289
  end
283
290
  end
284
291
  end
285
- apply_style(data || theme, name, args, empty: empty) unless target && !data
292
+ apply_style(data || theme, obj, args, empty: empty) unless target && !data
286
293
  self
287
294
  end
288
295
 
289
296
  def find(path = nil, name: nil)
290
- path = root_path(path) if path
291
- ret = @project.find { |_, item| (path && item.path == path) || (name && item.name == name.to_s) }&.last
297
+ path &&= rootpath(path)
298
+ name &&= name.to_s
299
+ ret = @project.find { |_, item| (path && item.path == path) || (name && item.name == name) }&.last
292
300
  return ret unless block_given?
293
301
 
294
302
  yield ret if ret
@@ -296,7 +304,7 @@ module Squared
296
304
  end
297
305
 
298
306
  def find_base(obj)
299
- Application.impl_project.find { |proj| obj.instance_of?(proj) }
307
+ Application.kind_project.find { |proj| obj.instance_of?(proj) }
300
308
  end
301
309
 
302
310
  def task_name(val, desc: false)
@@ -310,10 +318,6 @@ module Squared
310
318
  first ? ret.first : task_join(*ret[0..-2])
311
319
  end
312
320
 
313
- def task_join(*val)
314
- val.join(':')
315
- end
316
-
317
321
  def task_resolve(obj, key)
318
322
  tasks = []
319
323
  if (base = task_base?(key))
@@ -355,14 +359,6 @@ module Squared
355
359
  ret
356
360
  end
357
361
 
358
- def root_path(*args)
359
- root.join(*args)
360
- end
361
-
362
- def home_path(*args)
363
- home.join(*args)
364
- end
365
-
366
362
  def script_find(*args)
367
363
  args.reverse_each do |val|
368
364
  next unless val && (ret = val.is_a?(::Symbol) ? @script[:ref!][val] : @script[:group!][val.to_sym])
@@ -428,6 +424,14 @@ module Squared
428
424
  !(proj = find(home)).nil? && proj.enabled?
429
425
  end
430
426
 
427
+ def rootpath(*args)
428
+ root.join(*args)
429
+ end
430
+
431
+ def homepath(*args)
432
+ home.join(*args)
433
+ end
434
+
431
435
  def baseref
432
436
  Application.baseref
433
437
  end
@@ -436,6 +440,8 @@ module Squared
436
440
  { exception: exception, warning: warning }
437
441
  end
438
442
 
443
+ public :task_join
444
+
439
445
  private
440
446
 
441
447
  def __build__(default: nil, **)