pocky 1.4.0 → 1.9.0

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: 1bd1bd4dd6b8693596464cce4a18d69e015acb74d0534bf80c0f4861dbcb3487
4
- data.tar.gz: b04b473ba73db68dcdd62ba9e76bf8ef25d2febba6ffe9cc11d1d90946f74243
3
+ metadata.gz: a33d7a33b47a8ec7b5763188f1670934db2b63df6e16409371ec10456a06ff98
4
+ data.tar.gz: afe4ed9619ec1d6843fb23a92fde8ef89349650fec21abc2e584cccdd7ba9096
5
5
  SHA512:
6
- metadata.gz: b572f0aeb26942d289a15ac2d066bcdaa2908810f3cc729725f212c41598dabb33690b72da3e3deb35b7945e668d70ddccca498f00043abc25ac5a36252949cb
7
- data.tar.gz: 29c7d372e528161abc4e3c833521860a89a4411fd2f5cb35f294df150b0c697256b38dd8ca34009be21250467b14a1600bda76fa556e0fa2bdd2d96bf8701571
6
+ metadata.gz: 2469169116f8afcebfd1fd41e05b6a74526c37e4abcdd78b94feae73867773fcc277192a6e8ea89ac57f35ce4608d9ec657e4b7309e59875bd11b0eb40b6bfa3
7
+ data.tar.gz: 6ef340611027d6ffea6044c1f03576d5b78ea1b70b2d852a9a1784c99d66d644abd07c4c71ccf58f9edeb98b7dbe42c3cb7eb2867afcc5fdf1a0ed60b692ded2
data/README.md CHANGED
@@ -6,14 +6,13 @@ 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: 'Default', # The default package listed as "." in deprecated_references.yml
14
- package_prefix: 'app/packages', # this is for matching package names listed in deprecated_references.yml
13
+ default_package: 'Default', # The default package listed as "." in deprecated_references.yml
15
14
  filename: 'packwerk-viz.png', # Name of output file
16
- dpi: 150 # Output file resolution
15
+ dpi: 150 # Output file resolution
17
16
  )
18
17
  ```
19
18
 
@@ -21,11 +20,27 @@ Pocky::Packwerk.generate(
21
20
 
22
21
  Note that the the bold edges indicate heavier dependencies.
23
22
 
24
- Invoke as a rake task
23
+ Invoke as a rake task:
25
24
 
25
+ $ rake pocky:generate"[path/to/app/packages,Monolith,packages.png,100]"
26
+
27
+
28
+ #### `root_path` as an array
29
+ `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.
30
+
31
+ ```ruby
32
+ Pocky::Packwerk.generate(
33
+ root_path: [
34
+ 'path/to/app/packages/a',
35
+ 'path/to/app/packages/z',
36
+ ]
37
+ )
26
38
  ```
27
- rake pocky:generate[path/to/app/packages,Default,app/packages,packwerk-viz.png,150]
28
- ```
39
+
40
+ Generate the same graph using the rake task:
41
+
42
+ $ rake pocky:generate"[path/to/app/packages/a path/to/app/packages/z]"
43
+
29
44
 
30
45
  ## Installation
31
46
 
@@ -51,7 +66,7 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
51
66
 
52
67
  ## Contributing
53
68
 
54
- Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/pocky.
69
+ Bug reports and pull requests are welcome on GitHub at https://github.com/mquan/pocky.
55
70
 
56
71
  ## License
57
72
 
File without changes
@@ -4,7 +4,11 @@ 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
+ REFERENCE_FILE_NAME = 'deprecated_references.yml'
8
12
  MAX_EDGE_WIDTH = 5
9
13
 
10
14
  def self.generate(params)
@@ -15,28 +19,28 @@ module Pocky
15
19
  def initialize(
16
20
  root_path:,
17
21
  default_package: 'Default',
18
- package_prefix: '',
19
22
  filename: 'packwerk-viz.png',
20
23
  dpi: 150
21
24
  )
22
- @root_path = root_path
25
+ @root_paths = [*root_path]
26
+ raise InvalidRootPathError, 'root_path is required' if @root_paths.empty?
27
+
23
28
  @default_package = default_package
24
- @package_prefix = package_prefix
25
- @output_filename = output_filename
26
- @output_dpi = output_dpi.to_i
29
+ @filename = filename
30
+ @dpi = dpi.to_i
27
31
  @deprecated_references = {}
28
32
  @nodes = {}
29
33
  end
30
34
 
31
35
  def generate
32
- load_package_dependencies
36
+ load_package_references
33
37
  build_directed_graph
34
38
  end
35
39
 
36
40
  private
37
41
 
38
42
  def build_directed_graph
39
- graph = GraphViz.new(:G, type: :digraph, dpi: @output_dpi)
43
+ graph = GraphViz.new(:G, type: :digraph, dpi: @dpi)
40
44
  @deprecated_references.each do |package, references|
41
45
  @nodes[package] ||= graph.add_nodes(package)
42
46
  references.each do |provider, dependencies|
@@ -44,14 +48,14 @@ module Pocky
44
48
  @nodes[provider_package] ||= graph.add_nodes(provider_package)
45
49
 
46
50
  graph.add_edges(
47
- @nodes[provider_package],
48
51
  @nodes[package],
52
+ @nodes[provider_package],
49
53
  penwidth: edge_width(dependencies.length)
50
54
  )
51
55
  end
52
56
  end
53
57
 
54
- graph.output(png: @output_filename)
58
+ graph.output(png: @filename)
55
59
  end
56
60
 
57
61
  def edge_width(count)
@@ -61,33 +65,39 @@ module Pocky
61
65
  ].min
62
66
  end
63
67
 
64
- def load_package_dependencies
65
- Dir.each_child(@root_path) do |elem|
66
- if Dir.exist?(File.join(@root_path, elem))
67
- load_deprecated_references_for_package(elem)
68
- end
68
+ def package_references
69
+ @package_references ||= @root_paths.flat_map do |path|
70
+ Dir["#{path}/**/#{REFERENCE_FILE_NAME}"]
69
71
  end
70
72
  end
71
73
 
72
- def load_deprecated_references_for_package(package)
73
- @deprecated_references[package] ||= begin
74
- filename = deprecated_references_file_for(package)
75
- if File.exist?(filename)
76
- YAML.load_file(filename) || {}
77
- else
78
- {}
79
- end
74
+ def load_package_references
75
+ if package_references.empty?
76
+ raise InvalidRootPathError, "Cannot find any #{REFERENCE_FILE_NAME} in provided root_path"
77
+ end
78
+
79
+ package_references.each do |filename|
80
+ package = parse_package_name(filename)
81
+ @deprecated_references[package] ||= YAML.load_file(filename) || {}
80
82
  end
81
83
  end
82
84
 
83
- def deprecated_references_file_for(package)
84
- File.join(@root_path, package, 'deprecated_references.yml')
85
+ def parse_package_name(filename)
86
+ File.basename(File.dirname(filename))
85
87
  end
86
88
 
87
89
  def package_name_for_dependency(name)
88
90
  return @default_package if name == '.'
89
91
 
90
- name.gsub(@package_prefix, '').gsub(/^\//, '')
92
+ reference_filename = package_references.find do |ref|
93
+ ref.match(/#{name}\/#{REFERENCE_FILE_NAME}$/)
94
+ end
95
+
96
+ if reference_filename
97
+ parse_package_name(reference_filename)
98
+ else
99
+ name
100
+ end
91
101
  end
92
102
  end
93
103
  end
File without changes
@@ -0,0 +1,10 @@
1
+ require 'pocky'
2
+
3
+ namespace :pocky do
4
+ desc 'Generate dependency graph for packwerk packages'
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
+ ))
9
+ end
10
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Pocky
4
- VERSION = "1.4.0"
4
+ VERSION = "1.9.0"
5
5
  end
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.0
4
+ version: 1.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Quan Nguyen
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-12-29 00:00:00.000000000 Z
11
+ date: 2021-01-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ruby-graphviz
@@ -40,12 +40,12 @@ files:
40
40
  - Rakefile
41
41
  - bin/console
42
42
  - bin/setup
43
- - lib/Rakefile
44
43
  - lib/pocky.rb
44
+ - lib/pocky/Rakefile
45
45
  - lib/pocky/packwerk.rb
46
+ - lib/pocky/railtie.rb
47
+ - lib/pocky/tasks/generate.rake
46
48
  - lib/pocky/version.rb
47
- - lib/railtie.rb
48
- - lib/tasks/generate.rake
49
49
  - pocky.gemspec
50
50
  homepage: https://github.com/mquan/pocky
51
51
  licenses:
@@ -1,8 +0,0 @@
1
- require 'pocky'
2
-
3
- namespace :pocky do
4
- desc 'Generate dependency graph for packwerk packages'
5
- task :generate, [:root_path, :default_package, :package_prefix, :filename, :dpi]: :environment do |_task, args|
6
- Pocky::Packwerk.generate(args)
7
- end
8
- end