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.
@@ -32,7 +32,7 @@ module Squared
32
32
  @multiple << val.to_s
33
33
  when Regexp
34
34
  @multiple << val
35
- when NilClass, FalseClass
35
+ when nil, false
36
36
  @multiple.clear
37
37
  end
38
38
  end
@@ -47,7 +47,9 @@ module Squared
47
47
 
48
48
  def slice!(*args)
49
49
  data = compact
50
- data.slice!(*args).tap { replace Set.new(data) }
50
+ ret = data.slice!(*args)
51
+ replace Set.new(data)
52
+ ret
51
53
  end
52
54
 
53
55
  def compact
@@ -109,7 +111,9 @@ module Squared
109
111
  end
110
112
 
111
113
  def done
112
- to_s.tap { clear }
114
+ ret = to_s
115
+ clear
116
+ ret
113
117
  end
114
118
 
115
119
  def merge(enum)
@@ -131,10 +135,12 @@ module Squared
131
135
  end
132
136
 
133
137
  def <<(obj)
134
- return super if extras.empty? && !extras?(obj)
138
+ unless obj.nil?
139
+ return super if extras.empty? && !extras?(obj)
135
140
 
136
- unless !extras.include?(@partition) && include?(obj) && @uniq.match?(s = obj.to_s) && !multiple?(s)
137
- extras << obj
141
+ unless !extras.include?(@partition) && include?(obj) && @uniq.match?(s = obj.to_s) && !multiple?(s)
142
+ extras << obj
143
+ end
138
144
  end
139
145
  self
140
146
  end
@@ -21,29 +21,30 @@ module Squared
21
21
  include Prompt
22
22
 
23
23
  def append(target, *args, delim: false, escape: false, quote: true, strip: nil, force: true, double: false,
24
- filter: nil, **)
25
- return if (ret = args.flatten).empty?
24
+ filter: nil, pass: nil, **)
25
+ return if (ret = args.flatten(1)).empty?
26
26
 
27
27
  target << '--' if delim && !target.include?('--')
28
28
  if strip
29
29
  pat, s = Array(strip)
30
30
  ret.map! { |val| val.is_a?(String) ? val.gsub(pat, s || '') : val }
31
31
  end
32
- ret, err = ret.partition { |val| filter.match?(val.to_s) } if filter
32
+ if filter
33
+ ret, err = ret.partition { |val| filter.match?(val.to_s) }
34
+ pass&.concat(err)
35
+ end
33
36
  if block_given?
34
- out = []
35
- err ||= []
36
- ret.each do |val|
37
- case (s = yield val)
37
+ ret = ret.each_with_object([]) do |val, out|
38
+ arg = yield val
39
+ case arg
38
40
  when String
39
- out << s
40
- when NilClass, FalseClass
41
- err << val
41
+ out << arg
42
+ when nil, false
43
+ pass&.push(val)
42
44
  else
43
45
  out << val
44
46
  end
45
47
  end
46
- ret = out
47
48
  end
48
49
  ret.map! do |val|
49
50
  next val if opt?(val)
@@ -61,7 +62,7 @@ module Squared
61
62
  else
62
63
  target.concat(ret)
63
64
  end
64
- err || ret
65
+ ret
65
66
  end
66
67
 
67
68
  def clear(target, opts, pass: true, styles: nil, **kwargs)
@@ -75,15 +76,13 @@ module Squared
75
76
  end
76
77
 
77
78
  def delete_key(target, *args, value: false, reverse: false, count: -1)
78
- ret = []
79
- args.each do |val|
79
+ args.each_with_object([]) do |val, out|
80
80
  next if (opts = target.grep(matchopt(val, value))).empty?
81
81
 
82
82
  opts = opts.first(count) if count >= 0
83
83
  opts.send(reverse ? :reverse_each : :each) { |key| target.delete(key) }
84
- ret.concat(opts)
84
+ out.concat(opts)
85
85
  end
86
- ret
87
86
  end
88
87
 
89
88
  def strip(val)
@@ -93,7 +92,7 @@ module Squared
93
92
  end
94
93
 
95
94
  def select(list, bare: true, no: true, single: false, double: false)
96
- ret = bare ? list.grep_v(/=/) : list.grep(/=/).map! { |val| val.split('=', 2).first }
95
+ ret = bare ? list.grep_v(/=/) : list.grep(/=/).map { |val| val.split('=', 2).first }
97
96
  ret.map! { |val| val.split('|', 2).last }
