squared 0.0.11 → 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 +55 -2
- data/lib/squared/common/base.rb +5 -3
- data/lib/squared/common/class.rb +10 -2
- data/lib/squared/common/format.rb +29 -18
- data/lib/squared/common/prompt.rb +2 -4
- data/lib/squared/common/shell.rb +4 -3
- data/lib/squared/common/system.rb +12 -14
- data/lib/squared/common/utils.rb +29 -3
- data/lib/squared/common.rb +0 -4
- data/lib/squared/config.rb +35 -32
- data/lib/squared/version.rb +1 -1
- data/lib/squared/workspace/application.rb +51 -45
- data/lib/squared/workspace/project/base.rb +248 -83
- data/lib/squared/workspace/project/git.rb +38 -44
- data/lib/squared/workspace/project/node.rb +57 -96
- data/lib/squared/workspace/project/python.rb +16 -19
- data/lib/squared/workspace/project/ruby.rb +69 -48
- data/lib/squared/workspace/repo.rb +12 -11
- data/lib/squared/workspace/series.rb +15 -14
- data/lib/squared/workspace.rb +1 -1
- metadata +2 -3
- data/lib/squared/common/task.rb +0 -25
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2d9e8c772c9f4d0ce5c54dbeb1b9583d2e477f155036faf34cfc547659c34ec4
|
4
|
+
data.tar.gz: 87de412a78c0071eabd4b26713cbf84978a92fca6ea1a6dfe18653ddf22c90ee
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: '08475f426b15c41dab20fbead5d7c1ead70f5d80384e0a0772cbe7b101512a4402a1bb1231b2550f7da16aac2796f8411f6a6e3e570ae728d59b03f88fea5960'
|
7
|
+
data.tar.gz: 5c0334640b20dda82641925cd94b41d76be4cd4e603355fef593a5cd69731ac926febab67f3ffa494267291ec9d89efba2f8a9ac4dde978ab2814a0f8a481a67
|
data/README.ruby.md
CHANGED
@@ -59,7 +59,7 @@ require "squared/app" # All workspace related modules
|
|
59
59
|
|
60
60
|
Workspace::Application
|
61
61
|
.new(Dir.pwd, main: "squared") # Dir.pwd? (main? is implicitly basename)
|
62
|
-
.banner("group", "project", styles:
|
62
|
+
.banner("group", "project", styles: ["yellow", "black"], border: "bold") # name | project | path | ref | group? | parent? | version?
|
63
63
|
.repo("https://github.com/anpham6/squared-repo", "nightly", script: ["build:dev", "build:prod"], ref: :node) # Repo (optional)
|
64
64
|
.run("rake install", ref: :ruby)
|
65
65
|
.depend(false, group: "default")
|
@@ -112,7 +112,7 @@ Workspace::Application
|
|
112
112
|
}
|
113
113
|
})
|
114
114
|
.with(:python) do # ref=Symbol | group=String
|
115
|
-
banner([:name,
|
115
|
+
banner([:name, ": ", :version], "path") # chrome-docs: 0.1.0 | /workspaces/chrome-docs
|
116
116
|
doc("make html") # rake rb:doc:python
|
117
117
|
run(false) # rake rb:build:python (disabled)
|
118
118
|
exclude(%i[base git]) # Project::Git.ref (superclass)
|
@@ -125,6 +125,58 @@ Workspace::Application
|
|
125
125
|
|
126
126
|
**NOTE**: The use of "**ref**" (class name) is only necessary when initializing an empty directory (e.g. *rake repo:init*).
|
127
127
|
|
128
|
+
### Graph
|
129
|
+
|
130
|
+
```ruby
|
131
|
+
Workspace::Application
|
132
|
+
.new(main: "squared")
|
133
|
+
.with(:python) do
|
134
|
+
add("android-docs", "android")
|
135
|
+
add("chrome-docs", "chrome", graph: "android")
|
136
|
+
end
|
137
|
+
.with(:node) do
|
138
|
+
graph(["build", "copy"]) # Optional
|
139
|
+
add("e-mc", "emc")
|
140
|
+
add("pi-r", "pir", graph: "emc")
|
141
|
+
add("squared-express", "express", graph: "pir")
|
142
|
+
add("squared", graph: ["chrome", "express"])
|
143
|
+
end
|
144
|
+
.with(:ruby) do
|
145
|
+
add("pathname")
|
146
|
+
add("fileutils", graph: "pathname")
|
147
|
+
add("optparse")
|
148
|
+
add("rake", graph: ["fileutils", "optparse"])
|
149
|
+
end
|
150
|
+
.build
|
151
|
+
```
|
152
|
+
|
153
|
+
```sh
|
154
|
+
rake pir:graph # emc + pir
|
155
|
+
rake express:graph # emc + pir + express
|
156
|
+
rake chrome:graph # android + chrome
|
157
|
+
rake graph:python # same
|
158
|
+
rake squared:graph # android + chrome + emc + pir + express + squared
|
159
|
+
rake graph:node # same
|
160
|
+
rake rake:graph # pathname + fileutils + optparse + rake
|
161
|
+
rake graph:ruby # same
|
162
|
+
rake graph # graph:node + graph:ruby
|
163
|
+
```
|
164
|
+
|
165
|
+
### Batch
|
166
|
+
|
167
|
+
```ruby
|
168
|
+
Workspace::Series.batch(:ruby, :node, {
|
169
|
+
stage: %i[graph test],
|
170
|
+
reset: %i[stash pull]
|
171
|
+
})
|
172
|
+
```
|
173
|
+
|
174
|
+
### Rename
|
175
|
+
|
176
|
+
```ruby
|
177
|
+
Workspace::Series.rename("depend", "install")
|
178
|
+
```
|
179
|
+
|
128
180
|
## Usage
|
129
181
|
|
130
182
|
```sh
|
@@ -165,6 +217,7 @@ Task:
|
|
165
217
|
|
166
218
|
* run
|
167
219
|
* depend
|
220
|
+
* graph
|
168
221
|
* test
|
169
222
|
* doc
|
170
223
|
* clean
|
data/lib/squared/common/base.rb
CHANGED
@@ -5,10 +5,12 @@ module Squared
|
|
5
5
|
ARG = {
|
6
6
|
PIPE: 1,
|
7
7
|
OUT: nil,
|
8
|
+
VERBOSE: nil,
|
8
9
|
FAIL: false,
|
9
10
|
COMMON: true,
|
10
11
|
BANNER: true,
|
11
12
|
SPACE: ' => ',
|
13
|
+
GRAPH: ['│', '─', '├', '└', '┬'],
|
12
14
|
COLOR: ENV.fetch('NO_COLOR', '').empty?
|
13
15
|
}
|
14
16
|
VAR = {
|
@@ -86,15 +88,15 @@ module Squared
|
|
86
88
|
return [] if obj.nil?
|
87
89
|
|
88
90
|
unless obj.is_a?(::Array)
|
89
|
-
obj = if
|
91
|
+
obj = if obj.respond_to?(:to_a) && !obj.is_a?(::Hash) && (val = obj.to_a).is_a?(::Array)
|
90
92
|
val
|
91
93
|
else
|
92
94
|
[obj]
|
93
95
|
end
|
94
96
|
end
|
95
97
|
obj = obj.flatten(flat.is_a?(::Numeric) ? flat : nil) if flat
|
96
|
-
obj = obj.
|
97
|
-
|
98
|
+
obj = obj.compact if compact
|
99
|
+
meth ? obj.map(&meth) : obj
|
98
100
|
end
|
99
101
|
end
|
100
102
|
end
|
data/lib/squared/common/class.rb
CHANGED
@@ -8,10 +8,14 @@ module Squared
|
|
8
8
|
class SymSet
|
9
9
|
extend Forwardable
|
10
10
|
|
11
|
-
|
11
|
+
def self.to_s
|
12
|
+
super.match(/[^:]+$/)[0]
|
13
|
+
end
|
14
|
+
|
15
|
+
def_delegators :@data, :+, :each, :each_with_index, :entries, :to_a, :include?
|
12
16
|
|
13
17
|
def initialize(data = [])
|
14
|
-
@data = Set.new(data)
|
18
|
+
@data = ::Set.new(data)
|
15
19
|
end
|
16
20
|
|
17
21
|
def add(val)
|
@@ -26,6 +30,10 @@ module Squared
|
|
26
30
|
end
|
27
31
|
|
28
32
|
class JoinSet < ::Set
|
33
|
+
def self.to_s
|
34
|
+
super.match(/[^:]+$/)[0]
|
35
|
+
end
|
36
|
+
|
29
37
|
def initialize(data = [], delim: ' ')
|
30
38
|
super(data.compact)
|
31
39
|
@delim = delim
|
@@ -1,5 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require 'pathname'
|
3
4
|
require 'logger'
|
4
5
|
|
5
6
|
require_relative 'base'
|
@@ -137,15 +138,15 @@ module Squared
|
|
137
138
|
def log_sym(level)
|
138
139
|
if level.is_a?(::Numeric)
|
139
140
|
case level
|
140
|
-
when Logger::DEBUG
|
141
|
+
when ::Logger::DEBUG
|
141
142
|
:debug
|
142
|
-
when Logger::INFO
|
143
|
+
when ::Logger::INFO
|
143
144
|
:info
|
144
|
-
when Logger::WARN
|
145
|
+
when ::Logger::WARN
|
145
146
|
:warn
|
146
|
-
when Logger::ERROR
|
147
|
+
when ::Logger::ERROR
|
147
148
|
:error
|
148
|
-
when Logger::FATAL
|
149
|
+
when ::Logger::FATAL
|
149
150
|
:fatal
|
150
151
|
else
|
151
152
|
:unknown
|
@@ -186,8 +187,8 @@ module Squared
|
|
186
187
|
def puts_oe(*args, pipe: 1)
|
187
188
|
if pipe.is_a?(::Pathname)
|
188
189
|
begin
|
189
|
-
File.open(pipe, 'a') do |f|
|
190
|
-
br = File::SEPARATOR == '\\' ? "\r\n" : "\n"
|
190
|
+
::File.open(pipe, 'a') do |f|
|
191
|
+
br = ::File::SEPARATOR == '\\' ? "\r\n" : "\n"
|
191
192
|
args.flatten.each { |val| f.write("#{strip_style(val.chomp)}#{br}") }
|
192
193
|
end
|
193
194
|
return
|
@@ -204,22 +205,23 @@ module Squared
|
|
204
205
|
(empty ? args.reject { |val| val.nil? || val.empty? } : args).join(ARG[:SPACE]) + (hint ? " (#{hint})" : '')
|
205
206
|
end
|
206
207
|
|
207
|
-
def emphasize(val, title: nil, footer: nil, cols: nil, sub: nil, border: nil, pipe: nil)
|
208
|
+
def emphasize(val, title: nil, footer: nil, right: false, cols: nil, sub: nil, border: nil, pipe: nil)
|
208
209
|
n = 0
|
209
|
-
|
210
|
-
|
211
|
-
|
210
|
+
max = ->(v) { n = [n, v.max_by(&:size).size].max }
|
211
|
+
set = lambda do |v|
|
212
|
+
ret = as_a(v, :to_s)
|
213
|
+
max.(ret)
|
212
214
|
ret
|
213
215
|
end
|
214
|
-
title
|
215
|
-
footer
|
216
|
+
title &&= set.(title)
|
217
|
+
footer &&= set.(footer)
|
216
218
|
if val.is_a?(::Array)
|
217
219
|
lines = val.map(&:to_s)
|
218
220
|
else
|
219
221
|
lines = val.to_s.lines.map(&:chomp)
|
220
|
-
lines[0] = "#{val.class}: #{lines.first}" if (err = val.is_a?(
|
222
|
+
lines[0] = "#{val.class}: #{lines.first}" if (err = val.is_a?(StandardError))
|
221
223
|
end
|
222
|
-
n = cols ||
|
224
|
+
n = cols || max.(lines)
|
223
225
|
if $stdout.tty?
|
224
226
|
require 'io/console'
|
225
227
|
(n = [n, $stdout.winsize[1] - 4].min) rescue nil
|
@@ -227,10 +229,10 @@ module Squared
|
|
227
229
|
out = []
|
228
230
|
bord = '-' * (n + 4)
|
229
231
|
bord = sub_style(bord, styles: border) if border
|
230
|
-
sub =
|
232
|
+
sub = as_a(sub)
|
231
233
|
pr = lambda do |line|
|
232
234
|
s = line.ljust(n)
|
233
|
-
sub
|
235
|
+
sub.each { |h| s = sub_style(s, **h) }
|
234
236
|
s = "| #{s} |"
|
235
237
|
if border
|
236
238
|
s = sub_style(s, pat: /^(\|)(.+)$/m, styles: border)
|
@@ -245,7 +247,16 @@ module Squared
|
|
245
247
|
end
|
246
248
|
lines.each { |line| out << pr.(line) }
|
247
249
|
out << bord
|
248
|
-
|
250
|
+
if footer
|
251
|
+
unless sub.empty? && !right
|
252
|
+
footer.map! do |s|
|
253
|
+
s = s.rjust(n + 4) if right
|
254
|
+
sub.each { |h| s = sub_style(s, **h) }
|
255
|
+
s
|
256
|
+
end
|
257
|
+
end
|
258
|
+
out += footer
|
259
|
+
end
|
249
260
|
if block_given?
|
250
261
|
yield out
|
251
262
|
elsif pipe
|
@@ -1,13 +1,12 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require 'readline'
|
4
|
-
|
5
3
|
module Squared
|
6
4
|
module Common
|
7
5
|
module Prompt
|
8
6
|
module_function
|
9
7
|
|
10
8
|
def confirm(msg, default = nil, agree: 'Y', cancel: 'N', attempts: 5, timeout: 15)
|
9
|
+
require 'readline'
|
11
10
|
require 'timeout'
|
12
11
|
agree = /^#{agree}$/i if agree.is_a?(::String)
|
13
12
|
cancel = /^#{cancel}$/i if cancel.is_a?(::String)
|
@@ -15,8 +14,7 @@ module Squared
|
|
15
14
|
begin
|
16
15
|
while (ch = Readline.readline(msg, true))
|
17
16
|
ch = ch.chomp
|
18
|
-
ch
|
19
|
-
case ch
|
17
|
+
case (ch.empty? ? default : ch)
|
20
18
|
when agree
|
21
19
|
return true
|
22
20
|
when cancel
|
data/lib/squared/common/shell.rb
CHANGED
@@ -9,9 +9,10 @@ module Squared
|
|
9
9
|
module_function
|
10
10
|
|
11
11
|
def shell_escape(val, quote: false)
|
12
|
-
|
12
|
+
val = val.to_s
|
13
|
+
return ::Shellwords.escape(val) unless ::Rake::Win32.windows?
|
13
14
|
|
14
|
-
quote ? shell_quote(
|
15
|
+
quote ? shell_quote(val, force: false) : val
|
15
16
|
end
|
16
17
|
|
17
18
|
def shell_quote(val, force: true)
|
@@ -22,7 +23,7 @@ module Squared
|
|
22
23
|
end
|
23
24
|
|
24
25
|
def shell_split(val, quote: false, join: false)
|
25
|
-
ret = Shellwords.split(val).map do |opt|
|
26
|
+
ret = ::Shellwords.split(val).map do |opt|
|
26
27
|
if (data = /^(--?[^= ]+)(=|\s+)?(["'])?(.+?)\3?$/m.match(opt))
|
27
28
|
next opt unless data[2] && !data[3]
|
28
29
|
|
@@ -12,50 +12,48 @@ module Squared
|
|
12
12
|
if RUBY_VERSION =~ /^2\.[0-5]\./
|
13
13
|
exception = kwargs.delete(:exception)
|
14
14
|
ret = system(*args, **kwargs)
|
15
|
-
|
15
|
+
return ret if ret || !exception
|
16
16
|
|
17
|
-
|
17
|
+
raise $?.to_s
|
18
18
|
else
|
19
19
|
system(*args, **kwargs)
|
20
20
|
end
|
21
21
|
end
|
22
22
|
|
23
23
|
def copy_d(src, dest, glob: ['**/*'], create: false, verbose: true)
|
24
|
-
src = Pathname.new(src)
|
25
|
-
dest = Pathname.new(dest)
|
24
|
+
src = ::Pathname.new(src)
|
25
|
+
dest = ::Pathname.new(dest)
|
26
26
|
raise "#{dest} (not found)" if !create && !dest.exist?
|
27
27
|
|
28
28
|
subdir = []
|
29
29
|
files = 0
|
30
30
|
dest.mkpath if create
|
31
31
|
(glob.is_a?(::Array) ? glob : [glob]).each do |val|
|
32
|
-
Dir.glob(src.join(val)) do |path|
|
33
|
-
|
34
|
-
next if ent.directory?
|
32
|
+
::Dir.glob(src.join(val)) do |path|
|
33
|
+
next if (path = ::Pathname.new(path)).directory?
|
35
34
|
|
36
|
-
target = dest.join(
|
35
|
+
target = dest.join(path.relative_path_from(src))
|
37
36
|
dir = target.dirname
|
38
37
|
unless subdir.include?(dir.to_s)
|
39
38
|
dir.mkpath
|
40
39
|
subdir << dir.to_s
|
41
40
|
end
|
42
|
-
copy_f
|
41
|
+
copy_f path, target
|
43
42
|
files += 1
|
44
43
|
end
|
45
44
|
end
|
46
|
-
puts [dest.realpath, subdir.size.to_s, files.to_s].join(
|
45
|
+
puts [dest.realpath, subdir.size.to_s, files.to_s].join(' => ') if verbose
|
47
46
|
end
|
48
47
|
|
49
48
|
def copy_f(src, dest, overwrite: true, verbose: false)
|
50
49
|
unless overwrite
|
51
|
-
if (path = Pathname.new(dest)).directory?
|
52
|
-
src = [src]
|
53
|
-
src = src.reject { |val| path.join(File.basename(val)).exist? }
|
50
|
+
if (path = ::Pathname.new(dest)).directory?
|
51
|
+
src = (src.is_a?(::Array) ? src : [src]).reject { |val| path.join(::File.basename(val)).exist? }
|
54
52
|
elsif path.exist?
|
55
53
|
return
|
56
54
|
end
|
57
55
|
end
|
58
|
-
FileUtils.cp(src, dest, verbose: verbose)
|
56
|
+
::FileUtils.cp(src, dest, verbose: verbose)
|
59
57
|
end
|
60
58
|
end
|
61
59
|
end
|
data/lib/squared/common/utils.rb
CHANGED
@@ -1,10 +1,36 @@
|
|
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
|
|
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(':')
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def task_invoked?(name)
|
31
|
+
::Rake::Task.tasks.any? { |obj| obj.already_invoked && obj.name == name }
|
32
|
+
end
|
33
|
+
|
8
34
|
def env(key, default = nil, suffix: @envname, equals: nil, ignore: nil)
|
9
35
|
ret = env_value(key, suffix: suffix)
|
10
36
|
return ret == equals.to_s unless equals.nil?
|
@@ -32,9 +58,9 @@ module Squared
|
|
32
58
|
end
|
33
59
|
|
34
60
|
def env_pipe(key, default = 1, suffix: nil, root: nil)
|
35
|
-
if default.is_a?(String)
|
61
|
+
if default.is_a?(::String)
|
36
62
|
begin
|
37
|
-
default = (root ? root.join(default) : Pathname.new(default)).realdirpath
|
63
|
+
default = (root ? root.join(default) : ::Pathname.new(default)).realdirpath
|
38
64
|
rescue StandardError => e
|
39
65
|
default = 1
|
40
66
|
warn e
|
@@ -61,7 +87,7 @@ module Squared
|
|
61
87
|
when '1'
|
62
88
|
true
|
63
89
|
else
|
64
|
-
Regexp.new(ret, options, timeout: timeout)
|
90
|
+
::Regexp.new(ret, options, timeout: timeout)
|
65
91
|
end
|
66
92
|
end
|
67
93
|
end
|
data/lib/squared/common.rb
CHANGED
@@ -1,13 +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'
|
9
6
|
require_relative 'common/prompt'
|
10
7
|
require_relative 'common/shell'
|
11
8
|
require_relative 'common/system'
|
12
|
-
require_relative 'common/task'
|
13
9
|
require_relative 'common/utils'
|
data/lib/squared/config.rb
CHANGED
@@ -2,18 +2,17 @@
|
|
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
|
8
|
-
include Common
|
9
|
-
include Format
|
10
|
+
include Common::Format
|
10
11
|
include Utils
|
11
12
|
include ::Rake::DSL
|
12
13
|
|
13
|
-
|
14
|
-
|
15
|
-
super.to_s.match(/[^:]+$/)[0]
|
16
|
-
end
|
14
|
+
def self.to_s
|
15
|
+
super.match(/[^:]+$/)[0]
|
17
16
|
end
|
18
17
|
|
19
18
|
attr_reader :main, :name, :project, :theme
|
@@ -22,12 +21,12 @@ module Squared
|
|
22
21
|
def initialize(main, name = nil, project: nil, prefix: nil, dump: nil, opts: {}, auto: true,
|
23
22
|
common: ARG[:COMMON], pipe: ARG[:PIPE], **)
|
24
23
|
if project
|
25
|
-
main = @project.
|
24
|
+
main = @project.basepath(main).to_s if (@project = __get__(:project)[project.to_s])
|
26
25
|
@required = true
|
27
26
|
end
|
28
27
|
@name = name&.to_s || @project&.name
|
29
28
|
@prefix = prefix
|
30
|
-
@ext = File.extname(main)
|
29
|
+
@ext = File.extname(main).downcase
|
31
30
|
@dump = dump
|
32
31
|
@mime = {}
|
33
32
|
@theme = common ? __get__(:theme)[:viewer] : {}
|
@@ -63,7 +62,6 @@ module Squared
|
|
63
62
|
namespace(ns = task_name(name)) do
|
64
63
|
view = @command && @command != name ? @command : 'view'
|
65
64
|
params = ->(args) { exist? ? [realpath, [args.keys] + args.extras] : [args.keys, args.extras] }
|
66
|
-
|
67
65
|
namespace view do
|
68
66
|
if @mime['json'] && (exist? || !::Rake::Task.task_defined?("#{ns}:#{view}:json"))
|
69
67
|
desc format_desc(view, 'json')
|
@@ -81,7 +79,6 @@ module Squared
|
|
81
79
|
end
|
82
80
|
end
|
83
81
|
end
|
84
|
-
|
85
82
|
yield self if block_given?
|
86
83
|
end
|
87
84
|
|
@@ -96,8 +93,8 @@ module Squared
|
|
96
93
|
file = realpath if !file && exist?
|
97
94
|
|
98
95
|
namespace task_name(name) do
|
99
|
-
desc format_desc(command, *ext, exist: exist)
|
100
96
|
namespace command do
|
97
|
+
desc format_desc(command, *ext, exist: exist)
|
101
98
|
task type, [:keys] do |_, args|
|
102
99
|
if file
|
103
100
|
read_keys(obj, type, file.to_s, args.to_a, ext: ext)
|
@@ -121,7 +118,7 @@ module Squared
|
|
121
118
|
end
|
122
119
|
|
123
120
|
def also(path, type = nil, name: nil, gem: nil, parse: nil, opts: {})
|
124
|
-
return self if @mime.frozen? || !(file =
|
121
|
+
return self if @mime.frozen? || !(file = basepath(path)).exist?
|
125
122
|
|
126
123
|
ext = mime_type(file)
|
127
124
|
type = type&.to_s || ext
|
@@ -170,19 +167,25 @@ module Squared
|
|
170
167
|
end
|
171
168
|
|
172
169
|
def read_keys(reader, type, file, keys, ext: [type])
|
173
|
-
if (mime = mime_type(file)) &&
|
170
|
+
if file && (mime = mime_type(file)) && basepath(file).exist?
|
174
171
|
raise_error(file, mime, hint: 'invalid') unless ext.include?(mime)
|
175
172
|
else
|
176
173
|
if ext.include?(mime)
|
177
174
|
alt = file
|
178
175
|
file = nil
|
179
176
|
ext[0] = mime
|
180
|
-
|
177
|
+
elsif file
|
181
178
|
keys.unshift(file)
|
182
|
-
alt =
|
179
|
+
alt = basepath("#{main}.{#{ext.join(',')}}")
|
183
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)
|
184
188
|
end
|
185
|
-
raise_error(reader.name, "#{File.basename(alt, '.*')}.#{ext.first}", hint: 'not found') unless file
|
186
189
|
end
|
187
190
|
project&.log&.info "#{Viewer}(#{type}) => #{file} {#{keys.join(', ')}}"
|
188
191
|
doc = if reader.respond_to?(:load_file)
|
@@ -197,19 +200,19 @@ module Squared
|
|
197
200
|
.realpath
|
198
201
|
.to_s
|
199
202
|
.sub(Regexp.new("^#{Regexp.escape(File.join(Dir.pwd, ''))}"), '')
|
200
|
-
sub
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
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)
|
213
216
|
end
|
214
217
|
|
215
218
|
def print_keys(type, data, keys, file: nil)
|
@@ -253,8 +256,8 @@ module Squared
|
|
253
256
|
end
|
254
257
|
end
|
255
258
|
|
256
|
-
def
|
257
|
-
project ? project.
|
259
|
+
def basepath(file)
|
260
|
+
project ? project.basepath(file) : Pathname.new(file).realdirpath
|
258
261
|
end
|
259
262
|
|
260
263
|
def task_name(val)
|
@@ -280,7 +283,7 @@ module Squared
|
|
280
283
|
end
|
281
284
|
|
282
285
|
def realpath
|
283
|
-
|
286
|
+
basepath(file = main + @ext).to_s rescue file
|
284
287
|
end
|
285
288
|
|
286
289
|
def exist?
|
data/lib/squared/version.rb
CHANGED