gem_dependencies_visualizer 0.1.4 → 0.1.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4cc2b18e190de1c3dd1613d5f8d1ebcff660363d
4
- data.tar.gz: 83bfb46b8efdf4d5776cbd8447b0907c5ed1628c
3
+ metadata.gz: cdb9a51b51a557ad4b43df551279a765d3bf9451
4
+ data.tar.gz: 781f4d337725ec8e109346e24fab39e2188c6692
5
5
  SHA512:
6
- metadata.gz: 3a6eb60801177a82f0773acd009280afbf254ce221073730b324f13660640b38c5fc6d7d1d436390b18e160cc6107f05bca5373d7b88885e11e90733e7e29532
7
- data.tar.gz: 386dea82e9795f51ccd1f321b8ffe3af37aca4c228509dc061fa9ab1f11a7a8e2e33151acda87d0d9c397bd73b3eae0f719ab4bd26a88d2caf8bdaa51176d490
6
+ metadata.gz: 0ba22599307500b44a3b515bebcfcc1a2a188ccd9f3311845a5abc7327175fe3baecdca9dc18ac722b22c1803356db4492245464f7fd87d11fdc95ca062ac559
7
+ data.tar.gz: 195fda093daf34168c430a74192c287d5c9a34282f7cfc828874dd112da6e3f7ac4ac7cb6ecc6226ae7c7d8617a2400593ad9c125aef53fd46a00f252d5b4916
data/CHANGELOG.md CHANGED
@@ -1,3 +1,9 @@
1
+ ## 0.1.5 (2016-09-07)
2
+
3
+ Features:
4
+ * Clients can now set the direction of the produced tree
5
+ * Read directly requested gems and the dependencies of those by parsing the Gemfile and the Gemfile.lock
6
+
1
7
  ## 0.1.4 (2016-09-05)
2
8
 
3
9
  Features:
data/README.md CHANGED
@@ -18,14 +18,24 @@ Or install it yourself as:
18
18
 
19
19
  ## Usage
20
20
 
21
- To produce a graph of your gem dependencies, pass the content of a Gemfile.lock as is as an input to the visualizer. You can (optionaly) pass a graph name you might want to give to the .png file to be produced.
21
+ To produce a graph of your gem dependencies, pass the content of a Gemfile.lock and, if available, the content of the Gemfile as is as an input to the visualizer. You can (optionaly) pass a graph name you might want to give to the .png file to be produced.
22
22
 
23
23
  To use it just run the following in your code:
24
24
 
25
25
  ```ruby
26
- GemDependenciesVisualizer.produce_gems_graph(gemfile_lock_string, graph_name)
26
+ GemDependenciesVisualizer.produce_gems_graph(gemfile_content, gemfile_lock_content, graph_name, options = {})
27
27
  ```
28
28
 
29
+ Available options you could use are:
30
+
31
+ * :graph_direction, which will set how your graph will be produced with options
32
+ ** top-bottom, for the graph to start on the top towards the bottom
33
+ ** bottom-top, for the graph to start on the bottom towards the top
34
+ ** right-left, for the graph to start on the left towards the right
35
+ ** anything else is set to default, which is left to right.
36
+ * :keep_gem_version, which will keep the versions set in the Gemfile.lock
37
+ * :specific_directory, which will mark the folder in which the graphs should be rendered. All graphs are always created inside gem_dependencies_graphs folder. Default namespace used is app/assets/images.
38
+
29
39
  For example by using the produced Gemfile.lock in this gem, we can get the following:
30
40
 
