diver_down 0.0.1.alpha5 → 0.0.1.alpha6
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/lib/diver_down/version.rb +1 -1
- data/lib/diver_down/web/definition_to_dot.rb +66 -43
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7d4a5bb567f1141aaa13b3d6aaf7e4201b005988a072cfd5c4de2e11a180c480
|
4
|
+
data.tar.gz: 5cf5455488b8944830f2f25fb7f26a1b4d21ed2d42ee1c2ea755138ba3aa40e3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 79b39d0ecc4569ce41d26c24ae03d903c431a7cdc55c9c9fecbcbbfadc807edbdcab3c34481fde3b6d728791b780951ef1923afb37414f6403a3daa415537d73
|
7
|
+
data.tar.gz: '0800be880d27a2c61c8e7153bbea2c02ab8573d347a5b5cccd9325549e7284f2d8c4316b3fb794c9fa0c42ee47e9fa9d7df9d9a24efe4d106ba5d767c2d3c0a3'
|
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,62 @@ 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 }
|
276
279
|
end
|
277
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
|
+
insert_dependencies(source)
|
289
|
+
end
|
290
|
+
else
|
291
|
+
buf = swap_io do
|
292
|
+
indexes = (0..(full_modules.length - 1)).to_a
|
293
|
+
|
294
|
+
chain_yield(indexes) do |index, next_proc|
|
295
|
+
module_names = full_modules[0..index]
|
296
|
+
module_name = module_names[-1]
|
297
|
+
|
298
|
+
io.puts %(subgraph "#{escape_quote(module_label(module_names))}" {)
|
299
|
+
io.indented do
|
300
|
+
io.puts %(id="#{@metadata_store.issue_modules_id(module_names)}")
|
301
|
+
io.puts %(label="#{escape_quote(module_name)}")
|
302
|
+
|
303
|
+
sources = (by_modules[module_names] || []).sort_by(&:source_name)
|
304
|
+
sources.each do |source|
|
305
|
+
insert_source(source)
|
306
|
+
insert_dependencies(source)
|
307
|
+
end
|
308
|
+
|
309
|
+
next_proc&.call
|
310
|
+
end
|
311
|
+
io.puts '}'
|
312
|
+
end
|
313
|
+
end
|
314
|
+
|
315
|
+
io.write buf.string
|
316
|
+
end
|
317
|
+
end
|
318
|
+
end
|
319
|
+
|
320
|
+
def insert_source(source)
|
321
|
+
io.puts %("#{escape_quote(source.source_name)}" #{build_attributes(label: source.source_name, id: @metadata_store.issue_source_id(source))})
|
322
|
+
end
|
323
|
+
|
324
|
+
def insert_dependencies(source)
|
278
325
|
source.dependencies.each do
|
279
326
|
attributes = {}
|
280
327
|
ltail = module_label(*module_store.get(source.source_name))
|
@@ -307,40 +354,12 @@ module DiverDown
|
|
307
354
|
)
|
308
355
|
end
|
309
356
|
|
310
|
-
io.write(%("#{source.source_name}" -> "#{_1.source_name}"))
|
357
|
+
io.write(%("#{escape_quote(source.source_name)}" -> "#{escape_quote(_1.source_name)}"))
|
311
358
|
io.write(%( #{build_attributes(**attributes)}), indent: false) unless attributes.empty?
|
312
359
|
io.write("\n")
|
313
360
|
end
|
314
361
|
end
|
315
362
|
|
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
363
|
def chain_yield(values, &block)
|
345
364
|
*head, tail = values
|
346
365
|
|
@@ -363,7 +382,7 @@ module DiverDown
|
|
363
382
|
attrs = attrs.reject { _2.nil? || _2 == '' }
|
364
383
|
return if attrs.empty?
|
365
384
|
|
366
|
-
attrs_str = attrs.map { %(#{_1}="#{_2}") }.join(ATTRIBUTE_DELIMITER)
|
385
|
+
attrs_str = attrs.map { %(#{_1}="#{escape_quote(_2)}") }.join(ATTRIBUTE_DELIMITER)
|
367
386
|
|
368
387
|
if _wrap
|
369
388
|
"#{_wrap[0]}#{attrs_str}#{_wrap[1]}"
|
@@ -394,6 +413,10 @@ module DiverDown
|
|
394
413
|
|
395
414
|
"cluster_#{modules.join(MODULE_DELIMITER)}"
|
396
415
|
end
|
416
|
+
|
417
|
+
def escape_quote(string)
|
418
|
+
string.to_s.gsub(/"/, '\"')
|
419
|
+
end
|
397
420
|
end
|
398
421
|
end
|
399
422
|
end
|