squared 0.4.19 → 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.
@@ -26,10 +26,10 @@ module Squared
26
26
  next unless base || obj < impl_project
27
27
 
28
28
  if base
29
- self.impl_project = obj
29
+ @impl_project = obj
30
30
  impl_series.base_set(obj)
31
31
  else
32
- kind_project.unshift(obj)
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 = SymSet.new
76
+ @task_exclude = Set.new
77
77
 
78
78
  attr_reader :root, :home, :main, :prefix, :exception, :warning, :pipe, :verbose, :theme, :series, :closed
79
79
 
@@ -92,18 +92,12 @@ module Squared
92
92
  @prefix = prefix
93
93
  @series = Application.series_wrap(self)
94
94
  @project = {}
95
- @kind = Support.hashlist
95
+ @kind = {}
96
96
  @extensions = []
97
- @envname = env_key(@main).freeze
98
- @pipe = $DEBUG ? 2 : env_pipe(pipe, (ARG[:OUT] && env(ARG[:OUT])) || 1, root: @home)
97
+ @envname = @main.gsub(/[^\w]+/, '_').upcase.freeze
98
+ @pipe = env_pipe(pipe, (ARG[:OUT] && env(ARG[:OUT])) || 1, root: @home)
99
99
  @exception = env_bool exception
100
- @verbose = if $VERBOSE.nil?
101
- false
102
- elsif verbose.nil?
103
- @pipe != 0
104
- else
105
- env_bool(verbose, verbose.is_a?(String) ? @pipe != 0 : verbose, index: true)
106
- end
100
+ @verbose = env_bool(verbose, verbose.nil? || verbose.is_a?(String) ? @pipe != 0 : verbose, index: true)
107
101
  @warning = @verbose != false
108
102
  @closed = false
109
103
  if common
@@ -112,20 +106,20 @@ module Squared
112
106
  else
113
107
  @theme = {}
114
108
  end
115
- @chain = Support.hashlist
109
+ @chain = {}
116
110
  @script = {
117
- group: Support.hashobj,
118
- ref: Support.hashobj,
111
+ group: {},
112
+ ref: {},
119
113
  group!: {},
120
114
  ref!: {}
121
115
  }.freeze
122
116
  @events = {
123
- group: Support.hashobj,
124
- ref: Support.hashobj
117
+ group: {},
118
+ ref: {}
125
119
  }.freeze
126
120
  @pass = {
127
- group: Support.hashobj,
128
- ref: Support.hashobj,
121
+ group: {},
122
+ ref: {},
129
123
  global: {},
130
124
  pattern: []
131
125
  }.freeze
@@ -226,12 +220,12 @@ module Squared
226
220
  if arg.include?(':') || (keys && !keys.include?(arg))
227
221
  task_name(arg)
228
222
  else
229
- /\A#{Regexp.escape(task_name(arg))}:/
223
+ /#{Regexp.escape(arg)}:/
230
224
  end
231
225
  end
232
226
  end
233
- data = Struct::ChainData.new(action, step, ns.call(with), ns.call(before), ns.call(after), sync)
234
- @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
235
229
  self
236
230
  end
237
231
 
@@ -273,9 +267,9 @@ module Squared
273
267
 
274
268
  def pass(name, group: @group, ref: @ref, &blk)
275
269
  data = if group
276
- @pass[:group][group]
270
+ @pass[:group][group] ||= {}
277
271
  elsif ref
278
- @pass[:ref][ref]
272
+ @pass[:ref][ref] ||= {}
279
273
  else
280
274
  @pass[:global]
281
275
  end
@@ -284,7 +278,7 @@ module Squared
284
278
  end
285
279
 
286
280
  def banner(*args, command: true, styles: nil, border: nil, group: @group, ref: @ref)
287
- data = { command: command, order: [], styles: check_style(styles, empty: false), border: check_style(border) }
281
+ data = Support::BannerData.new(command, [], check_style(styles, empty: false), check_style(border))
288
282
  args.each do |meth|
289
283
  if meth.is_a?(Array)
290
284
  found = false
@@ -307,26 +301,21 @@ module Squared
307
301
  elsif !Application.attr_banner.include?(meth = meth.to_sym)
308
302
  next
309
303
  end
310
- data[:order] << meth
304
+ data.order << meth
311
305
  end
312
- data = {} if !command && data[:order].empty?
313
306
  if group
314
307
  label = :group
315
- items = Array(group)
308
+ items = as_a group
316
309
  else
317
310
  label = :ref
318
- items = Array(ref || :_)
311
+ items = ref ? as_a(ref) : [:_]
319
312
  end
320
313
  items.each { |val| @banner[label][val.to_sym] = data }
321
314
  self
322
315
  end
323
316
 
324
317
  def add(path, project = nil, **kwargs, &blk)
325
- if @withargs
326
- data = @withargs.dup
327
- data.merge!(kwargs)
328
- kwargs = data
329
- end
318
+ kwargs = @withargs.yield_self { |data| data.dup.update(kwargs) } if @withargs
330
319
  ref = if kwargs.key?(:ref)
331
320
  kwargs = kwargs.dup unless @withargs
332
321
  kwargs.delete(:ref)
@@ -366,14 +355,14 @@ module Squared
366
355
  end
367
356
  .each do |dir, basename, opts|
368
357
  args = kwargs.dup
369
- args.merge!(opts) if opts
358
+ args.update(opts) if opts
370
359
  add(dir, basename, group: val, **args, &blk)
371
360
  end
372
361
  self
373
362
  end
374
363
 
375
364
  def compose(name, &blk)
376
- namespace(task_name(name), &blk)
365
+ namespace(task_name(name), &blk) if block_given?
377
366
  self
378
367
  end
379
368
 
@@ -385,7 +374,7 @@ module Squared
385
374
  def style(obj, *args, target: nil, empty: false)
386
375
  data = nil
387
376
  if target
388
- Array(target).each_with_index do |key, i|
377
+ as_a(target).each_with_index do |key, i|
389
378
  if i == 0
390
379
  break unless (data = __get__(:theme)[key.to_sym])
391
380
  else
@@ -405,7 +394,7 @@ module Squared
405
394
  }
406
395
  data.each do |key, val|
407
396
  key = key.to_s
408
- if key.match?(/\A(\\A|\^)/) || key.match?(/(\\z|\$)\z/)
397
+ if key.start_with?(/(\\A|\^)/) || key.match?(/(\\z|\$)\z/)
409
398
  @describe[:replace] << [Regexp.new(key), val]
410
399
  else
411
400
  @describe[val.is_a?(Regexp) ? :pattern : :alias][key.to_s] = val
@@ -423,13 +412,13 @@ module Squared
423
412
  if ret.empty?
424
413
  ret = @project.select { |_, item| item.ref?(ref) }.map(&:last) if ref
425
414
  if ret.empty? && (path || name)
426
- path &&= rootpath(path)
415
+ path &&= rootpath path
427
416
  name &&= name.to_s
428
417
  proj = @project.find { |_, item| (path && item.path == path) || (name && item.name == name) }&.last
429
418
  ret << proj if proj
430
419
  end
431
420
  end
432
- return (group || ref ? ret : ret.first) unless block_given?
421
+ return (group || ref ? ret : ret[0]) unless block_given?
433
422
 
434
423
  ret.each(&blk)
435
424
  self
@@ -491,7 +480,7 @@ module Squared
491
480
  end
492
481
 
493
482
  def task_namespace(val, first: false)
494
- return unless (ret = val.to_s.split(':')).size > 1
483
+ return nil unless (ret = val.to_s.split(':')).size > 1
495
484
 
496
485
  first ? ret.first : task_join(*ret[0..-2])
497
486
  end
@@ -523,7 +512,7 @@ module Squared
523
512
  obj.allref.each do |ref|
524
513
  next unless obj.has?(key, ref) && (alt = data[ref])
525
514
 
526
- ret = task_resolve(obj, alt)
515
+ ret = task_resolve obj, alt
527
516
  break unless ret.empty?
528
517
  end
529
518
  else
@@ -543,7 +532,7 @@ module Squared
543
532
  end
544
533
 
545
534
  def format_desc(val, opts = nil, arg: 'opts*', before: nil, after: nil, out: false)
546
- return unless TASK_METADATA || out
535
+ return unless TASK_METADATA
547
536
 
548
537
  val = val.split(':') if val.is_a?(String)
549
538
  if before || after || opts
@@ -636,18 +625,6 @@ module Squared
636
625
  Rake::Win32.windows?
637
626
  end
638
627
 
639
- def mri?
640
- RUBY_ENGINE == 'ruby'
641
- end
642
-
643
- def jruby?
644
- RUBY_ENGINE == 'jruby'
645
- end
646
-
647
- def truffleruby?
648
- RUBY_ENGINE == 'truffleruby'
649
- end
650
-
651
628
  def docker?
652
629
  !Dir['/.dockerenv', '/docker-*.{sh,d}'].empty?
653
630
  end
@@ -684,10 +661,6 @@ module Squared
684
661
  { exception: exception, warning: warning }
685
662
  end
686
663
 
687
- def size
688
- @project.size
689
- end
690
-
691
664
  def to_s
692
665
  (home? ? home : root).to_s
693
666
  end
@@ -701,14 +674,9 @@ module Squared
701
674
  private
702
675
 
703
676
  def __build__(default: nil, **)
704
- unless task_defined?('squared:version')
705
- task 'squared:version' do
706
- puts Squared::VERSION
707
- end
708
- end
709
- if default && task_defined?(out = task_name(default))
710
- task Rake.application.default_task_name => out
711
- end
677
+ return unless default && task_defined?(out = task_name(default))
678
+
679
+ task Rake.application.default_task_name => out
712
680
  end
713
681
 
714
682
  def __chain__(*)
@@ -730,7 +698,7 @@ module Squared
730
698
  else
731
699
  step = 0
732
700
  catch :found do
733
- has = ->(c, d) { c.any? { |e| e.is_a?(Regexp) ? d.match?(e) : d == e } }
701
+ has = ->(c, d) { c.any? { |e| e.is_a?(Regexp) ? d.start_with?(e) : d == e } }
734
702
  w = data.with
735
703
  a = data.after
736
704
  b = data.before
@@ -789,7 +757,7 @@ module Squared
789
757
  end
790
758
  end
791
759
  if step == -1
792
- level.unshift(data.action)
760
+ level.prepend(data.action)
793
761
  step = 0
794
762
  elsif step > 0
795
763
  (level[step -= 1] ||= []).concat(data.action)
@@ -810,8 +778,8 @@ module Squared
810
778
  format_desc key
811
779
  task key do
812
780
  unless failed.empty? && group.empty?
813
- puts(log_message(Logger::ERROR, *(failed + group.map { |val| val.action }.flatten),
814
- subject: 'failed placement', hint: false), pipe: 2)
781
+ puts log_message(Logger::ERROR, *(failed + group.map { |val| val.action }.flatten),
782
+ subject: 'failed placement', hint: false, pass: true)
815
783
  end
816
784
  cols = level.flatten(1).map(&:size).max
817
785
  level.each_with_index do |grp, n|
@@ -827,13 +795,13 @@ module Squared
827
795
  end
828
796
  end
829
797
 
830
- def puts(*args, **kwargs)
831
- log_console(*args, pipe: kwargs[:pipe] || pipe)
798
+ def puts(*args)
799
+ puts_oe(*args, pipe: pipe)
832
800
  end
833
801
 
834
802
  def script_command(task, val, group, ref, on, &blk)
835
803
  if block_given?
836
- val = Struct::RunData.new(val, blk)
804
+ val = Support::RunData.new(val, blk)
837
805
  elsif !val
838
806
  return self
839
807
  end
@@ -845,8 +813,8 @@ module Squared
845
813
  items = as_a(ref, :to_sym)
846
814
  end
847
815
  items.each do |name|
848
- @script[label][name][task] = val
849
- @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)
850
818
  end
851
819
  self
852
820
  end
@@ -854,26 +822,24 @@ module Squared
854
822
  def script_set(data, group: nil, ref: nil)
855
823
  data.freeze
856
824
  if group
857
- Array(group).each { |val| @script[:group!][val.to_sym] = data }
825
+ as_a(group).each { |val| @script[:group!][val.to_sym] = data }
858
826
  elsif ref
859
- Array(ref).each { |val| @script[:ref!][val.to_sym] = data }
827
+ as_a(ref).each { |val| @script[:ref!][val.to_sym] = data }
860
828
  else
861
829
  @script[:ref!][:''] = data
862
830
  end
863
831
  end
864
832
 
865
833
  def data_get(*args, group: nil, ref: nil, target: nil)
866
- if group && target[:group].key?(key = group.to_sym)
867
- target[:group][key]
868
- elsif ref.is_a?(Enumerable)
834
+ target[:group][group.to_sym] if group
835
+ if ref.is_a?(Enumerable)
869
836
  ref.each do |key|
870
- next unless target[:ref].key?(key)
837
+ next unless (ret = target[:ref][key])
871
838
 
872
- ret = target[:ref][key]
873
839
  return ret if args.empty? || args.any? { |val| ret.key?(val) }
874
840
  end
875
841
  nil
876
- elsif ref && target[:ref].key?(ref)
842
+ elsif ref
877
843
  target[:ref][ref]
878
844
  end
879
845
  end
@@ -881,7 +847,7 @@ module Squared
881
847
  def root?(path, pass: [])
882
848
  return false unless path.directory?
883
849
 
884
- path.children.each do |c|
850
+ path.each_child do |c|
885
851
  name = c.basename.to_s
886
852
  next if c.to_s == __FILE__ || (@main == name && c.directory? && c.empty?) || pass.any? { |val| val == name }
887
853
 
@@ -891,14 +857,14 @@ module Squared
891
857
  end
892
858
 
893
859
  def script?(state, target: nil, pat: nil, group: nil, ref: baseref, global: false)
894
- data = script_find(ref, group)
860
+ data = script_find ref, group
895
861
  if global
896
862
  target = data[:script] || data[:run] if target.nil?
897
863
  pat = data[state] if pat.nil?
898
864
  end
899
865
  return false if state == :prod && data[:dev] == true && data[:global]
900
866
 
901
- target && pat.is_a?(Regexp) ? Array(target).any? { |val| val.match?(pat) } : pat == true
867
+ target && pat.is_a?(Regexp) ? as_a(target).any?(pat) : pat == true
902
868
  end
903
869
 
904
870
  def scriptobj