31
41
  ![Sample produced graph](https://raw.githubusercontent.com/arcanoid/gem_dependencies_visualizer/master/sample_images/graph_sample.png)
@@ -1,3 +1,3 @@
1
1
  module GemDependenciesVisualizer
2
- VERSION = "0.1.4"
2
+ VERSION = "0.1.5"
3
3
  end
@@ -1,12 +1,14 @@
1
1
  require "gem_dependencies_visualizer/version"
2
2
 
3
3
  module GemDependenciesVisualizer
4
- def self.produce_gems_graph(string_input, graph_name = nil, options = {})
5
- unless string_input.nil?
4
+ def self.produce_gems_graph(gem_file_content, gem_file_lock_content, graph_name = nil, options = {})
5
+ if gem_file_lock_content.nil?
6
+ puts 'Please insert both Gemfile and Gemfile.lock contents to proceed or just Gemfile.lock content.'
7
+ else
6
8
  g = GraphViz::new( :G, :type => :digraph )
7
- g[:rankdir] ='LR'
9
+ g[:rankdir] = rankdir(options)
8
10
 
9
- data = populate_gem_data string_input, options
11
+ data = populate_gem_data gem_file_content, gem_file_lock_content, options
10
12
  populate_gem_graph g, data, graph_name, options
11
13
  end
12
14
  end
@@ -15,8 +17,23 @@ module GemDependenciesVisualizer
15
17
  protected
16
18
  #########
17
19
 
18
- def self.populate_gem_data(gemfile_lock_content, options = {})
19
- string_array = gemfile_lock_content.gsub("\r\n", "\n").split("\n")
20
+ def self.rankdir(options = {})
21
+ case options[:graph_direction]
22
+ when 'top-bottom' then 'TB'
23
+ when 'bottom-top' then 'BT'
24
+ when 'right-left' then 'RL'
25
+ else 'LR'
26
+ end
27
+ end
28
+
29
+ def self.collect_gems_from_gemfile(gem_file_content, options = {})
30
+ unless gem_file_content.nil?
31
+ (gem_file_content.scan /.*gem ['"](\S*)['"]/).flatten.uniq.sort
32
+ end
33
+ end
34
+
35
+ def self.collect_gems_from_gemfile_lock(gem_file_lock_content, options = {})
36
+ string_array = gem_file_lock_content.gsub("\r\n", "\n").split("\n")
20
37
  gem_list_index = 0
21
38
  gem_list = {}
22
39
 
@@ -67,12 +84,28 @@ module GemDependenciesVisualizer
67
84
  gem_list
68
85
  end
69
86
 
87
+ def self.populate_gem_data(gem_file_content, gemfile_lock_content, options = {})
88
+ gem_dependencies = collect_gems_from_gemfile_lock gemfile_lock_content, options
89
+ gems = collect_gems_from_gemfile gem_file_content, options
90
+
91
+ {
92
+ :gems => gems,
93
+ :gem_dependencies => gem_dependencies
94
+ }
95
+ end
96
+
70
97
  def self.populate_gem_graph(graph, data, graph_name = nil, options = {})
71
- default_node = graph.add_nodes('Default', :label => "<<b>Default</b>>", :color => 'dodgerblue3')
98
+ unless data[:gems].empty?
99
+ default_node = graph.add_nodes('Default', :label => "<<b>Default</b>>", :color => 'dodgerblue3')
100
+
101
+ data[:gems].each do |gem|
102
+ new_node = graph.add_nodes(gem, :shape => :msquare, :color => 'firebrick3')
103
+ graph.add_edges(default_node, new_node, :color => 'dodgerblue3')
104
+ end
105
+ end
72
106
 
73
- data.each do |dependency_item|
107
+ data[:gem_dependencies].sort_by { |dependency_item| dependency_item[0] }.each do |dependency_item|
74
108
  graph_parent_node = graph.add_nodes(dependency_item[0], :shape => :msquare, :color => 'firebrick3')
75
- graph.add_edges(default_node, graph_parent_node, :color => 'dodgerblue3')
76
109
 
77
110
  dependency_item[1].each do |child_gem|
78
111
  graph_child_node = graph.add_nodes(child_gem, :shape => :msquare)
@@ -103,4 +136,7 @@ module GemDependenciesVisualizer
103
136
  private_class_method :populate_gem_graph
104
137
  private_class_method :populate_gem_data
105
138
  private_class_method :clear_gem_name_from_version
139
+ private_class_method :rankdir
140
+ private_class_method :collect_gems_from_gemfile
141
+ private_class_method :collect_gems_from_gemfile_lock
106
142
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gem_dependencies_visualizer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.1.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vasilis Kalligas
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-10-05 00:00:00.000000000 Z
11
+ date: 2016-10-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler