squared 0.4.29 → 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.
@@ -17,13 +17,13 @@ module Squared
17
17
  val = val.strip
18
18
  return [val, '', ''] unless (i = val.index('='))
19
19
 
20
- last = val[(i + 1)..-1].strip
20
+ last = val[i + 1..-1].strip
21
21
  quote = ''
22
22
  if last =~ /\A(["'])(.+)\1\z/
23
23
  last = $2
24
24
  quote = $1
25
25
  end
26
- [val[0..(i - 1)], last, quote]
26
+ [val[0..i - 1], last, quote]
27
27
  end
28
28
 
29
29
  def task_invoke(*cmd, args: [], exception: true, warning: true)
@@ -88,41 +88,16 @@ module Squared
88
88
  end
89
89
  end
90
90
 
91
- def time_offset(val = nil)
92
- val = DateTime.parse(val) if val.is_a?(::String)
93
- cur = DateTime.now
94
- ret = 0
95
- if (r = /^([+-])(\d+):(\d+):(\d+)$/.match((val || cur).strftime('%::z')))
96
- ret += (r[1] == '+' ? -1 : 1) * ((r[2].to_i * 60 * 60) + (r[3].to_i * 60) + r[4].to_i) * 1000
97
- end
98
- return ret unless val
99
-
100
- (cur.strftime('%Q').to_i + time_offset) - (val.strftime('%Q').to_i + ret)
101
- end
102
-
103
91
  def time_since(val, ms: true)
104
92
  s = ms ? '%s%L' : '%s'
105
93
  Time.now.utc.strftime(s).to_i - Time.parse(val).utc.strftime(s).to_i
106
94
  end
107
95
 
108
- def rand_s(size)
109
- if RUBY_VERSION >= '3.1'
110
- require 'random/formatter'
111
- Random.new.alphanumeric(size)
112
- else
113
- (0...size).map { rand(97..122).chr }.join
114
- end
115
- end
116
-
117
96
  def env(key, default = nil, suffix: nil, strict: false, equals: nil, ignore: nil)
118
97
  ret = env_value(key, suffix: suffix, strict: strict)
119
98
  return ret == equals.to_s unless equals.nil?
120
99
 
121
- ret.empty? || (ignore && Array(ignore).any? { |val| val.to_s == ret }) ? default : ret
122
- end
123
-
124
- def env_key(*val)
125
- val.join('_').gsub(/\W+/, '_').upcase
100
+ ret.empty? || (ignore && as_a(ignore).any? { |val| val.to_s == ret }) ? default : ret
126
101
  end
127
102
 
128
103
  def env_value(key, default = '', suffix: nil, strict: false)
@@ -1,7 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'set'
4
+
3
5
  require_relative 'common/base'
4
- require_relative 'common/class'
5
6
  require_relative 'common/format'
6
7
  require_relative 'common/prompt'
7
8
  require_relative 'common/shell'
@@ -15,7 +15,8 @@ module Squared
15
15
  def parse(gem, namespace, ext = [pkg])
16
16
  require gem
17
17
  obj = eval namespace
18
- Array(ext).each { |val| @@mime_obj[val] = [obj, ext] }
18
+ ext = [ext] unless ext.is_a?(Array)
19
+ ext.each { |val| @@mime_obj[val] = [obj, ext] }
19
20
  rescue LoadError, NameError => e
20
21
  warn e
21
22
  nil
@@ -26,7 +27,7 @@ module Squared
26
27
  def link(project, main = project.dependfile.basename, name = nil, **kwargs, &blk)
27
28
  return unless project.enabled?
28
29
 
29
- ret = Viewer.new(main, name, project: project, **kwargs)
30
+ ret = new(main, name, project: project, **kwargs)
30
31
  ret.instance_eval(&blk) if block_given?
31
32
  ret
32
33
  end
@@ -88,16 +89,16 @@ module Squared
88
89
  @required = true
89
90
  project ? [project, 'not found'] : ['name', 'missing']
90
91
  end
91
- warn log_message(Logger::WARN, msg, subject: self.class, hint: hint)
92
+ warn log_message(Logger::WARN, msg, subject: self.class, hint: hint, pass: true)
92
93
  end
93
94
 
94
95
  def build
95
96
  return unless enabled?
96
97
 
97
- namespace task_name(name) do |ns|
98
+ namespace(ns = task_name(name)) do
98
99
  @mime.each do |type, items|
99
100
  items.each do |command, file, opts|
100
- next if Rake::Task.task_defined?("#{ns.scope.path}:#{command}:#{type}")
101
+ next if Rake::Task.task_defined?("#{ns}:#{command}:#{type}")
101
102
 
102
103
  namespace command do
103
104
  unless (data = @@mime_obj[type])
@@ -128,7 +129,7 @@ module Squared
128
129
  require(gem || type)
129
130
  obj = eval namespace
130
131
  else
131
- Array(ext).each do |val|
132
+ as_a(ext).each do |val|
132
133
  next unless (data = @@mime_obj[val])
133
134
 
134
135
  obj = data.first
@@ -136,7 +137,7 @@ module Squared
136
137
  end
137
138
  end
138
139
  if obj
139
- ext << type if (ext = Array(ext)).empty?
140
+ ext << type if (ext = as_a(ext)).empty?
140
141
  if !file && target?
141
142
  ext.each do |val|
142
143
  next unless (out = basepath("#{main}.#{val}")).exist?
@@ -169,7 +170,7 @@ module Squared
169
170
  end
170
171
 
171
172
  def style(name, *args)
172
- apply_style(theme, name, args)
173
+ apply_style theme, name, args
173
174
  self
174
175
  end
175
176
 
@@ -196,7 +197,7 @@ module Squared
196
197
  private
197
198
 
198
199
  def puts(*args)
199
- log_console(*args, pipe: pipe)
200
+ puts_oe(*args, pipe: pipe)
200
201
  end
201
202
 
202
203
  def log
@@ -212,8 +213,8 @@ module Squared
212
213
  file = nil
213
214
  ext[0] = mime
214
215
  elsif file
215
- keys.unshift(file)
216
- alt = basepath "#{main}.{#{ext.join(',')}}"
216
+ keys.prepend(file)
217
+ alt = basepath("#{main}.{#{ext.join(',')}}")
217
218
  file = Dir[alt].first
218
219
  else
219
220
  alt = main
@@ -242,15 +243,14 @@ module Squared
242
243
  [
243
244
  { pat: /\A((?:[^:]|(?<! ):(?! ))+)\z/, styles: theme[:banner] },
244
245
  { pat: /\A(.*?)(<[^>]+>)(.+)\z/m, styles: theme[:undefined], index: 2 },
245
- { pat: /\A(.+)( : (?!undefined).+)\z/m, styles: theme[:key] },
246
- { pat: /\A(.+ : )(-?[\d.]+)(\s*)\z/m, styles: theme[:number],
246
+ { pat: /\A((?~ : ))( : (?!undefined).+)\z/m, styles: theme[:key] },
247
+ { pat: /\A((?~: ): )(-?[\d.]+)(\s*)\z/m, styles: theme[:number],
247
248
  index: 2 },
248
- { pat: /\A(.+ : ")(.+)("\s*)\z/m, styles: theme[:string], index: 2 },
249
- { pat: /\A(.+ : \{)(.+)(\}\s*)\z/m, styles: theme[:hash], index: 2 },
250
- { pat: /\A(.+ : \[)(.+)(\]\s*)\z/m, styles: theme[:array], index: 2 },
251
- { pat: /\A(.+ : )(true|false)(\s*)\z/m, styles: theme[:boolean],
249
+ { pat: /\A((?~: ): ")(.+)("\s*)\z/m, styles: theme[:string], index: 2 },
250
+ { pat: /\A((?~: ): \{)(.+)(\}\s*)\z/m, styles: theme[:hash], index: 2 },
251
+ { pat: /\A((?~: ): \[)(.+)(\]\s*)\z/m, styles: theme[:array],
252
252
  index: 2 },
253
- { pat: /\A(.+ : (?!undefined))([^"\[{].*)\z/m, styles: theme[:value],
253
+ { pat: /\A((?~: ): (?!undefined))([^"\[{].*)\z/m, styles: theme[:value],
254
254
  index: 2 }
255
255
  ]
256
256
  end, border: theme[:border])
@@ -309,7 +309,7 @@ module Squared
309
309
  return unless Rake::TaskManager.record_task_metadata
310
310
 
311
311
  val = "#{ext.first}[#{target ? '' : "file?=#{File.basename(main)}.#{ext.last},"}keys+]"
312
- args = *name.split(':').push(command, val)
312
+ args = *name.split(':').append(command, val)
313
313
  if project
314
314
  project.workspace.task_desc(*args)
315
315
  else
@@ -346,8 +346,8 @@ module Squared
346
346
  basepath(file = main + @ext).to_s rescue file
347
347
  end
348
348
 
349
- def basepath(*args)
350
- project ? project.basepath(*args) : Pathname.pwd.join(*args)
349
+ def basepath(file)
350
+ project ? project.basepath(file) : Pathname.pwd + file
351
351
  end
352
352
  end
353
353
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Squared
4
- VERSION = '0.4.29'
4
+ VERSION = '0.5.0'
5
5
  end
@@ -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
@@ -140,19 +134,20 @@ module Squared
140
134
  return unless @pipe.is_a?(Pathname)
141
135
 
142
136
  msg = "Session started on #{Time.now} by #{@main}"
143
- bord = '#' * msg.size
137
+ bord = '#' * s.size
144
138
  puts bord, msg, bord
145
139
  end
146
140
 
147
141
  def build(parallel: [], pass: nil, **kwargs)
148
142
  return self unless enabled? && !@closed
149
143
 
150
- kwargs[:parallel] = if kwargs[:pattern].is_a?(Array)
151
- parallel.map(&:to_s)
152
- else
153
- kwargs[:pattern] = []
154
- parallel.reject { |val| kwargs[:pattern] << val if val.is_a?(Regexp) }.map!(&:to_s)
155
- end
144
+ if kwargs[:pattern].is_a?(Array)
145
+ kwargs[:parallel] = parallel.map(&:to_s)
146
+ else
147
+ kwargs[:pattern] = []
148
+ kwargs[:parallel] = parallel.reject { |val| val.is_a?(Regexp) && (kwargs[:pattern] << val) }
149
+ .map(&:to_s)
150
+ end
156
151
  @pass[:pattern].concat(pass.map { |val| val.is_a?(Regexp) ? val : val.to_s }) if pass
157
152
  @project.each_value do |proj|
158
153
  if proj.enabled?
@@ -225,12 +220,12 @@ module Squared
225
220
  if arg.include?(':') || (keys && !keys.include?(arg))
226
221
  task_name(arg)
227
222
  else
228
- /\A#{Regexp.escape(task_name(arg))}:/
223
+ /#{Regexp.escape(arg)}:/
229
224
  end
230
225
  end
231
226
  end
232
- data = Struct::ChainData.new(action, step, ns.call(with), ns.call(before), ns.call(after), sync)
233
- @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
234
229
  self
235
230
  end
236
231
 
@@ -272,9 +267,9 @@ module Squared
272
267
 
273
268
  def pass(name, group: @group, ref: @ref, &blk)
274
269
  data = if group
275
- @pass[:group][group]
270
+ @pass[:group][group] ||= {}
276
271
  elsif ref
277
- @pass[:ref][ref]
272
+ @pass[:ref][ref] ||= {}
278
273
  else
279
274
  @pass[:global]
280
275
  end
@@ -283,7 +278,7 @@ module Squared
283
278
  end
284
279
 
285
280
  def banner(*args, command: true, styles: nil, border: nil, group: @group, ref: @ref)
286
- 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))
287
282
  args.each do |meth|
288
283
  if meth.is_a?(Array)
289
284
  found = false
@@ -306,24 +301,31 @@ module Squared
306
301
  elsif !Application.attr_banner.include?(meth = meth.to_sym)
307
302
  next
308
303
  end
309
- data[:order] << meth
304
+ data.order << meth
310
305
  end
311
- data = {} if !command && data[:order].empty?
312
306
  if group
313
307
  label = :group
314
- items = Array(group)
308
+ items = as_a group
315
309
  else
316
310
  label = :ref
317
- items = Array(ref || :_)
311
+ items = ref ? as_a(ref) : [:_]
318
312
  end
319
313
  items.each { |val| @banner[label][val.to_sym] = data }
320
314
  self
321
315
  end
322
316
 
323
317
  def add(path, project = nil, **kwargs, &blk)
324
- kwargs = Support.hashdup(@withargs).update(kwargs) if @withargs
325
- ref = kwargs.key?(:ref) ? kwargs.delete(:ref) : @ref
326
- kwargs[:group] = @group if @group && !kwargs.key?(:group)
318
+ kwargs = @withargs.yield_self { |data| data.dup.update(kwargs) } if @withargs
319
+ ref = if kwargs.key?(:ref)
320
+ kwargs = kwargs.dup unless @withargs
321
+ kwargs.delete(:ref)
322
+ elsif @ref.is_a?(Symbol)
323
+ @ref
324
+ end
325
+ if @group.is_a?(String) && !kwargs.key?(:group)
326
+ kwargs = kwargs.dup unless @withargs
327
+ kwargs[:group] = @group
328
+ end
327
329
  path = root + path
328
330
  project = (project || path.basename).to_s
329
331
  name = task_name project
@@ -353,14 +355,14 @@ module Squared
353
355
  end
354
356
  .each do |dir, basename, opts|
355
357
  args = kwargs.dup
356
- args.merge!(opts) if opts
358
+ args.update(opts) if opts
357
359
  add(dir, basename, group: val, **args, &blk)
358
360
  end
359
361
  self
360
362
  end
361
363
 
362
364
  def compose(name, &blk)
363
- namespace(task_name(name), &blk)
365
+ namespace(task_name(name), &blk) if block_given?
364
366
  self
365
367
  end
366
368
 
@@ -372,7 +374,7 @@ module Squared
372
374
  def style(obj, *args, target: nil, empty: false)
373
375
  data = nil
374
376
  if target
375
- Array(target).each_with_index do |key, i|
377
+ as_a(target).each_with_index do |key, i|
376
378
  if i == 0
377
379
  break unless (data = __get__(:theme)[key.to_sym])
378
380
  else
@@ -392,7 +394,7 @@ module Squared
392
394
  }
393
395
  data.each do |key, val|
394
396
  key = key.to_s
395
- if key.match?(/\A(\\A|\^)/) || key.match?(/(\\z|\$)\z/)
397
+ if key.start_with?(/(\\A|\^)/) || key.match?(/(\\z|\$)\z/)
396
398
  @describe[:replace] << [Regexp.new(key), val]
397
399
  else
398
400
  @describe[val.is_a?(Regexp) ? :pattern : :alias][key.to_s] = val
@@ -410,13 +412,13 @@ module Squared
410
412
  if ret.empty?
411
413
  ret = @project.select { |_, item| item.ref?(ref) }.map(&:last) if ref
412
414
  if ret.empty? && (path || name)
413
- path &&= rootpath(path)
415
+ path &&= rootpath path
414
416
  name &&= name.to_s
415
417
  proj = @project.find { |_, item| (path && item.path == path) || (name && item.name == name) }&.last
416
418
  ret << proj if proj
417
419
  end
418
420
  end
419
- return (group || ref ? ret : ret.first) unless block_given?
421
+ return (group || ref ? ret : ret[0]) unless block_given?
420
422
 
421
423
  ret.each(&blk)
422
424
  self
@@ -478,7 +480,7 @@ module Squared
478
480
  end
479
481
 
480
482
  def task_namespace(val, first: false)
481
- return unless (ret = val.to_s.split(':')).size > 1
483
+ return nil unless (ret = val.to_s.split(':')).size > 1
482
484
 
483
485
  first ? ret.first : task_join(*ret[0..-2])
484
486
  end
@@ -510,7 +512,7 @@ module Squared
510
512
  obj.allref.each do |ref|
511
513
  next unless obj.has?(key, ref) && (alt = data[ref])
512
514
 
513
- ret = task_resolve(obj, alt)
515
+ ret = task_resolve obj, alt
514
516
  break unless ret.empty?
515
517
  end
516
518
  else
@@ -530,7 +532,7 @@ module Squared
530
532
  end
531
533
 
532
534
  def format_desc(val, opts = nil, arg: 'opts*', before: nil, after: nil, out: false)
533
- return unless TASK_METADATA || out
535
+ return unless TASK_METADATA
534
536
 
535
537
  val = val.split(':') if val.is_a?(String)
536
538
  if before || after || opts
@@ -616,25 +618,13 @@ module Squared
616
618
  end
617
619
 
618
620
  def home?
619
- !!find(home)&.enabled?
621
+ !(proj = find(home)).nil? && proj.enabled?
620
622
  end
621
623
 
622
624
  def windows?
623
625
  Rake::Win32.windows?
624
626
  end
625
627
 
626
- def mri?
627
- RUBY_ENGINE == 'ruby'
628
- end
629
-
630
- def jruby?
631
- RUBY_ENGINE == 'jruby'
632
- end
633
-
634
- def truffleruby?
635
- RUBY_ENGINE == 'truffleruby'
636
- end
637
-
638
628
  def docker?
639
629
  !Dir['/.dockerenv', '/docker-*.{sh,d}'].empty?
640
630
  end
@@ -671,10 +661,6 @@ module Squared
671
661
  { exception: exception, warning: warning }
672
662
  end
673
663
 
674
- def size
675
- @project.size
676
- end
677
-
678
664
  def to_s
679
665
  (home? ? home : root).to_s
680
666
  end
@@ -688,14 +674,9 @@ module Squared
688
674
  private
689
675
 
690
676
  def __build__(default: nil, **)
691
- unless task_defined?('squared:version')
692
- task 'squared:version' do
693
- puts Squared::VERSION
694
- end
695
- end
696
- if default && task_defined?(out = task_name(default))
697
- task Rake.application.default_task_name => out
698
- end
677
+ return unless default && task_defined?(out = task_name(default))
678
+
679
+ task Rake.application.default_task_name => out
699
680
  end
700
681
 
701
682
  def __chain__(*)
@@ -717,7 +698,7 @@ module Squared
717
698
  else
718
699
  step = 0
719
700
  catch :found do
720
- 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 } }
721
702
  w = data.with
722
703
  a = data.after
723
704
  b = data.before
@@ -776,7 +757,7 @@ module Squared
776
757
  end
777
758
  end
778
759
  if step == -1
779
- level.unshift(data.action)
760
+ level.prepend(data.action)
780
761
  step = 0
781
762
  elsif step > 0
782
763
  (level[step -= 1] ||= []).concat(data.action)
@@ -797,8 +778,8 @@ module Squared
797
778
  format_desc key
798
779
  task key do
799
780
  unless failed.empty? && group.empty?
800
- puts(log_message(Logger::ERROR, *(failed + group.map { |val| val.action }.flatten),
801
- 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)
802
783
  end
803
784
  cols = level.flatten(1).map(&:size).max
804
785
  level.each_with_index do |grp, n|
@@ -814,13 +795,13 @@ module Squared
814
795
  end
815
796
  end
816
797
 
817
- def puts(*args, **kwargs)
818
- log_console(*args, pipe: kwargs[:pipe] || pipe)
798
+ def puts(*args)
799
+ puts_oe(*args, pipe: pipe)
819
800
  end
820
801
 
821
802
  def script_command(task, val, group, ref, on, &blk)
822
803
  if block_given?
823
- val = Struct::RunData.new(val, blk)
804
+ val = Support::RunData.new(val, blk)
824
805
  elsif !val
825
806
  return self
826
807
  end
@@ -832,8 +813,8 @@ module Squared
832
813
  items = as_a(ref, :to_sym)
833
814
  end
834
815
  items.each do |name|
835
- @script[label][name][task] = val
836
- @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)
837
818
  end
838
819
  self
839
820
  end
@@ -841,26 +822,24 @@ module Squared
841
822
  def script_set(data, group: nil, ref: nil)
842
823
  data.freeze
843
824
  if group
844
- Array(group).each { |val| @script[:group!][val.to_sym] = data }
825
+ as_a(group).each { |val| @script[:group!][val.to_sym] = data }
845
826
  elsif ref
846
- Array(ref).each { |val| @script[:ref!][val.to_sym] = data }
827
+ as_a(ref).each { |val| @script[:ref!][val.to_sym] = data }
847
828
  else
848
829
  @script[:ref!][:''] = data
849
830
  end
850
831
  end
851
832
 
852
833
  def data_get(*args, group: nil, ref: nil, target: nil)
853
- if group && target[:group].key?(key = group.to_sym)
854
- target[:group][key]
855
- elsif ref.is_a?(Enumerable)
834
+ target[:group][group.to_sym] if group
835
+ if ref.is_a?(Enumerable)
856
836
  ref.each do |key|
857
- next unless target[:ref].key?(key)
837
+ next unless (ret = target[:ref][key])
858
838
 
859
- ret = target[:ref][key]
860
839
  return ret if args.empty? || args.any? { |val| ret.key?(val) }
861
840
  end
862
841
  nil
863
- elsif ref && target[:ref].key?(ref)
842
+ elsif ref
864
843
  target[:ref][ref]
865
844
  end
866
845
  end
@@ -868,7 +847,7 @@ module Squared
868
847
  def root?(path, pass: [])
869
848
  return false unless path.directory?
870
849
 
871
- path.children.each do |c|
850
+ path.each_child do |c|
872
851
  name = c.basename.to_s
873
852
  next if c.to_s == __FILE__ || (@main == name && c.directory? && c.empty?) || pass.any? { |val| val == name }
874
853
 
@@ -878,14 +857,14 @@ module Squared
878
857
  end
879
858
 
880
859
  def script?(state, target: nil, pat: nil, group: nil, ref: baseref, global: false)
881
- data = script_find(ref, group)
860
+ data = script_find ref, group
882
861
  if global
883
862
  target = data[:script] || data[:run] if target.nil?
884
863
  pat = data[state] if pat.nil?
885
864
  end
886
865
  return false if state == :prod && data[:dev] == true && data[:global]
887
866
 
888
- 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
889
868
  end
890
869
 
891
870
  def scriptobj