squared 0.2.2 → 0.3.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +66 -1
- data/README.ruby.md +150 -68
- data/lib/squared/common/base.rb +3 -1
- data/lib/squared/common/class.rb +27 -2
- data/lib/squared/common/format.rb +3 -3
- data/lib/squared/common/shell.rb +11 -6
- data/lib/squared/common/utils.rb +23 -12
- data/lib/squared/config.rb +4 -3
- data/lib/squared/version.rb +1 -1
- data/lib/squared/workspace/application.rb +52 -17
- data/lib/squared/workspace/project/base.rb +321 -124
- data/lib/squared/workspace/project/git.rb +498 -296
- data/lib/squared/workspace/project/node.rb +245 -101
- data/lib/squared/workspace/project/python.rb +101 -87
- data/lib/squared/workspace/project/ruby.rb +171 -155
- data/lib/squared/workspace/repo.rb +7 -4
- data/lib/squared/workspace/series.rb +10 -4
- metadata +3 -3
data/lib/squared/config.rb
CHANGED
@@ -33,7 +33,7 @@ module Squared
|
|
33
33
|
end
|
34
34
|
|
35
35
|
def to_s
|
36
|
-
super
|
36
|
+
super[/[^:]+\z/, 0]
|
37
37
|
end
|
38
38
|
end
|
39
39
|
|
@@ -48,6 +48,7 @@ module Squared
|
|
48
48
|
if project && (project.respond_to?(:workspace) || (project = __get__(:project)[project.to_s]))
|
49
49
|
main = project.basepath(main).to_s
|
50
50
|
@project = project
|
51
|
+
@envname = project.instance_variable_get(:@envname)
|
51
52
|
@required = true
|
52
53
|
end
|
53
54
|
@name = name || @project&.name
|
@@ -89,7 +90,7 @@ module Squared
|
|
89
90
|
@required = true
|
90
91
|
project ? [project, 'not found'] : ['name', 'missing']
|
91
92
|
end
|
92
|
-
warn log_message(
|
93
|
+
warn log_message(Logger::WARN, msg, subject: self.class, hint: hint)
|
93
94
|
end
|
94
95
|
|
95
96
|
def build
|
@@ -238,7 +239,7 @@ module Squared
|
|
238
239
|
title = Pathname.new(file)
|
239
240
|
.realpath
|
240
241
|
.to_s
|
241
|
-
.sub(
|
242
|
+
.sub(/\A#{Regexp.escape(File.join(Dir.pwd, ''))}/, '')
|
242
243
|
emphasize(lines, title: title, sub: unless stdin?
|
243
244
|
[
|
244
245
|
{ pat: /\A((?:[^:]|(?<! ):(?! ))+)\z/, styles: theme[:banner] },
|
data/lib/squared/version.rb
CHANGED
@@ -56,7 +56,7 @@ module Squared
|
|
56
56
|
end
|
57
57
|
|
58
58
|
def to_s
|
59
|
-
super
|
59
|
+
super[/[^:]+\z/, 0]
|
60
60
|
end
|
61
61
|
|
62
62
|
attr_reader :kind_project
|
@@ -68,7 +68,7 @@ module Squared
|
|
68
68
|
|
69
69
|
attr_reader :root, :home, :main, :prefix, :exception, :warning, :pipe, :verbose, :theme, :series, :closed
|
70
70
|
|
71
|
-
def initialize(home = Dir.pwd, *, main: nil, prefix: nil,
|
71
|
+
def initialize(home = (ARG[:HOME] && ENV[ARG[:HOME]]) || Dir.pwd, *, main: nil, prefix: nil,
|
72
72
|
verbose: ARG[:VERBOSE], common: ARG[:COMMON], pipe: ARG[:PIPE], exception: ARG[:FAIL], **)
|
73
73
|
@home = Pathname.new(home).realdirpath
|
74
74
|
basename = @home.basename.to_s
|
@@ -78,15 +78,17 @@ module Squared
|
|
78
78
|
else
|
79
79
|
@main = basename.freeze
|
80
80
|
end
|
81
|
+
@home.mkpath rescue nil
|
81
82
|
@root = @home.parent
|
82
83
|
@prefix = prefix
|
83
84
|
@series = Application.impl_series.new(self)
|
84
85
|
@project = {}
|
85
86
|
@kind = {}
|
86
87
|
@extensions = []
|
88
|
+
@envname = @main.gsub(/[^\w]+/, '_').upcase.freeze
|
87
89
|
@pipe = env_pipe(pipe, (ARG[:OUT] && env(ARG[:OUT])) || 1, root: @home)
|
88
90
|
@exception = env_bool(exception)
|
89
|
-
@verbose = env_bool(verbose, verbose.nil? || verbose.is_a?(String) ? @pipe != 0 : verbose)
|
91
|
+
@verbose = env_bool(verbose, verbose.nil? || verbose.is_a?(String) ? @pipe != 0 : verbose, index: true)
|
90
92
|
@warning = @verbose != false
|
91
93
|
@closed = false
|
92
94
|
if common
|
@@ -105,6 +107,12 @@ module Squared
|
|
105
107
|
group: {},
|
106
108
|
ref: {}
|
107
109
|
}.freeze
|
110
|
+
@pass = {
|
111
|
+
group: {},
|
112
|
+
ref: {},
|
113
|
+
global: {},
|
114
|
+
pattern: []
|
115
|
+
}.freeze
|
108
116
|
@banner = {
|
109
117
|
group: {},
|
110
118
|
ref: {}
|
@@ -113,14 +121,13 @@ module Squared
|
|
113
121
|
end
|
114
122
|
|
115
123
|
def initialize_session
|
116
|
-
@envname = @main.gsub(/[^\w]+/, '_').upcase.freeze
|
117
124
|
return unless @pipe.is_a?(Pathname)
|
118
125
|
|
119
126
|
bord = '#' * Project.line_width
|
120
127
|
puts bord, format('Session started on %s by %s', Time.now.to_s, @main), bord
|
121
128
|
end
|
122
129
|
|
123
|
-
def build(parallel: [], **kwargs)
|
130
|
+
def build(parallel: [], pass: nil, **kwargs)
|
124
131
|
return self unless enabled? && !@closed
|
125
132
|
|
126
133
|
if kwargs[:pattern].is_a?(Array)
|
@@ -130,6 +137,7 @@ module Squared
|
|
130
137
|
kwargs[:parallel] = parallel.reject { |val| val.is_a?(Regexp) && (kwargs[:pattern] << val) }
|
131
138
|
.map(&:to_s)
|
132
139
|
end
|
140
|
+
@pass[:pattern].concat(pass.map { |val| val.is_a?(Regexp) ? val : val.to_s }) if pass
|
133
141
|
@project.each_value do |proj|
|
134
142
|
if proj.enabled?
|
135
143
|
proj.populate(series.keys.dup, **kwargs)
|
@@ -138,7 +146,7 @@ module Squared
|
|
138
146
|
else
|
139
147
|
next
|
140
148
|
end
|
141
|
-
series.populate(proj)
|
149
|
+
series.populate(proj, **kwargs)
|
142
150
|
end
|
143
151
|
|
144
152
|
Application.kind_project.each { |obj| obj.populate(self, **kwargs) }
|
@@ -180,6 +188,10 @@ module Squared
|
|
180
188
|
script_command :run, script, group, ref, on
|
181
189
|
end
|
182
190
|
|
191
|
+
def script(script, group: @group, ref: @ref, on: nil)
|
192
|
+
script_command :script, script, group, ref, on
|
193
|
+
end
|
194
|
+
|
183
195
|
def depend(script, group: @group, ref: @ref, on: nil)
|
184
196
|
script_command :depend, script, group, ref, on
|
185
197
|
end
|
@@ -196,6 +208,10 @@ module Squared
|
|
196
208
|
script_command :doc, script, group, ref, on
|
197
209
|
end
|
198
210
|
|
211
|
+
def lint(script, group: @group, ref: @ref, on: nil)
|
212
|
+
script_command :lint, script, group, ref, on
|
213
|
+
end
|
214
|
+
|
199
215
|
def test(script, group: @group, ref: @ref, on: nil)
|
200
216
|
script_command :test, script, group, ref, on
|
201
217
|
end
|
@@ -208,6 +224,18 @@ module Squared
|
|
208
224
|
script_command :exclude, as_a(base, :to_sym).freeze, group, ref
|
209
225
|
end
|
210
226
|
|
227
|
+
def pass(name, group: @group, ref: @ref, &blk)
|
228
|
+
data = if group
|
229
|
+
@pass[:group][group] ||= {}
|
230
|
+
elsif ref
|
231
|
+
@pass[:ref][ref] ||= {}
|
232
|
+
else
|
233
|
+
@pass[:global]
|
234
|
+
end
|
235
|
+
data[name.to_sym] = blk
|
236
|
+
self
|
237
|
+
end
|
238
|
+
|
211
239
|
def banner(*args, command: true, styles: nil, border: nil, group: @group, ref: @ref)
|
212
240
|
data = { command: command, order: [], styles: check_style(styles, empty: false), border: check_style(border) }
|
213
241
|
args.each do |meth|
|
@@ -528,6 +556,17 @@ module Squared
|
|
528
556
|
task_base?(key) ? obj.has?(key, ref || baseref) : task_extend?(obj, key)
|
529
557
|
end
|
530
558
|
|
559
|
+
def task_exclude?(key, obj = nil)
|
560
|
+
if obj
|
561
|
+
data = obj.group ? @pass[:group][obj.group] : @pass[:ref][obj.ref]
|
562
|
+
blk = (data && data[key.to_sym]) || @pass[:global][key.to_sym]
|
563
|
+
return true if blk && obj.instance_eval(&blk)
|
564
|
+
|
565
|
+
key = task_join(task_localname(obj.name), key)
|
566
|
+
end
|
567
|
+
@pass[:pattern].any? { |item| item.is_a?(Regexp) ? key =~ item : key == item }
|
568
|
+
end
|
569
|
+
|
531
570
|
def task_defined?(*key)
|
532
571
|
Rake::Task.task_defined?(key.size == 1 ? key.first : task_join(*key))
|
533
572
|
end
|
@@ -600,9 +639,7 @@ module Squared
|
|
600
639
|
end
|
601
640
|
items.each do |name|
|
602
641
|
(@script[label][name] ||= {})[task] = val
|
603
|
-
|
604
|
-
|
605
|
-
(@events[label][name] ||= {})[task] = on
|
642
|
+
(@events[label][name] ||= {})[task] = on if on.is_a?(Hash)
|
606
643
|
end
|
607
644
|
self
|
608
645
|
end
|
@@ -639,15 +676,13 @@ module Squared
|
|
639
676
|
def root?(path, pass: [])
|
640
677
|
return false unless path.directory?
|
641
678
|
|
642
|
-
|
643
|
-
|
644
|
-
|
645
|
-
|
646
|
-
|
647
|
-
target.to_s == __FILE__ || pass.any? { |val| val == target.basename.to_s }
|
648
|
-
else
|
649
|
-
false
|
679
|
+
path.children.each do |c|
|
680
|
+
name = c.basename.to_s
|
681
|
+
next if c.to_s == __FILE__ || (@main == name && c.directory? && c.empty?) || pass.any? { |val| val == name }
|
682
|
+
|
683
|
+
return false
|
650
684
|
end
|
685
|
+
true
|
651
686
|
end
|
652
687
|
|
653
688
|
def script?(state, target: nil, pat: nil, group: nil, ref: baseref, global: false)
|