squared 0.0.10 → 0.0.12
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 +98 -26
- data/lib/squared/app.rb +10 -0
- data/lib/squared/common/base.rb +12 -16
- data/lib/squared/common/class.rb +26 -1
- data/lib/squared/common/format.rb +79 -24
- data/lib/squared/common/prompt.rb +36 -0
- data/lib/squared/common/shell.rb +4 -3
- data/lib/squared/common/system.rb +15 -47
- data/lib/squared/common/utils.rb +51 -16
- data/lib/squared/common.rb +1 -4
- data/lib/squared/config.rb +48 -43
- data/lib/squared/version.rb +1 -1
- data/lib/squared/workspace/application.rb +245 -125
- data/lib/squared/workspace/project/base.rb +448 -188
- data/lib/squared/workspace/project/git.rb +97 -113
- data/lib/squared/workspace/project/node.rb +217 -109
- data/lib/squared/workspace/project/python.rb +37 -34
- data/lib/squared/workspace/project/ruby.rb +137 -100
- data/lib/squared/workspace/project.rb +0 -3
- data/lib/squared/workspace/repo.rb +32 -18
- data/lib/squared/workspace/series.rb +82 -53
- data/lib/squared/workspace.rb +6 -5
- data/lib/squared.rb +1 -11
- metadata +4 -3
- data/lib/squared/common/task.rb +0 -24
data/lib/squared/common/utils.rb
CHANGED
@@ -1,21 +1,48 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require 'pathname'
|
4
|
+
require 'rake'
|
5
|
+
|
3
6
|
module Squared
|
4
7
|
module Common
|
5
8
|
module Utils
|
6
9
|
module_function
|
7
10
|
|
8
|
-
def
|
9
|
-
|
10
|
-
|
11
|
-
|
11
|
+
def task_invoke(*cmd, args: [], exception: true, warning: true)
|
12
|
+
cmd.each { |name| ::Rake::Task[name].invoke(*args) }
|
13
|
+
rescue StandardError => e
|
14
|
+
raise if exception
|
15
|
+
|
16
|
+
warn e if warning
|
17
|
+
end
|
18
|
+
|
19
|
+
def task_join(*val)
|
20
|
+
case val.size
|
21
|
+
when 1
|
22
|
+
val[0].to_s
|
23
|
+
when 2
|
24
|
+
"#{val[0]}:#{val[1]}"
|
25
|
+
else
|
26
|
+
val.join(':')
|
12
27
|
end
|
13
|
-
ENV.fetch(key, '')
|
14
28
|
end
|
15
29
|
|
16
|
-
def
|
17
|
-
|
30
|
+
def task_invoked?(name)
|
31
|
+
::Rake::Task.tasks.any? { |obj| obj.already_invoked && obj.name == name }
|
32
|
+
end
|
33
|
+
|
34
|
+
def env(key, default = nil, suffix: @envname, equals: nil, ignore: nil)
|
35
|
+
ret = env_value(key, suffix: suffix)
|
36
|
+
return ret == equals.to_s unless equals.nil?
|
37
|
+
|
38
|
+
ret.empty? || (ignore && as_a(ignore).any? { |val| ret == val.to_s }) ? default : ret
|
39
|
+
end
|
18
40
|
|
41
|
+
def env_value(key, default = '', suffix: nil)
|
42
|
+
suffix && (ret = ENV["#{key}_#{suffix}"]) ? ret : ENV.fetch(key, default)
|
43
|
+
end
|
44
|
+
|
45
|
+
def env_bool(key, default = false, suffix: nil)
|
19
46
|
if key.is_a?(::String)
|
20
47
|
case env_value(key, suffix: suffix)
|
21
48
|
when ''
|
@@ -26,21 +53,29 @@ module Squared
|
|
26
53
|
true
|
27
54
|
end
|
28
55
|
else
|
29
|
-
key
|
56
|
+
key.nil? ? default : key
|
30
57
|
end
|
31
58
|
end
|
32
59
|
|
33
|
-
def env_pipe(key, default = 1, suffix: nil)
|
34
|
-
if
|
60
|
+
def env_pipe(key, default = 1, suffix: nil, root: nil)
|
61
|
+
if default.is_a?(::String)
|
62
|
+
begin
|
63
|
+
default = (root ? root.join(default) : ::Pathname.new(default)).realdirpath
|
64
|
+
rescue StandardError => e
|
65
|
+
default = 1
|
66
|
+
warn e
|
67
|
+
end
|
68
|
+
end
|
69
|
+
case key
|
70
|
+
when ::String
|
35
71
|
case (ret = env_value(key, suffix: suffix))
|
36
72
|
when '0', '1', '2'
|
37
|
-
ret.to_i
|
38
|
-
else
|
39
|
-
default
|
73
|
+
return ret.to_i
|
40
74
|
end
|
41
|
-
|
42
|
-
key
|
75
|
+
when ::Numeric
|
76
|
+
return key if key >= 0 && key <= 2
|
43
77
|
end
|
78
|
+
default
|
44
79
|
end
|
45
80
|
|
46
81
|
def env_match(key, default = nil, suffix: nil, options: 0, timeout: nil)
|
@@ -52,7 +87,7 @@ module Squared
|
|
52
87
|
when '1'
|
53
88
|
true
|
54
89
|
else
|
55
|
-
Regexp.new(ret, options, timeout: timeout)
|
90
|
+
::Regexp.new(ret, options, timeout: timeout)
|
56
91
|
end
|
57
92
|
end
|
58
93
|
end
|
data/lib/squared/common.rb
CHANGED
@@ -1,12 +1,9 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require 'pathname'
|
4
|
-
require 'rake'
|
5
|
-
|
6
3
|
require_relative 'common/base'
|
7
4
|
require_relative 'common/class'
|
8
5
|
require_relative 'common/format'
|
6
|
+
require_relative 'common/prompt'
|
9
7
|
require_relative 'common/shell'
|
10
8
|
require_relative 'common/system'
|
11
|
-
require_relative 'common/task'
|
12
9
|
require_relative 'common/utils'
|
data/lib/squared/config.rb
CHANGED
@@ -7,30 +7,26 @@ require_relative 'common'
|
|
7
7
|
module Squared
|
8
8
|
module Config
|
9
9
|
class Viewer
|
10
|
-
include Common
|
11
|
-
include Format
|
10
|
+
include Common::Format
|
12
11
|
include Utils
|
13
12
|
include ::Rake::DSL
|
14
13
|
|
15
|
-
|
16
|
-
|
17
|
-
super.to_s.match(/[^:]+$/)[0]
|
18
|
-
end
|
14
|
+
def self.to_s
|
15
|
+
super.match(/[^:]+$/)[0]
|
19
16
|
end
|
20
17
|
|
21
18
|
attr_reader :main, :name, :project, :theme
|
22
19
|
attr_accessor :pipe
|
23
20
|
|
24
|
-
def initialize(main, name = nil,
|
25
|
-
|
26
|
-
common: Common::KEY[:COMMON], pipe: Common::KEY[:PIPE], **)
|
21
|
+
def initialize(main, name = nil, project: nil, prefix: nil, dump: nil, opts: {}, auto: true,
|
22
|
+
common: ARG[:COMMON], pipe: ARG[:PIPE], **)
|
27
23
|
if project
|
28
|
-
main = @project.
|
24
|
+
main = @project.basepath(main).to_s if (@project = __get__(:project)[project.to_s])
|
29
25
|
@required = true
|
30
26
|
end
|
31
27
|
@name = name&.to_s || @project&.name
|
32
28
|
@prefix = prefix
|
33
|
-
@ext = File.extname(main)
|
29
|
+
@ext = File.extname(main).downcase
|
34
30
|
@dump = dump
|
35
31
|
@mime = {}
|
36
32
|
@theme = common ? __get__(:theme)[:viewer] : {}
|
@@ -63,10 +59,9 @@ module Squared
|
|
63
59
|
def build
|
64
60
|
return unless enabled?
|
65
61
|
|
66
|
-
params = ->(args) { exist? ? [realpath, [args.keys] + args.extras] : [args.keys, args.extras] }
|
67
|
-
|
68
62
|
namespace(ns = task_name(name)) do
|
69
63
|
view = @command && @command != name ? @command : 'view'
|
64
|
+
params = ->(args) { exist? ? [realpath, [args.keys] + args.extras] : [args.keys, args.extras] }
|
70
65
|
namespace view do
|
71
66
|
if @mime['json'] && (exist? || !::Rake::Task.task_defined?("#{ns}:#{view}:json"))
|
72
67
|
desc format_desc(view, 'json')
|
@@ -84,7 +79,6 @@ module Squared
|
|
84
79
|
end
|
85
80
|
end
|
86
81
|
end
|
87
|
-
|
88
82
|
yield self if block_given?
|
89
83
|
end
|
90
84
|
|
@@ -96,11 +90,11 @@ module Squared
|
|
96
90
|
require(gem || type)
|
97
91
|
obj = eval(parse)
|
98
92
|
ext << type if (ext = as_a(ext)).empty?
|
99
|
-
file = realpath if file
|
93
|
+
file = realpath if !file && exist?
|
100
94
|
|
101
95
|
namespace task_name(name) do
|
102
|
-
desc format_desc(command, *ext, exist: exist)
|
103
96
|
namespace command do
|
97
|
+
desc format_desc(command, *ext, exist: exist)
|
104
98
|
task type, [:keys] do |_, args|
|
105
99
|
if file
|
106
100
|
read_keys(obj, type, file.to_s, args.to_a, ext: ext)
|
@@ -124,7 +118,7 @@ module Squared
|
|
124
118
|
end
|
125
119
|
|
126
120
|
def also(path, type = nil, name: nil, gem: nil, parse: nil, opts: {})
|
127
|
-
return self if @mime.frozen? || !(file =
|
121
|
+
return self if @mime.frozen? || !(file = basepath(path)).exist?
|
128
122
|
|
129
123
|
ext = mime_type(file)
|
130
124
|
type = type&.to_s || ext
|
@@ -142,7 +136,7 @@ module Squared
|
|
142
136
|
end
|
143
137
|
|
144
138
|
def style(name, *args)
|
145
|
-
apply_style(theme, name,
|
139
|
+
apply_style(theme, name, args)
|
146
140
|
self
|
147
141
|
end
|
148
142
|
|
@@ -163,25 +157,35 @@ module Squared
|
|
163
157
|
def enabled?
|
164
158
|
return File.exist?(realpath) if exist?
|
165
159
|
|
166
|
-
!@required ||
|
160
|
+
!@required || !!project&.enabled?
|
167
161
|
end
|
168
162
|
|
169
163
|
private
|
170
164
|
|
165
|
+
def puts(*args)
|
166
|
+
puts_oe(*args, pipe: pipe)
|
167
|
+
end
|
168
|
+
|
171
169
|
def read_keys(reader, type, file, keys, ext: [type])
|
172
|
-
if (mime = mime_type(file)) &&
|
170
|
+
if file && (mime = mime_type(file)) && basepath(file).exist?
|
173
171
|
raise_error(file, mime, hint: 'invalid') unless ext.include?(mime)
|
174
172
|
else
|
175
173
|
if ext.include?(mime)
|
176
174
|
alt = file
|
177
175
|
file = nil
|
178
176
|
ext[0] = mime
|
179
|
-
|
177
|
+
elsif file
|
180
178
|
keys.unshift(file)
|
181
|
-
alt =
|
179
|
+
alt = basepath("#{main}.{#{ext.join(',')}}")
|
182
180
|
file = Dir[alt].first
|
181
|
+
else
|
182
|
+
alt = main
|
183
|
+
args = { hint: 'no keys' }
|
184
|
+
end
|
185
|
+
unless file
|
186
|
+
args ||= { hint: 'not found', kind: LoadError }
|
187
|
+
raise_error(reader.name, "#{File.basename(alt, '.*')}.#{ext.first}", **args)
|
183
188
|
end
|
184
|
-
raise_error(reader.name, "#{File.basename(alt, '.*')}.#{ext.first}", hint: 'not found') unless file
|
185
189
|
end
|
186
190
|
project&.log&.info "#{Viewer}(#{type}) => #{file} {#{keys.join(', ')}}"
|
187
191
|
doc = if reader.respond_to?(:load_file)
|
@@ -196,19 +200,19 @@ module Squared
|
|
196
200
|
.realpath
|
197
201
|
.to_s
|
198
202
|
.sub(Regexp.new("^#{Regexp.escape(File.join(Dir.pwd, ''))}"), '')
|
199
|
-
sub
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
203
|
+
emphasize(lines, title: title, sub: unless stdin?
|
204
|
+
[
|
205
|
+
{ pat: /^((?:[^:]|(?<! ):(?! ))+)$/, styles: theme[:banner] },
|
206
|
+
{ pat: /^(.*?)(<[^>]+>)(.+)$/m, styles: theme[:undefined], index: 2 },
|
207
|
+
{ pat: /^(.+)( : (?!undefined).+)$/m, styles: theme[:key] },
|
208
|
+
{ pat: /^(.+ : )(-?[\d.]+)(\s*)$/m, styles: theme[:number], index: 2 },
|
209
|
+
{ pat: /^(.+ : ")(.+)("\s*)$/m, styles: theme[:string], index: 2 },
|
210
|
+
{ pat: /^(.+ : \{)(.+)(\}\s*)$/m, styles: theme[:hash], index: 2 },
|
211
|
+
{ pat: /^(.+ : \[)(.+)(\]\s*)$/m, styles: theme[:array], index: 2 },
|
212
|
+
{ pat: /^(.+ : (?!undefined))([^"\[{].*)$/m, styles: theme[:value],
|
213
|
+
index: 2 }
|
214
|
+
]
|
215
|
+
end)
|
212
216
|
end
|
213
217
|
|
214
218
|
def print_keys(type, data, keys, file: nil)
|
@@ -252,8 +256,8 @@ module Squared
|
|
252
256
|
end
|
253
257
|
end
|
254
258
|
|
255
|
-
def
|
256
|
-
project ? project.
|
259
|
+
def basepath(file)
|
260
|
+
project ? project.basepath(file) : Pathname.new(file).realdirpath
|
257
261
|
end
|
258
262
|
|
259
263
|
def task_name(val)
|
@@ -266,19 +270,20 @@ module Squared
|
|
266
270
|
'yaml'
|
267
271
|
when 'js'
|
268
272
|
'json'
|
273
|
+
when ''
|
274
|
+
nil
|
269
275
|
else
|
270
|
-
ret
|
276
|
+
ret
|
271
277
|
end
|
272
278
|
end
|
273
279
|
|
274
280
|
def format_desc(command, *ext, exist: exist?)
|
275
|
-
|
276
|
-
|
281
|
+
val = "#{ext.first}[#{exist ? '' : "file?=#{File.basename(main)}.#{ext.last},"}keys+]"
|
282
|
+
message(@prefix, *name.split(':'), command, val, empty: true)
|
277
283
|
end
|
278
284
|
|
279
285
|
def realpath
|
280
|
-
file = main + @ext
|
281
|
-
Pathname.new(file).realdirpath.to_s rescue file
|
286
|
+
basepath(file = main + @ext).to_s rescue file
|
282
287
|
end
|
283
288
|
|
284
289
|
def exist?
|
data/lib/squared/version.rb
CHANGED