diver_down 0.0.1.alpha5 → 0.0.1.alpha7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/diver_down/version.rb +1 -1
- data/lib/diver_down/web/definition_to_dot.rb +68 -43
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3749e5acb9fae2d27b5267f30897c328b2a121fa1b25f89ab2dd0263af685492
|
4
|
+
data.tar.gz: 841226072e1c60faaacabcadabcf66c94bde318d7479d8090c064128be5556fe
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 80753b14f48811fa05d84b75f303d17335701f82fc04ead701c8e8b53473f0d9860bf7e78a25201e0c9bc9c58af89764350f023c3ea4310c7b3cb6c6b0ab93a9
|
7
|
+
data.tar.gz: 5ec6ec0814d825864fb062ec0db92f3f7d6df8949795ac5c4f6299b302219e5f50f6ba9f8f8590b8ac123c268f8a04ac268a95e0af6638084ff13b62859d603a
|
data/lib/diver_down/version.rb
CHANGED
@@ -161,7 +161,7 @@ module DiverDown
|
|
161
161
|
|
162
162
|
# @return [String]
|
163
163
|
def to_s
|
164
|
-
io.puts %(strict digraph "#{definition.title}" {)
|
164
|
+
io.puts %(strict digraph "#{escape_quote(definition.title)}" {)
|
165
165
|
io.indented do
|
166
166
|
io.puts('compound=true') if @compound
|
167
167
|
io.puts('concentrate=true') if @concentrate
|
@@ -169,9 +169,7 @@ module DiverDown
|
|
169
169
|
if @only_module
|
170
170
|
render_only_modules
|
171
171
|
else
|
172
|
-
|
173
|
-
insert_source(_1)
|
174
|
-
end
|
172
|
+
render_sources
|
175
173
|
end
|
176
174
|
end
|
177
175
|
io.puts '}'
|
@@ -214,11 +212,11 @@ module DiverDown
|
|
214
212
|
module_names = specific_module_names[0..index]
|
215
213
|
module_name = specific_module_names[index]
|
216
214
|
|
217
|
-
io.puts %(subgraph "#{module_label(module_names)}" {)
|
215
|
+
io.puts %(subgraph "#{escape_quote(module_label(module_names))}" {)
|
218
216
|
io.indented do
|
219
217
|
io.puts %(id="#{@metadata_store.issue_modules_id(module_names)}")
|
220
|
-
io.puts %(label="#{module_name}")
|
221
|
-
io.puts %("#{module_name}" #{build_attributes(label: module_name, id: @metadata_store.issue_modules_id(module_names))})
|
218
|
+
io.puts %(label="#{escape_quote(module_name)}")
|
219
|
+
io.puts %("#{escape_quote(module_name)}" #{build_attributes(label: module_name, id: @metadata_store.issue_modules_id(module_names))})
|
222
220
|
|
223
221
|
next_proc&.call
|
224
222
|
end
|
@@ -260,7 +258,7 @@ module DiverDown
|
|
260
258
|
minlen: MODULE_MINLEN
|
261
259
|
)
|
262
260
|
|
263
|
-
io.write(%("#{from_modules[-1]}" -> "#{to_modules[-1]}"))
|
261
|
+
io.write(%("#{escape_quote(from_modules[-1])}" -> "#{escape_quote(to_modules[-1])}"))
|
264
262
|
io.write(%( #{build_attributes(**attributes)}), indent: false) unless attributes.empty?
|
265
263
|
io.write("\n")
|
266
264
|
end
|
@@ -268,13 +266,64 @@ module DiverDown
|
|
268
266
|
end
|
269
267
|
end
|
270
268
|
|
271
|
-
def
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
|
269
|
+
def render_sources
|
270
|
+
by_modules = definition.sources.group_by do |source|
|
271
|
+
module_store.get(source.source_name)
|
272
|
+
end
|
273
|
+
|
274
|
+
# Remove duplicated prefix modules
|
275
|
+
# from [["A"], ["A", "B"]] to [["A", "B"]]
|
276
|
+
uniq_modules = by_modules.keys.uniq
|
277
|
+
uniq_modules = uniq_modules.reject do |modules|
|
278
|
+
uniq_modules.any? { _1[0..modules.size - 1] == modules && _1.length > modules.size }
|
279
|
+
end
|
280
|
+
|
281
|
+
uniq_modules.each do |full_modules|
|
282
|
+
# Render module and source
|
283
|
+
if full_modules.empty?
|
284
|
+
sources = by_modules[full_modules].sort_by(&:source_name)
|
285
|
+
|
286
|
+
sources.each do |source|
|
287
|
+
insert_source(source)
|
288
|
+
end
|
289
|
+
else
|
290
|
+
buf = swap_io do
|
291
|
+
indexes = (0..(full_modules.length - 1)).to_a
|
292
|
+
|
293
|
+
chain_yield(indexes) do |index, next_proc|
|
294
|
+
module_names = full_modules[0..index]
|
295
|
+
module_name = module_names[-1]
|
296
|
+
|
297
|
+
io.puts %(subgraph "#{escape_quote(module_label(module_names))}" {)
|
298
|
+
io.indented do
|
299
|
+
io.puts %(id="#{@metadata_store.issue_modules_id(module_names)}")
|
300
|
+
io.puts %(label="#{escape_quote(module_name)}")
|
301
|
+
|
302
|
+
sources = (by_modules[module_names] || []).sort_by(&:source_name)
|
303
|
+
sources.each do |source|
|
304
|
+
insert_source(source)
|
305
|
+
end
|
306
|
+
|
307
|
+
next_proc&.call
|
308
|
+
end
|
309
|
+
io.puts '}'
|
310
|
+
end
|
311
|
+
end
|
312
|
+
|
313
|
+
io.write buf.string
|
314
|
+
end
|
276
315
|
end
|
277
316
|
|
317
|
+
definition.sources.sort_by(&:source_name).each do |source|
|
318
|
+
insert_dependencies(source)
|
319
|
+
end
|
320
|
+
end
|
321
|
+
|
322
|
+
def insert_source(source)
|
323
|
+
io.puts %("#{escape_quote(source.source_name)}" #{build_attributes(label: source.source_name, id: @metadata_store.issue_source_id(source))})
|
324
|
+
end
|
325
|
+
|
326
|
+
def insert_dependencies(source)
|
278
327
|
source.dependencies.each do
|
279
328
|
attributes = {}
|
280
329
|
ltail = module_label(*module_store.get(source.source_name))
|
@@ -307,40 +356,12 @@ module DiverDown
|
|
307
356
|
)
|
308
357
|
end
|
309
358
|
|
310
|
-
io.write(%("#{source.source_name}" -> "#{_1.source_name}"))
|
359
|
+
io.write(%("#{escape_quote(source.source_name)}" -> "#{escape_quote(_1.source_name)}"))
|
311
360
|
io.write(%( #{build_attributes(**attributes)}), indent: false) unless attributes.empty?
|
312
361
|
io.write("\n")
|
313
362
|
end
|
314
363
|
end
|
315
364
|
|
316
|
-
def insert_modules(source)
|
317
|
-
buf = swap_io do
|
318
|
-
all_module_names = module_store.get(source.source_name)
|
319
|
-
indexes = (0..(all_module_names.length - 1)).to_a
|
320
|
-
|
321
|
-
chain_yield(indexes) do |index, next_proc|
|
322
|
-
module_names = all_module_names[0..index]
|
323
|
-
module_name = module_names[-1]
|
324
|
-
|
325
|
-
io.puts %(subgraph "#{module_label(module_names)}" {)
|
326
|
-
io.indented do
|
327
|
-
io.puts %(id="#{@metadata_store.issue_modules_id(module_names)}")
|
328
|
-
io.puts %(label="#{module_name}")
|
329
|
-
|
330
|
-
if next_proc
|
331
|
-
next_proc.call
|
332
|
-
else
|
333
|
-
# last. equals indexes[-1] == index
|
334
|
-
io.puts %("#{source.source_name}" #{build_attributes(label: source.source_name, id: @metadata_store.issue_source_id(source))})
|
335
|
-
end
|
336
|
-
end
|
337
|
-
io.puts '}'
|
338
|
-
end
|
339
|
-
end
|
340
|
-
|
341
|
-
io.write buf.string
|
342
|
-
end
|
343
|
-
|
344
365
|
def chain_yield(values, &block)
|
345
366
|
*head, tail = values
|
346
367
|
|
@@ -363,7 +384,7 @@ module DiverDown
|
|
363
384
|
attrs = attrs.reject { _2.nil? || _2 == '' }
|
364
385
|
return if attrs.empty?
|
365
386
|
|
366
|
-
attrs_str = attrs.map { %(#{_1}="#{_2}") }.join(ATTRIBUTE_DELIMITER)
|
387
|
+
attrs_str = attrs.map { %(#{_1}="#{escape_quote(_2)}") }.join(ATTRIBUTE_DELIMITER)
|
367
388
|
|
368
389
|
if _wrap
|
369
390
|
"#{_wrap[0]}#{attrs_str}#{_wrap[1]}"
|
@@ -394,6 +415,10 @@ module DiverDown
|
|
394
415
|
|
395
416
|
"cluster_#{modules.join(MODULE_DELIMITER)}"
|
396
417
|
end
|
418
|
+
|
419
|
+
def escape_quote(string)
|
420
|
+
string.to_s.gsub(/"/, '\"')
|
421
|
+
end
|
397
422
|
end
|
398
423
|
end
|
399
424
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: diver_down
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.1.
|
4
|
+
version: 0.0.1.alpha7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- alpaca-tc
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-05-
|
11
|
+
date: 2024-05-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|