98
97
  ret = ret.grep_v(/\Ano-/) unless no
99
98
  return ret if single == double
@@ -115,6 +114,18 @@ module Squared
115
114
  list
116
115
  end
117
116
 
117
+ def parse_option(val)
118
+ val = val.strip
119
+ return [val, nil, ''] unless (i = val.index('='))
120
+
121
+ last = val[i.succ..-1].strip
122
+ if last =~ /\A(["'])(.*)\1\z/m
123
+ last = $2
124
+ quote = $1
125
+ end
126
+ [val[0..i.pred], last, quote || '']
127
+ end
128
+
118
129
  def parse_arg!(name, val)
119
130
  return unless val.is_a?(String)
120
131
 
@@ -141,7 +152,8 @@ module Squared
141
152
  end
142
153
 
143
154
  def pattern?(val)
144
- val.match?(/\A\^|\$\z/) || val.match?(/[.)][*+?]|\(\?:|\\[dsw\d]|\[.+\]|\{\d+,?\d*\}/i)
155
+ val.start_with?('\A', '^') || val.end_with?('\z', '$') ||
156
+ val.match?(/[.)][*+?]|\(\?:|\\[dsw\d]|\[.+\]|\{\d+,?\d*\}/i)
145
157
  end
146
158
 
147
159
  private
@@ -159,13 +171,13 @@ module Squared
159
171
  end
160
172
 
161
173
  def shortopt(*group)
162
- group.map! { |s| Regexp.escape(s.delete_prefix('-')) }
163
- "-(?:#{group.join('|')})(?:\\z|[^ =]| +[^ -])"
174
+ g = group.map { |s| Regexp.escape(s.delete_prefix('-')) }
175
+ "-(?:#{g.join('|')})(?:\\z|[^ =]| +[^ -])"
164
176
  end
165
177
 
166
178
  def longopt(*group, value)
167
- group.map! { |s| Regexp.escape(s.delete_prefix('--')) }
168
- "--(?:#{group.join('|')})(?:#{value ? '=[^ ]| +[^ -]' : '[= ]|\z'})"
179
+ g = group.map { |s| Regexp.escape(s.delete_prefix('--')) }
180
+ "--(?:#{g.join('|')})(?:#{value ? '=[^ ]| +[^ -]' : '[= ]|\z'})"
169
181
  end
170
182
  end
171
183
 
@@ -356,13 +368,14 @@ module Squared
356
368
 
357
369
  def append(*args, **kwargs, &blk)
358
370
  args = extras if args.empty?
359
- out = OptionPartition.append(target, *args, **kwargs, &blk)
360
- errors.concat(out) if out && (block_given? || kwargs[:filter])
371
+ pass = kwargs[:pass] ||= []
372
+ OptionPartition.append(target, *args, **kwargs, &blk)
373
+ errors.concat(pass)
361
374
  self
362
375
  end
363
376
 
364
377
  def append_any(*args, escape: false, quote: true, **kwargs)
365
- (args.empty? ? extras : args.flatten).each do |val|
378
+ (args.empty? ? extras : args.flatten(1)).each do |val|
366
379
  if block_given?
367
380
  temp = val
368
381
  val = yield val
@@ -399,7 +412,7 @@ module Squared
399
412
  g = ["\"((?:[^\"]|(?<=\\\\)\"(?!$#{'| ' if windows?}))*)\""]
400
413
  g << "'((?:[^']|'\\\\'')*)'" unless windows?
401
414
  g << "(#{s})"
402
- args.map! do |opt|
415
+ list = args.map do |opt|
403
416
  if opt.size == 1
404
417
  /(?:\A| )-#{opt} ?([^ ]+)/
405
418
  else
@@ -408,7 +421,7 @@ module Squared
408
421
  end
409
422
  ret = []
410
423
  target.each do |opt|
411
- args.each do |pat|
424
+ list.each do |pat|
412
425
  next unless opt =~ pat
413
426
 
414
427
  ret << ($1 || $2 || $3)
@@ -494,10 +507,10 @@ module Squared
494
507
 
495
508
  def add_path(*args, option: nil, force: true, double: false, **kwargs)
496
509
  if args.empty?
497
- args = select { |val| val.is_a?(String) }
498
- found.concat(args)
499
- args.map! { |val| path + val } if path
500
- append(args, force: force, **kwargs)
510
+ list = select { |val| val.is_a?(String) }
511
+ found.concat(list)
512
+ list.map! { |val| path + val } if path
513
+ append(list, force: force, **kwargs)
501
514
  else
502
515
  val = path ? path.join(*args) : File.join(*args)
503
516
  if option
@@ -510,8 +523,7 @@ module Squared
510
523
  end
511
524
 
512
525
  def add_quote(*args, **kwargs)
513
- merge(args.compact
514
- .map! { |val| val == '--' || OptionPartition.opt?(val) ? val : shell_quote(val, **kwargs) })
526
+ merge(args.compact.map { |s| s == '--' || OptionPartition.opt?(s) ? s : shell_quote(s, **kwargs) })
515
527
  self
516
528
  end
517
529
 
@@ -544,6 +556,12 @@ module Squared
544
556
  self
545
557
  end
546
558
 
559
+ def detach
560
+ ret = extras
561
+ @extras = []
562
+ ret
563
+ end
564
+
547
565
  def delim
548
566
  add '--'
549
567
  self
@@ -552,7 +570,7 @@ module Squared
552
570
  def last(val = nil, &blk)
553
571
  unless block_given?
554
572
  case val
555
- when NilClass
573
+ when nil
556
574
  return extras.last
557
575
  when Numeric
558
576
  return extras.last(val)
@@ -566,7 +584,7 @@ module Squared
566
584
  ret = find_all(&blk)
567
585
  unless ret.empty?
568
586
  ret = case val
569
- when NilClass
587
+ when nil
570
588
  ret.first(1)
571
589
  when Numeric
572
590
  ret.first(val)
@@ -584,8 +602,6 @@ module Squared
584
602
  def splice(*exclude, quote: true, delim: true, path: false, pattern: false, &blk)
585
603
  temp, other = if block_given?
586
604
  partition(&blk)
587
- elsif exclude.first.is_a?(Symbol)
588
- partition(&exclude.first)
589
605
  else
590
606
  exclude.map! { |pat| Regexp.new(pat) }
591
607
  partition do |val|
@@ -664,10 +680,11 @@ module Squared
664
680
  end
665
681
 
666
682
  def uniq!(list)
667
- unless (list = uniq(list)).empty?
668
- concat list
669
- self
670
- end
683
+ list = uniq list
684
+ return if list.empty?
685
+
686
+ concat list
687
+ self
671
688
  end
672
689
 
673
690
  private
@@ -0,0 +1,68 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Squared
4
+ module Workspace
5
+ module Project
6
+ module Support
7
+ module Utils
8
+ private
9
+
10
+ def rand_s(size)
11
+ if RUBY_VERSION >= '3.1'
12
+ require 'random/formatter'
13
+ Random.new.alphanumeric(size)
14
+ else
15
+ (0...size).map { rand(97..122).chr }.join
16
+ end
17
+ end
18
+
19
+ def merge_list(target, list)
20
+ list = Array(list)
21
+ case target
22
+ when Array
23
+ target.concat(list)
24
+ when Set
25
+ target.merge(list)
26
+ else
27
+ Array(target).concat(list)
28
+ end
29
+ end
30
+
31
+ def matchmap(list, prefix = nil)
32
+ list.map do |val|
33
+ next val if val.is_a?(Regexp)
34
+
35
+ val = ".*#{val}" if prefix && !val.sub!(/\A(\^|\\A)/, '')
36
+ Regexp.new("#{prefix}#{val == '*' ? '.+' : val}")
37
+ end
38
+ end
39
+
40
+ def matchany?(list, *args, empty: true)
41
+ return empty if list.empty?
42
+
43
+ list.any? { |pat| args.any?(pat) }
44
+ end
45
+
46
+ def has_value?(target, *args)
47
+ args.any? { |obj,| target.include?(obj) }
48
+ end
49
+
50
+ def has_value!(target, *args, first: false)
51
+ ret = nil
52
+ args.each do |val|
53
+ if target.respond_to?(:delete?)
54
+ ret = target if target.delete?(val)
55
+ elsif target.respond_to?(:delete)
56
+ ret = target if target.delete(val)
57
+ elsif target.include?(val)
58
+ ret = target
59
+ end
60
+ break if ret && first
61
+ end
62
+ ret
63
+ end
64
+ end
65
+ end
66
+ end
67
+ end
68
+ end
@@ -1,11 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module Squared
4
- module Workspace
5
- module Project
6
- end
7
- end
8
- end
9
-
10
3
  require_relative 'project/base'
11
4
  require_relative 'project/git'