visualize_packs 0.5.11 → 0.5.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1c97e3f2997e104fa0359775892adfb5e8cc40d22a85d886bf0f8a1d608398a8
4
- data.tar.gz: 7b933103509243b81126bc29cd193daf9536a46860d36ad40f1d988df29d77b3
3
+ metadata.gz: 8017d316d5d179efe32200f2152bb0abb1c8a3b3299ba8f777a604c07165660e
4
+ data.tar.gz: 5f306bd08bdc5cb70eee69ea23a9233ba03ad8d13bd7c6c75c92a39a18f3f1f6
5
5
  SHA512:
6
- metadata.gz: 0e0c1ca8ea26ee9cbd57b3e4066960868ea9362de4bae5fad1517481376ba8f3dd476ff8ad1f43c186d9b9c9d291a7332c203b877e37d5e9d6e07f4277d70899
7
- data.tar.gz: 632e641dc9e1c45dd744bf9d09bff3cc9723138bc8eb27c1d6771afdc51ad3aef2de988801420b64a1c7f27155fb530fcbfe66cd3c4c65e7eb3b4c6de5e220e6
6
+ metadata.gz: e9c0773394b6f17466e75e00c825dfcca7a1d359922988b257a08e59fb1ce76e2c373cfe968783d87f3ec8da5b9f500d53d64dcfc74946a3ac804376e22bdeb3
7
+ data.tar.gz: aff8ae19a21ca89a91331c2c2679fc64e15c5151e5f59a72a7dc35b7d5df72680e0627d6462ec6b5cc519098263210c60994445a563fc6aa95149be7a4d4c684
data/README.md CHANGED
@@ -48,3 +48,5 @@ Once you are ready, run the following and commit the new `diagram_examples.png`
48
48
  ```
49
49
  ./spec/update_cassettes.sh
50
50
  ```
51
+
52
+ Please check in a new `diagram_examples.png` only if there are actual visual changes.
data/bin/visualize_packs CHANGED
@@ -33,8 +33,8 @@ OptionParser.new do |opt|
33
33
  opt.on('--no-teams', "Don't show team colors") { |o| options.show_teams = false }
34
34
 
35
35
  opt.on('--focus-folder=FOLDER', "Draw package diagram only for packages in FOLDER. Matches with 'include' for partial matches") { |o| options.focus_folder = o.empty? ? nil : o }
36
- opt.on('--focus-pack=pack1,pack2', "Focus on a specific package(s). Wildcards support: 'packs/*'") { |o| options.focus_package = o.to_s.split(",") }
37
- opt.on('--only-edges-to-focus', "If focus is set, this shows only the edges to/from the focus node instead of all edges in the focussed graph. This only has effect when --focus-on is set.") { |o| options.show_only_edges_to_focus_package = true }
36
+ opt.on('--focus-pack=pack1,pack2', "Focus on a specific package(s). Wildcards support: 'packs/*'") { |o| options.focus_pack = o.to_s.split(",") }
37
+ opt.on('--only-edges-to-focus=[in,out,inout]', "If focus-pack is set, this shows only the edges into / out of / in and out of the focus node instead of all edges in the focussed graph.") { |o| options.show_only_edges_to_focus_pack = FocusPackEdgeDirection.deserialize(o) }
38
38
 
39
39
  opt.on('--roll-nested-into-parent-packs', "Don't show nested packages (not counting root). Connect edges to top-level package instead") { |o| options.roll_nested_into_parent_packs = true }
40
40
  opt.on('--no-nested-relationships', "Don't draw relationships between parents and nested packs") { |o| options.show_nested_relationships = false }
