squared 0.0.11 → 0.0.12
Sign up to get free protection for your applications and to get access to all the features.
- 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