pocky 1.6.0 → 1.9.2
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/README.md +26 -8
- data/lib/pocky/packwerk.rb +99 -30
- data/lib/pocky/tasks/generate.rake +4 -2
- data/lib/pocky/version.rb +1 -1
- data/pocky.gemspec +0 -1
- 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: 8ad303bcc76eff49ab35053c61a7ad277165d40b999fcadac1d310be525ab69b
|
4
|
+
data.tar.gz: 16e002a3989465994fa932da11696b166468da711336f354fae58ece194087c4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9bc982c815e4becd96436596522ea9adf543ec3830e04e812185a452a263ee8715572dd260d2b912d2fd7ffaa2f2866ab5d9445b3ea841fa6486a9fd4bc1880e
|
7
|
+
data.tar.gz: 82a64fb0e51915f78085510a3b1aa78ea1e9a9b48a2a163f29610b280e613e2cfccfb7fb9e1bd6ff59df7b053b8decbcfd389f73d4aa96b0b2785aab318cb692
|
data/README.md
CHANGED
@@ -6,14 +6,16 @@ Pocky generates dependency graphs for your packwerk packages. The gem is named a
|
|
6
6
|
|
7
7
|
## Usage
|
8
8
|
|
9
|
-
Invoke from irb or code
|
9
|
+
Invoke from irb or code, only `root_path` is required.
|
10
10
|
```ruby
|
11
11
|
Pocky::Packwerk.generate(
|
12
12
|
root_path: 'path/to/app/packages',
|
13
|
-
default_package: '
|
14
|
-
package_prefix: 'app/packages', # this is for matching package names listed in deprecated_references.yml
|
13
|
+
default_package: 'app', # The default package listed as "." in package.yml and deprecated_references.yml
|
15
14
|
filename: 'packwerk-viz.png', # Name of output file
|
16
|
-
dpi:
|
15
|
+
dpi: 100, # Output file resolution
|
16
|
+
package_color: 'darkgray', # color name or hex color, see https://graphviz.org/doc/info/colors.html for more details
|
17
|
+
deprecated_reference_edge: 'black',
|
18
|
+
dependency_edge: 'darkgreen',
|
17
19
|
)
|
18
20
|
```
|
19
21
|
|
@@ -21,11 +23,27 @@ Pocky::Packwerk.generate(
|
|
21
23
|
|
22
24
|
Note that the the bold edges indicate heavier dependencies.
|
23
25
|
|
24
|
-
Invoke as a rake task
|
26
|
+
Invoke as a rake task:
|
25
27
|
|
28
|
+
$ rake pocky:generate"[path/to/app/packages,Monolith,packages.png,100]"
|
29
|
+
|
30
|
+
|
31
|
+
#### `root_path` as an array
|
32
|
+
`root_path` can also be an array in case your packages are organized in multiple directories. Alternatively, you can also provide paths to individual packages to generate more focused graphs for your package subsystems.
|
33
|
+
|
34
|
+
```ruby
|
35
|
+
Pocky::Packwerk.generate(
|
36
|
+
root_path: [
|
37
|
+
'path/to/app/packages/a',
|
38
|
+
'path/to/app/packages/z',
|
39
|
+
]
|
40
|
+
)
|
26
41
|
```
|
27
|
-
|
28
|
-
|
42
|
+
|
43
|
+
Generate the same graph using the rake task:
|
44
|
+
|
45
|
+
$ rake pocky:generate"[path/to/app/packages/a path/to/app/packages/z]"
|
46
|
+
|
29
47
|
|
30
48
|
## Installation
|
31
49
|
|
@@ -51,7 +69,7 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
|
|
51
69
|
|
52
70
|
## Contributing
|
53
71
|
|
54
|
-
Bug reports and pull requests are welcome on GitHub at https://github.com/
|
72
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/mquan/pocky.
|
55
73
|
|
56
74
|
## License
|
57
75
|
|
data/lib/pocky/packwerk.rb
CHANGED
@@ -4,7 +4,12 @@ require 'yaml'
|
|
4
4
|
require 'ruby-graphviz'
|
5
5
|
|
6
6
|
module Pocky
|
7
|
+
class InvalidRootPathError < StandardError
|
8
|
+
end
|
9
|
+
|
7
10
|
class Packwerk
|
11
|
+
DEPENDENCIES_FILENAME = 'package.yml'
|
12
|
+
DEPRECATED_REFERENCES_FILENAME = 'deprecated_references.yml'
|
8
13
|
MAX_EDGE_WIDTH = 5
|
9
14
|
|
10
15
|
def self.generate(params)
|
@@ -14,44 +19,86 @@ module Pocky
|
|
14
19
|
private_class_method :new
|
15
20
|
def initialize(
|
16
21
|
root_path:,
|
17
|
-
default_package: '
|
18
|
-
package_prefix: '',
|
22
|
+
default_package: 'app',
|
19
23
|
filename: 'packwerk-viz.png',
|
20
|
-
dpi:
|
24
|
+
dpi: 100,
|
25
|
+
package_color: 'darkgray',
|
26
|
+
dependency_edge: 'green3',
|
27
|
+
deprecated_reference_edge: 'black'
|
21
28
|
)
|
22
|
-
@
|
29
|
+
@root_paths = [*root_path]
|
30
|
+
raise InvalidRootPathError, 'root_path is required' if @root_paths.empty?
|
31
|
+
|
23
32
|
@default_package = default_package
|
24
|
-
@package_prefix = package_prefix
|
25
33
|
@filename = filename
|
26
34
|
@dpi = dpi.to_i
|
27
35
|
@deprecated_references = {}
|
36
|
+
@package_dependencies = {}
|
28
37
|
@nodes = {}
|
38
|
+
|
39
|
+
@node_options = {
|
40
|
+
fontsize: 26.0,
|
41
|
+
fontcolor: 'white',
|
42
|
+
fillcolor: package_color,
|
43
|
+
color: package_color,
|
44
|
+
style: 'filled, rounded',
|
45
|
+
shape: 'box',
|
46
|
+
}
|
47
|
+
|
48
|
+
@deprecated_references_edge_options = {
|
49
|
+
color: deprecated_reference_edge,
|
50
|
+
}
|
51
|
+
|
52
|
+
@dependency_edge_options = {
|
53
|
+
color: dependency_edge
|
54
|
+
}
|
29
55
|
end
|
30
56
|
|
31
57
|
def generate
|
32
|
-
|
58
|
+
load_dependencies
|
59
|
+
load_deprecated_references
|
33
60
|
build_directed_graph
|
34
61
|
end
|
35
62
|
|
36
63
|
private
|
37
64
|
|
38
65
|
def build_directed_graph
|
39
|
-
graph = GraphViz.new(:G, type: :digraph, dpi: @dpi)
|
40
|
-
|
41
|
-
|
42
|
-
|
66
|
+
@graph = GraphViz.new(:G, type: :digraph, dpi: @dpi)
|
67
|
+
draw_dependencies
|
68
|
+
draw_deprecated_references
|
69
|
+
@graph.output(png: @filename)
|
70
|
+
end
|
71
|
+
|
72
|
+
def draw_dependencies
|
73
|
+
@package_dependencies.each do |package, file|
|
74
|
+
@nodes[package] ||= @graph.add_nodes(package, **@node_options)
|
75
|
+
file.each do |provider|
|
43
76
|
provider_package = package_name_for_dependency(provider)
|
44
|
-
@nodes[provider_package] ||= graph.add_nodes(provider_package)
|
77
|
+
@nodes[provider_package] ||= @graph.add_nodes(provider_package, **@node_options)
|
45
78
|
|
46
|
-
graph.add_edges(
|
47
|
-
@nodes[provider_package],
|
79
|
+
@graph.add_edges(
|
48
80
|
@nodes[package],
|
49
|
-
|
81
|
+
@nodes[provider_package],
|
82
|
+
**@dependency_edge_options
|
50
83
|
)
|
51
84
|
end
|
52
85
|
end
|
86
|
+
end
|
53
87
|
|
54
|
-
|
88
|
+
def draw_deprecated_references
|
89
|
+
@deprecated_references.each do |package, references|
|
90
|
+
@nodes[package] ||= @graph.add_nodes(package, **@node_options)
|
91
|
+
references.each do |provider, invocations|
|
92
|
+
provider_package = package_name_for_dependency(provider)
|
93
|
+
@nodes[provider_package] ||= @graph.add_nodes(provider_package, **@node_options)
|
94
|
+
|
95
|
+
@graph.add_edges(
|
96
|
+
@nodes[package],
|
97
|
+
@nodes[provider_package],
|
98
|
+
**@deprecated_references_edge_options.merge(penwidth: edge_width(invocations.length)),
|
99
|
+
)
|
100
|
+
end
|
101
|
+
end
|
55
102
|
end
|
56
103
|
|
57
104
|
def edge_width(count)
|
@@ -61,33 +108,55 @@ module Pocky
|
|
61
108
|
].min
|
62
109
|
end
|
63
110
|
|
64
|
-
def
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
111
|
+
def deprecated_references_files
|
112
|
+
@deprecated_references_files ||= @root_paths.flat_map do |path|
|
113
|
+
Dir["#{path}/**/#{DEPRECATED_REFERENCES_FILENAME}"]
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
def dependencies_files
|
118
|
+
@dependencies_files ||= @root_paths.flat_map do |path|
|
119
|
+
Dir["#{path}/**/#{DEPENDENCIES_FILENAME}"]
|
69
120
|
end
|
70
121
|
end
|
71
122
|
|
72
|
-
def
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
{}
|
123
|
+
def load_dependencies
|
124
|
+
return if dependencies_files.empty?
|
125
|
+
|
126
|
+
dependencies_files.each do |filename|
|
127
|
+
package = parse_package_name(filename)
|
128
|
+
@package_dependencies[package] ||= begin
|
129
|
+
yml = YAML.load_file(filename) || {}
|
130
|
+
yml['dependencies'] || []
|
79
131
|
end
|
80
132
|
end
|
81
133
|
end
|
82
134
|
|
83
|
-
def
|
84
|
-
|
135
|
+
def load_deprecated_references
|
136
|
+
return if deprecated_references_files.empty?
|
137
|
+
|
138
|
+
deprecated_references_files.each do |filename|
|
139
|
+
package = parse_package_name(filename)
|
140
|
+
@deprecated_references[package] ||= YAML.load_file(filename) || {}
|
141
|
+
end
|
142
|
+
end
|
143
|
+
|
144
|
+
def parse_package_name(filename)
|
145
|
+
File.basename(File.dirname(filename))
|
85
146
|
end
|
86
147
|
|
87
148
|
def package_name_for_dependency(name)
|
88
149
|
return @default_package if name == '.'
|
89
150
|
|
90
|
-
|
151
|
+
reference_filename = deprecated_references_files.find do |ref|
|
152
|
+
ref.match(/#{name}\/#{DEPRECATED_REFERENCES_FILENAME}$/)
|
153
|
+
end
|
154
|
+
|
155
|
+
if reference_filename
|
156
|
+
parse_package_name(reference_filename)
|
157
|
+
else
|
158
|
+
name
|
159
|
+
end
|
91
160
|
end
|
92
161
|
end
|
93
162
|
end
|
@@ -2,7 +2,9 @@ require 'pocky'
|
|
2
2
|
|
3
3
|
namespace :pocky do
|
4
4
|
desc 'Generate dependency graph for packwerk packages'
|
5
|
-
task :generate, [:root_path, :default_package, :
|
6
|
-
Pocky::Packwerk.generate(args
|
5
|
+
task :generate, [:root_path, :default_package, :filename, :dpi] do |_task, args|
|
6
|
+
Pocky::Packwerk.generate(args.merge(
|
7
|
+
root_path: arg[:root_path].split(/\s+/)
|
8
|
+
))
|
7
9
|
end
|
8
10
|
end
|
data/lib/pocky/version.rb
CHANGED
data/pocky.gemspec
CHANGED
@@ -14,7 +14,6 @@ Gem::Specification.new do |spec|
|
|
14
14
|
spec.license = "MIT"
|
15
15
|
spec.required_ruby_version = Gem::Requirement.new(">= 2.3.0")
|
16
16
|
|
17
|
-
|
18
17
|
spec.metadata["homepage_uri"] = spec.homepage
|
19
18
|
spec.metadata["source_code_uri"] = "https://github.com/mquan/pocky"
|
20
19
|
spec.metadata["changelog_uri"] = "https://github.com/mquan/pocky"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pocky
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.9.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Quan Nguyen
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-01-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ruby-graphviz
|