data/lib/graph.dot.erb CHANGED
@@ -33,7 +33,7 @@ digraph package_diagram {
33
33
  <%- end -%>
34
34
  <%- grouped_packages[layer_name].each do |package| -%>
35
35
  "<%= package.name -%>" [
36
- fontsize=<%= options.focus_package.any? && options.focus_package.any? {|p| File.fnmatch(p, package.name)} ? 18.0 : 12.0 -%>
36
+ fontsize=<%= options.focus_pack.any? && options.focus_pack.any? {|p| File.fnmatch(p, package.name)} ? 18.0 : 12.0 -%>
37
37
  <%- if options.remote_base_url %>
38
38
  URL="<%= options.remote_base_url %>/<%= package.name == '.' ? '' : package.name -%>"
39
39
  <%- end %>
data/lib/options.rb CHANGED
@@ -1,6 +1,14 @@
1
1
  # frozen_string_literal: true
2
2
  # typed: strict
3
3
 
4
+ class FocusPackEdgeDirection < T::Enum
5
+ enums do
6
+ In = new
7
+ Out = new
8
+ InOut = new
9
+ end
10
+ end
11
+
4
12
  class Options < T::Struct
5
13
  extend T::Sig
6
14
 
@@ -12,11 +20,11 @@ class Options < T::Struct
12
20
  prop :show_privacy, T::Boolean, default: true
13
21
  prop :show_teams, T::Boolean, default: true
14
22
 
15
- prop :focus_package, T::Array[String], default: []
16
- prop :show_only_edges_to_focus_package, T::Boolean, default: false
23
+ prop :focus_folder, T.nilable(String)
24
+ prop :focus_pack, T::Array[String], default: []
25
+ prop :show_only_edges_to_focus_pack, T.nilable(FocusPackEdgeDirection), default: nil
17
26
 
18
27
  prop :roll_nested_into_parent_packs, T::Boolean, default: false
19
- prop :focus_folder, T.nilable(String)
20
28
  prop :show_nested_relationships, T::Boolean, default: true
21
29
 
22
30
  prop :exclude_packs, T::Array[String], default: []
@@ -56,8 +56,8 @@ module VisualizePacks
56
56
  sig { params(options: Options, max_todo_count: T.nilable(Integer)).returns(String) }
57
57
  def self.diagram_title(options, max_todo_count)
58
58
  app_name = File.basename(Dir.pwd)
59
- focus_edge_info = options.focus_package.any? && options.show_only_edges_to_focus_package ? "showing only edges to/from focus pack" : "showing all edges between visible packs"
60
- focus_info = options.focus_package.any? || options.focus_folder ? "Focus on #{[limited_sentence(options.focus_package), options.focus_folder].compact.join(' and ')} (#{focus_edge_info})" : "All packs"
59
+ focus_edge_info = options.focus_pack.any? && options.show_only_edges_to_focus_pack ? "showing only edges to/from focus pack" : "showing all edges between visible packs"
60
+ focus_info = options.focus_pack.any? || options.focus_folder ? "Focus on #{[limited_sentence(options.focus_pack), options.focus_folder].compact.join(' and ')} (#{focus_edge_info})" : "All packs"
61
61
  skipped_info =
62
62
  [
63
63
  options.show_legend ? nil : "hiding legend",
@@ -95,17 +95,23 @@ module VisualizePacks
95
95
  def self.show_edge_builder(options, all_package_names)
96
96
  return lambda do |start_node, end_node|
97
97
  (
98
- !options.show_only_edges_to_focus_package &&
98
+ !options.show_only_edges_to_focus_pack &&
99
99
  all_package_names.include?(start_node) &&
100
100
  all_package_names.include?(end_node)
101
101
  ) ||
102
102
  (
103
- options.show_only_edges_to_focus_package &&
103
+ options.show_only_edges_to_focus_pack &&
104
104
  all_package_names.include?(start_node) &&
105
105
  all_package_names.include?(end_node) &&
106
106
  (
107
- match_packs?(start_node, options.focus_package) ||
108
- match_packs?(end_node, options.focus_package)
107
+ case options.show_only_edges_to_focus_pack
108
+ when FocusPackEdgeDirection::InOut then
109
+ match_packs?(start_node, options.focus_pack) || match_packs?(end_node, options.focus_pack)
110
+ when FocusPackEdgeDirection::In then
111
+ match_packs?(end_node, options.focus_pack)
112
+ when FocusPackEdgeDirection::Out then
113
+ match_packs?(start_node, options.focus_pack)
114
+ end
109
115
  )
110
116
  )
111
117
  end
@@ -164,12 +170,12 @@ module VisualizePacks
164
170
 
165
171
  sig { params(packages: T::Array[ParsePackwerk::Package], options: Options).returns(T::Array[ParsePackwerk::Package]) }
166
172
  def self.filtered(packages, options)
167
- focus_package = options.focus_package
173
+ focus_pack = options.focus_pack
168
174
  focus_folder = options.focus_folder
169
175
  include_packs = options.include_packs
170
176
  exclude_packs = options.exclude_packs
171
177
 
172
- return packages unless focus_package.any? || focus_folder || include_packs || exclude_packs.any?
178
+ return packages unless focus_pack.any? || focus_folder || include_packs || exclude_packs.any?
173
179
 
174
180
  nested_packages = all_nested_packages(packages.map { |p| p.name })
175
181
 
@@ -181,12 +187,12 @@ module VisualizePacks
181
187
  result = T.let([], T::Array[T.nilable(String)])
182
188
  result = packages.map { |pack| pack.name }
183
189
 
184
- if !focus_package.empty?
190
+ if !focus_pack.empty?
185
191
  result = []
186
- result += packages.map { |pack| pack.name }.select { |p| match_packs?(p, focus_package) }
187
- result += packages.select{ |p| p.dependencies.any? { |d| match_packs?(d, focus_package) }}.map { |pack| pack.name }
188
- result += packages.select{ |p| p.violations&.map(&:to_package_name)&.any? { |v| match_packs?(v, focus_package) }}.map { |pack| pack.name }
189
- packages.map { |pack| pack.name }.select { |p| match_packs?(p, focus_package) }.each do |p|
192
+ result += packages.map { |pack| pack.name }.select { |p| match_packs?(p, focus_pack) }
193
+ result += packages.select{ |p| p.dependencies.any? { |d| match_packs?(d, focus_pack) }}.map { |pack| pack.name }
194
+ result += packages.select{ |p| p.violations&.map(&:to_package_name)&.any? { |v| match_packs?(v, focus_pack) }}.map { |pack| pack.name }
195
+ packages.map { |pack| pack.name }.select { |p| match_packs?(p, focus_pack) }.each do |p|
190
196
  result += packages_by_name[p].dependencies
191
197
  result += packages_by_name[p].violations.map(&:to_package_name)
192
198
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: visualize_packs
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.11
4
+ version: 0.5.12
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gusto Engineers
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-09-01 00:00:00.000000000 Z
11
+ date: 2023-09-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler