visualize_packs 0.5.4 → 0.5.5
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/bin/visualize_packs +14 -0
- data/lib/graph.dot.erb +8 -4
- data/lib/options.rb +1 -0
- data/lib/visualize_packs.rb +9 -11
- 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: b4ade528fc794c71afb2470d457f31d72b2456b85a484f2b328ca1c73e7fc2cf
|
4
|
+
data.tar.gz: 239feaba7ced4136ac77625e6ed1632a031492e86ca6d1c0d025976b23e31300
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 18a67a3b983c99f4d273a8e32e390a63bb0fa0398c7da51d4552fee73eedda0e77debfe45a3e196cae5b8d0e370124f7eeb82d202f4daba7b68bb90fb5b15708
|
7
|
+
data.tar.gz: 60e06eaacba3c796ee9045223d47203f63b19e83664c58b9db69696c591f68169f217bc8172287fcb9cc61befaa2008c4a337e486febd0477b6a0b8d14100520
|
data/bin/visualize_packs
CHANGED
@@ -10,11 +10,25 @@ require_relative '../lib/options'
|
|
10
10
|
|
11
11
|
options = Options.new
|
12
12
|
|
13
|
+
supported_todo_types = %w[
|
14
|
+
privacy
|
15
|
+
architecture
|
16
|
+
visibility
|
17
|
+
dependency
|
18
|
+
].sort.freeze
|
19
|
+
|
20
|
+
def validated_list(o, valid_arguments)
|
21
|
+
list = o.to_s.split(",").uniq
|
22
|
+
raise OptionParser::InvalidArgument, o unless (list - valid_arguments).empty?
|
23
|
+
list
|
24
|
+
end
|
25
|
+
|
13
26
|
OptionParser.new do |opt|
|
14
27
|
opt.on('--no-legend', "Don't show legend") { |o| options.show_legend = false }
|
15
28
|
opt.on('--no-layers', "Don't show architectural layers") { |o| options.show_layers = false }
|
16
29
|
opt.on('--no-dependencies', "Don't show accepted dependencies") { |o| options.show_dependencies = false }
|
17
30
|
opt.on('--no-todos', "Don't show package todos") { |o| options.show_todos = false }
|
31
|
+
opt.on('--only-todo-types=privacy,architecture,etc', "Show only these types of todos (supported types: #{supported_todo_types.join(', ')})") { |o| options.only_todo_types = validated_list(o, supported_todo_types) }
|
18
32
|
opt.on('--no-privacy', "Don't show privacy enforcement") { |o| options.show_privacy = false }
|
19
33
|
opt.on('--no-teams', "Don't show team colors") { |o| options.show_teams = false }
|
20
34
|
|
data/lib/graph.dot.erb
CHANGED
@@ -81,10 +81,14 @@ digraph package_diagram {
|
|
81
81
|
<%- end -%>
|
82
82
|
<%- if options.show_todos -%>
|
83
83
|
<%- all_packages.each do |package| -%>
|
84
|
-
<%-
|
84
|
+
<%- filtered_violations = package.violations -%>
|
85
|
+
<%- if options.only_todo_types.any? -%>
|
86
|
+
<%- filtered_violations = filtered_violations.select { options.only_todo_types.include?(_1.type) } -%>
|
87
|
+
<%- end -%>
|
88
|
+
<%- violations_by_package = filtered_violations.group_by(&:to_package_name) -%>
|
85
89
|
<%- violations_by_package.keys.each do |violations_to_package| -%>
|
86
|
-
<%-
|
87
|
-
<%-
|
90
|
+
<%- todo_types = violations_by_package[violations_to_package].group_by(&:type) -%>
|
91
|
+
<%- todo_types.keys.each do |violation_type| -%>
|
88
92
|
<%- if show_edge.call(package.name, violations_to_package) -%>
|
89
93
|
"<%= package.name -%>" -> "<%= violations_to_package -%>"<%= violation_type == 'privacy' ? ':private' : '' -%> [ color=darkred style=dashed
|
90
94
|
constraint=false
|
@@ -100,7 +104,7 @@ digraph package_diagram {
|
|
100
104
|
<%- end -%>
|
101
105
|
<%-
|
102
106
|
max_edge_width = 10
|
103
|
-
edge_width = (
|
107
|
+
edge_width = (todo_types[violation_type].count / max_violation_count.to_f * max_edge_width).to_i
|
104
108
|
-%>
|
105
109
|
penwidth=<%= edge_width -%>
|
106
110
|
]
|
data/lib/options.rb
CHANGED
@@ -8,6 +8,7 @@ class Options < T::Struct
|
|
8
8
|
prop :show_layers, T::Boolean, default: true
|
9
9
|
prop :show_dependencies, T::Boolean, default: true
|
10
10
|
prop :show_todos, T::Boolean, default: true
|
11
|
+
prop :only_todo_types, T::Array[String], default: []
|
11
12
|
prop :show_privacy, T::Boolean, default: true
|
12
13
|
prop :show_teams, T::Boolean, default: true
|
13
14
|
|
data/lib/visualize_packs.rb
CHANGED
@@ -62,11 +62,12 @@ module VisualizePacks
|
|
62
62
|
options.show_layers ? nil : "hiding layers",
|
63
63
|
options.show_dependencies ? nil : "hiding dependencies",
|
64
64
|
options.show_todos ? nil : "hiding todos",
|
65
|
+
options.only_todo_types.empty? ? nil : "only #{limited_sentence(options.only_todo_types)} todos",
|
65
66
|
options.show_privacy ? nil : "hiding privacy",
|
66
67
|
options.show_teams ? nil : "hiding teams",
|
67
68
|
options.roll_nested_todos_into_top_level ? "hiding nested packs" : nil,
|
68
69
|
options.show_nested_relationships ? nil : "hiding nested relationships",
|
69
|
-
options.exclude_packs.empty? ? nil : "excluding pack#{options.exclude_packs.size > 1 ? 's' : ''}: #{
|
70
|
+
options.exclude_packs.empty? ? nil : "excluding pack#{options.exclude_packs.size > 1 ? 's' : ''}: #{limited_sentence(options.exclude_packs)}",
|
70
71
|
].compact.join(', ').strip
|
71
72
|
main_title = "#{app_name}: #{focus_info}#{skipped_info != '' ? ' - ' + skipped_info : ''}"
|
72
73
|
sub_title = ""
|
@@ -76,14 +77,11 @@ module VisualizePacks
|
|
76
77
|
"<<b>#{main_title}</b>#{sub_title}>"
|
77
78
|
end
|
78
79
|
|
79
|
-
def self.
|
80
|
-
|
81
|
-
|
82
|
-
exclude_packs.first
|
83
|
-
when 2
|
84
|
-
exclude_packs.join(" and ")
|
80
|
+
def self.limited_sentence(list)
|
81
|
+
if list.size <= 2
|
82
|
+
list.join(" and ")
|
85
83
|
else
|
86
|
-
"#{
|
84
|
+
"#{list[0, 2].join(", ")}, and #{list.size - 2} more"
|
87
85
|
end
|
88
86
|
end
|
89
87
|
|
@@ -120,11 +118,11 @@ module VisualizePacks
|
|
120
118
|
all_packages.each do |package|
|
121
119
|
violations_by_package = package.violations.group_by(&:to_package_name)
|
122
120
|
violations_by_package.keys.each do |violations_to_package|
|
123
|
-
|
124
|
-
|
121
|
+
todo_types = violations_by_package[violations_to_package].group_by(&:type)
|
122
|
+
todo_types.keys.each do |violation_type|
|
125
123
|
if show_edge.call(package.name, violations_to_package)
|
126
124
|
key = "#{package.name}->#{violations_to_package}:#{violation_type}"
|
127
|
-
violation_counts[key] =
|
125
|
+
violation_counts[key] = todo_types[violation_type].count
|
128
126
|
# violation_counts[key] += 1
|
129
127
|
end
|
130
128
|
end
|