squared 0.0.5 → 0.0.6
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/README.ruby.md +3 -2
- data/lib/squared/common/base.rb +91 -0
- data/lib/squared/common/format.rb +14 -5
- data/lib/squared/common/shell.rb +7 -7
- data/lib/squared/common/system.rb +4 -1
- data/lib/squared/common/task.rb +5 -1
- data/lib/squared/common.rb +1 -78
- data/lib/squared/config.rb +7 -7
- data/lib/squared/version.rb +1 -1
- data/lib/squared/workspace/application.rb +306 -0
- data/lib/squared/{repo → workspace}/project/base.rb +47 -41
- data/lib/squared/{repo → workspace}/project/git.rb +71 -53
- data/lib/squared/{repo → workspace}/project/node.rb +17 -18
- data/lib/squared/{repo → workspace}/project/python.rb +3 -3
- data/lib/squared/{repo → workspace}/project/ruby.rb +7 -8
- data/lib/squared/{repo → workspace}/project.rb +1 -1
- data/lib/squared/workspace/repo.rb +201 -0
- data/lib/squared/workspace/series.rb +125 -0
- data/lib/squared/{repo.rb → workspace.rb} +6 -3
- data/lib/squared.rb +9 -8
- metadata +13 -10
- data/lib/squared/repo/workspace.rb +0 -552
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 60e2da1ce8ec4439d4180db0c0f806d9984046ef5f12b34008563edd7b40b938
|
4
|
+
data.tar.gz: 6eb7ef1c8273d10747cb79c1a113dae53210cebd167969f4a1546a9fc07162f0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 75f989753670bd5854a8dccc6a3bf8d3d7397d2a373a50d46eaa7add861ff8d1f24cffb1c9ac00d48756d89abb50728c35368beb62649b3d704f3d7b059b449a
|
7
|
+
data.tar.gz: 6387222860eb65bd57cd14ba86b77b39d47a64d5a03940a5b6f6ac0ccea6368f0ab8df0a1886d5f6e6eec83f89887397b72f57a647a4ad06efa632020c1a5938
|
data/README.ruby.md
CHANGED
@@ -32,14 +32,15 @@ Projects from any accessible folder can be added either relative to `REPO_ROOT`
|
|
32
32
|
|
33
33
|
```ruby
|
34
34
|
require "squared"
|
35
|
+
require "squared/workspace/repo" # Repo (optional)
|
35
36
|
|
36
37
|
# REPO_ROOT = /workspaces
|
37
38
|
# REPO_HOME = /workspaces/squared
|
38
39
|
# rake = /workspaces/squared/Rakefile
|
39
40
|
|
40
|
-
|
41
|
+
Workspace::Application
|
41
42
|
.new("squared") # REPO_HOME
|
42
|
-
.repo("https://github.com/anpham6/squared-repo", "nightly", run:
|
43
|
+
.repo("https://github.com/anpham6/squared-repo", "nightly", run: "build") # Repo (optional)
|
43
44
|
.run("rake install", ref: :ruby)
|
44
45
|
.clean("rake clean", group: "default") # depend test doc
|
45
46
|
.clean(["build/"], group: "app")
|
@@ -0,0 +1,91 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Squared
|
4
|
+
module Common
|
5
|
+
VAR = {
|
6
|
+
project: {},
|
7
|
+
colors: {
|
8
|
+
black: '30',
|
9
|
+
red: '31',
|
10
|
+
green: '32',
|
11
|
+
yellow: '33',
|
12
|
+
blue: '34',
|
13
|
+
magenta: '35',
|
14
|
+
cyan: '36',
|
15
|
+
white: '37',
|
16
|
+
black!: '40',
|
17
|
+
red!: '41',
|
18
|
+
green!: '42',
|
19
|
+
yellow!: '43',
|
20
|
+
blue!: '44',
|
21
|
+
magenta!: '45',
|
22
|
+
cyan!: '46',
|
23
|
+
white!: '47'
|
24
|
+
},
|
25
|
+
theme: {
|
26
|
+
workspace: {},
|
27
|
+
project: {},
|
28
|
+
viewer: {
|
29
|
+
banner: %i[blue bold],
|
30
|
+
key: %i[bold],
|
31
|
+
value: %i[green],
|
32
|
+
string: %i[yellow],
|
33
|
+
hash: %i[green black!],
|
34
|
+
array: %i[blue black!],
|
35
|
+
number: %i[magenta],
|
36
|
+
undefined: %i[red italic]
|
37
|
+
},
|
38
|
+
logger: {
|
39
|
+
unknown: %i[cyan],
|
40
|
+
fatal: %i[white bold red!],
|
41
|
+
error: %i[red bold],
|
42
|
+
warn: %i[yellow bold],
|
43
|
+
info: %i[blue],
|
44
|
+
debug: %i[green]
|
45
|
+
}
|
46
|
+
}
|
47
|
+
}.compare_by_identity
|
48
|
+
private_constant :VAR
|
49
|
+
|
50
|
+
private
|
51
|
+
|
52
|
+
def __get__(key)
|
53
|
+
VAR[key.is_a?(::String) ? key.to_sym : key]
|
54
|
+
end
|
55
|
+
|
56
|
+
def __set__(key, val)
|
57
|
+
return if VAR.frozen?
|
58
|
+
|
59
|
+
VAR[key.is_a?(::String) ? key.to_sym : key] = val
|
60
|
+
end
|
61
|
+
|
62
|
+
def env(key, equals: nil, ignore: nil, default: nil, **)
|
63
|
+
ret = ENV.fetch(key, '')
|
64
|
+
return ret == equals.to_s unless equals.nil?
|
65
|
+
|
66
|
+
ret.empty? || (ignore && as_a(ignore).any? { |val| ret == val.to_s }) ? default : ret
|
67
|
+
end
|
68
|
+
|
69
|
+
def message(*args, hint: nil)
|
70
|
+
args.reject(&:empty?).join(' => ') + (hint ? " (#{hint})" : '')
|
71
|
+
end
|
72
|
+
|
73
|
+
def as_a(obj, flat: nil)
|
74
|
+
if obj.nil?
|
75
|
+
[]
|
76
|
+
elsif !obj.is_a?(::Array)
|
77
|
+
[obj]
|
78
|
+
elsif flat
|
79
|
+
obj.flatten(flat == true ? nil : flat)
|
80
|
+
else
|
81
|
+
obj
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
def finalize!
|
86
|
+
VAR.each_value(&:freeze)
|
87
|
+
VAR[:theme].each_value(&:freeze)
|
88
|
+
VAR.freeze
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
@@ -1,5 +1,9 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require 'logger'
|
4
|
+
|
5
|
+
require_relative 'base'
|
6
|
+
|
3
7
|
module Squared
|
4
8
|
module Common
|
5
9
|
module Format
|
@@ -33,6 +37,8 @@ module Squared
|
|
33
37
|
block_given? ? yield(self) : self
|
34
38
|
end
|
35
39
|
|
40
|
+
private
|
41
|
+
|
36
42
|
def emphasize(val, title: nil, cols: nil, sub: nil, pipe: nil)
|
37
43
|
n = 0
|
38
44
|
if title
|
@@ -166,6 +172,10 @@ module Squared
|
|
166
172
|
end
|
167
173
|
end
|
168
174
|
|
175
|
+
def raise_error(*args, hint: nil, kind: ArgumentError)
|
176
|
+
raise kind, message(*args, hint: hint)
|
177
|
+
end
|
178
|
+
|
169
179
|
def log_title(level, color: true)
|
170
180
|
level = if level.is_a?(::Numeric)
|
171
181
|
case level
|
@@ -186,13 +196,12 @@ module Squared
|
|
186
196
|
level.to_s.downcase.to_sym
|
187
197
|
end
|
188
198
|
theme = __get__(:theme)[:logger]
|
189
|
-
|
190
|
-
|
191
|
-
case level
|
199
|
+
styles = theme[level] || theme[level = :unknown]
|
200
|
+
case (ret = +level.to_s.upcase)
|
192
201
|
when 'WARN', 'ERROR', 'FATAL'
|
193
|
-
|
202
|
+
ret += '!'
|
194
203
|
end
|
195
|
-
color ? sub_style(
|
204
|
+
color ? sub_style(ret, *styles) : ret
|
196
205
|
end
|
197
206
|
|
198
207
|
def log_message(level, *args, subject: nil, hint: nil, color: true)
|
data/lib/squared/common/shell.rb
CHANGED
@@ -1,24 +1,28 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require 'shellwords'
|
4
|
+
require 'rake'
|
5
|
+
|
3
6
|
module Squared
|
4
7
|
module Common
|
5
8
|
module Shell
|
9
|
+
private
|
10
|
+
|
6
11
|
def shell_escape(val, quote: false)
|
7
12
|
return (quote ? shell_quote(val, force: false) : val) if ::Rake::Win32.windows?
|
8
13
|
|
9
|
-
require 'shellwords'
|
10
14
|
Shellwords.escape(val)
|
11
15
|
end
|
12
16
|
|
13
17
|
def shell_quote(val, force: true)
|
14
18
|
ret = val.to_s.strip
|
15
|
-
return ret if (!force && !ret.include?(' ')) || ret
|
19
|
+
return ret if (!force && !ret.include?(' ')) || ret =~ /(?:^|=)(["']).+\1$/m
|
16
20
|
|
17
21
|
::Rake::Win32.windows? ? "\"#{double_quote(ret)}\"" : "'#{single_quote(ret)}'"
|
18
22
|
end
|
19
23
|
|
20
24
|
def fill_option(val)
|
21
|
-
return "-#{val}" if val.size == 1 || val
|
25
|
+
return "-#{val}" if val.size == 1 || val =~ /^[a-z]\d+$/i
|
22
26
|
|
23
27
|
val = "--#{val}" unless val.start_with?('-')
|
24
28
|
shell_escape(val).sub('\\=', '=')
|
@@ -36,10 +40,6 @@ module Squared
|
|
36
40
|
val.split(/\s*(?<!\\)#{char}\s*/)
|
37
41
|
end
|
38
42
|
|
39
|
-
def trailing_slash(val)
|
40
|
-
val.to_s.chomp(::File::SEPARATOR) + ::File::SEPARATOR
|
41
|
-
end
|
42
|
-
|
43
43
|
def sanitize_args(*opts)
|
44
44
|
opts.map { |val| val.include?(' ') ? shell_quote(val) : shell_escape(val) }.join(' ')
|
45
45
|
end
|
@@ -1,12 +1,15 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'pathname'
|
4
|
+
require 'fileutils'
|
4
5
|
|
5
6
|
module Squared
|
6
7
|
module Common
|
7
8
|
module System
|
9
|
+
private
|
10
|
+
|
8
11
|
def shell(*cmd, **kwargs)
|
9
|
-
if /^2\.[0-5]
|
12
|
+
if RUBY_VERSION =~ /^2\.[0-5]\./
|
10
13
|
exception = kwargs.delete(:exception)
|
11
14
|
ret = system(*cmd, **kwargs)
|
12
15
|
raise $?.to_s if !ret && exception
|
data/lib/squared/common/task.rb
CHANGED
@@ -1,13 +1,17 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require 'rake'
|
4
|
+
|
3
5
|
module Squared
|
4
6
|
module Common
|
5
7
|
module Task
|
8
|
+
private
|
9
|
+
|
6
10
|
def collect_args(args, *keys)
|
7
11
|
ret = []
|
8
12
|
return ret unless args.is_a?(::Rake::TaskArguments)
|
9
13
|
|
10
|
-
keys.each { |key| ret << args
|
14
|
+
keys.each { |key| ret << args.fetch(key) if args.key?(key) }
|
11
15
|
ret += args.extras
|
12
16
|
end
|
13
17
|
|
data/lib/squared/common.rb
CHANGED
@@ -1,86 +1,9 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'pathname'
|
4
|
-
require 'logger'
|
5
4
|
require 'rake'
|
6
5
|
|
7
|
-
|
8
|
-
module Common
|
9
|
-
VAR = {
|
10
|
-
project: {},
|
11
|
-
colors: {
|
12
|
-
black: '30',
|
13
|
-
red: '31',
|
14
|
-
green: '32',
|
15
|
-
yellow: '33',
|
16
|
-
blue: '34',
|
17
|
-
magenta: '35',
|
18
|
-
cyan: '36',
|
19
|
-
white: '37',
|
20
|
-
black!: '40',
|
21
|
-
red!: '41',
|
22
|
-
green!: '42',
|
23
|
-
yellow!: '43',
|
24
|
-
blue!: '44',
|
25
|
-
magenta!: '45',
|
26
|
-
cyan!: '46',
|
27
|
-
white!: '47'
|
28
|
-
},
|
29
|
-
theme: {
|
30
|
-
workspace: {},
|
31
|
-
project: {},
|
32
|
-
viewer: {
|
33
|
-
banner: %i[blue bold],
|
34
|
-
key: %i[bold],
|
35
|
-
value: %i[green],
|
36
|
-
string: %i[yellow],
|
37
|
-
hash: %i[green black!],
|
38
|
-
array: %i[blue black!],
|
39
|
-
number: %i[magenta],
|
40
|
-
undefined: %i[red italic]
|
41
|
-
},
|
42
|
-
logger: {
|
43
|
-
unknown: %i[cyan],
|
44
|
-
fatal: %i[white bold red!],
|
45
|
-
error: %i[red bold],
|
46
|
-
warn: %i[yellow bold],
|
47
|
-
info: %i[blue],
|
48
|
-
debug: %i[green]
|
49
|
-
}
|
50
|
-
}
|
51
|
-
}.compare_by_identity
|
52
|
-
private_constant :VAR
|
53
|
-
|
54
|
-
def __get__(key)
|
55
|
-
VAR[key.is_a?(::String) ? key.to_sym : key]
|
56
|
-
end
|
57
|
-
|
58
|
-
def __set__(key, val)
|
59
|
-
return if VAR.frozen?
|
60
|
-
|
61
|
-
VAR[key.is_a?(::String) ? key.to_sym : key] = val
|
62
|
-
end
|
63
|
-
|
64
|
-
def finalize!
|
65
|
-
VAR.each_value(&:freeze)
|
66
|
-
VAR[:theme].each_value(&:freeze)
|
67
|
-
VAR.freeze
|
68
|
-
end
|
69
|
-
|
70
|
-
def message(*args, hint: nil)
|
71
|
-
args.reject(&:empty?).join(' => ') + (hint ? " (#{hint})" : '')
|
72
|
-
end
|
73
|
-
|
74
|
-
def as_a(obj, flat: nil)
|
75
|
-
return [] if obj.nil?
|
76
|
-
return [obj] unless obj.is_a?(::Array)
|
77
|
-
return obj unless flat
|
78
|
-
|
79
|
-
obj.flatten(flat == true ? nil : flat)
|
80
|
-
end
|
81
|
-
end
|
82
|
-
end
|
83
|
-
|
6
|
+
require_relative 'common/base'
|
84
7
|
require_relative 'common/class'
|
85
8
|
require_relative 'common/format'
|
86
9
|
require_relative 'common/shell'
|
data/lib/squared/config.rb
CHANGED
@@ -2,6 +2,8 @@
|
|
2
2
|
|
3
3
|
require 'json'
|
4
4
|
|
5
|
+
require_relative 'common'
|
6
|
+
|
5
7
|
module Squared
|
6
8
|
module Config
|
7
9
|
class Viewer
|
@@ -63,14 +65,14 @@ module Squared
|
|
63
65
|
namespace view do
|
64
66
|
if @mime['json'] && (exist? || !::Rake::Task.task_defined?("#{name}:#{view}:json"))
|
65
67
|
desc format_desc(view, %w[json])
|
66
|
-
task
|
68
|
+
task 'json', [:keys] do |_, args|
|
67
69
|
read_keys(JSON, 'json', *params.(args))
|
68
70
|
end
|
69
71
|
end
|
70
72
|
|
71
73
|
if @mime['yaml'] && (exist? || !::Rake::Task.task_defined?("#{name}:#{view}:yaml"))
|
72
74
|
desc format_desc(view, %w[yaml yml])
|
73
|
-
task
|
75
|
+
task 'yaml', [:keys] do |_, args|
|
74
76
|
require 'yaml'
|
75
77
|
read_keys(YAML, 'yaml', *params.(args), ext: %w[yml yaml])
|
76
78
|
end
|
@@ -161,7 +163,7 @@ module Squared
|
|
161
163
|
|
162
164
|
def read_keys(reader, type, file, keys, ext: [type])
|
163
165
|
if (mime = mime_type(file)) && base_path(file).exist?
|
164
|
-
|
166
|
+
raise_error(file, mime, hint: 'invalid') unless ext.include?(mime)
|
165
167
|
else
|
166
168
|
if ext.include?(mime)
|
167
169
|
alt = file
|
@@ -172,9 +174,7 @@ module Squared
|
|
172
174
|
alt = base_path("#{main}.{#{ext.join(',')}}")
|
173
175
|
file = Dir[alt].first
|
174
176
|
end
|
175
|
-
unless file
|
176
|
-
raise ArgumentError, message(reader.name, "#{File.basename(alt, '.*')}.#{ext.first}", hint: 'not found')
|
177
|
-
end
|
177
|
+
raise_error(reader.name, "#{File.basename(alt, '.*')}.#{ext.first}", hint: 'not found') unless file
|
178
178
|
end
|
179
179
|
project&.log&.info "#{Viewer}(#{type}) => #{file} {#{keys.join(', ')}}"
|
180
180
|
doc = if reader.respond_to?(:load_file)
|
@@ -284,7 +284,7 @@ module Squared
|
|
284
284
|
end
|
285
285
|
|
286
286
|
def warning?
|
287
|
-
project ? project.warning : true
|
287
|
+
project && defined?(project.warning) == 'method' ? project.warning : true
|
288
288
|
end
|
289
289
|
end
|
290
290
|
end
|
data/lib/squared/version.rb
CHANGED