courgette 0.3.0 → 0.4.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
  SHA1:
3
- metadata.gz: f615e4ef69593e21d1de8c8e0f5a1f4137777bd6
4
- data.tar.gz: 9972586e2328530973db1e9234d6fd6978a214e8
3
+ metadata.gz: 9543a488037562ed482f67d8854b97598ebdc75a
4
+ data.tar.gz: 60a7b5203affdcdc38a50aef87197659cde5d2ff
5
5
  SHA512:
6
- metadata.gz: 31414ebd38fb6d5a3328e0c4e46be2d6bdc7fd2b97b66beabcc7f081140c2fe2ea31ca489168cf538fee32e025f88d9a7268b08f46b3f1720c56b1b5314ca3c5
7
- data.tar.gz: 86c6a07660d04acffb78c4909b1a90fd67548f0952b7e0876b0a9de511608b3b144134ada8869de57b8f5992f287d68272709ac05b83ef21219cc205630b5890
6
+ metadata.gz: b7349b7c7037c3005ac85bb70f9be4e485466865e92e38911363ccb7b31d41308b31b09448fcc27dad01c6fb813a6f6481e75cb6a0c805b17d04820f45f15e70
7
+ data.tar.gz: 498be2f6041a00fbd12a9f066285817af1c3cdb09ff304b52e1db5651104a559df04aa69b5bee8e37d1e8bbf8c61ad8f3ff3fc46b85897d01bcb2b5f49ced924
@@ -31,7 +31,8 @@ command :graph do |c|
31
31
  c.example 'description', 'command example'
32
32
  c.option '--glob STRING', String, 'Glob to run metrics over (default: **/*.rb)'
33
33
  c.option '--name STRING', String, 'Glob to run metrics over (default: graph)'
34
- c.option '--format STRING', String, 'Format (default: png)'
34
+ c.option '--format STRING', String, 'Format (default: svg)'
35
+ c.option '--filter STRING', String, 'Comma-separated class names to filter'
35
36
  c.action do |args, options|
36
37
  options.default :glob => '**/*.rb', :format => 'svg', :name => 'graph'
37
38
 
@@ -9,7 +9,7 @@ module Courgette
9
9
  end
10
10
 
11
11
  def run
12
- factory.load graph
12
+ factory.load filtered_graph
13
13
 
14
14
  formats.each do |fmt|
15
15
  factory.save name, fmt
@@ -36,6 +36,18 @@ module Courgette
36
36
  end
37
37
  end
38
38
 
39
+ def filtered_graph
40
+ @filtered_graph ||= graph.filter filter_nodes
41
+ end
42
+
43
+ def filter_nodes
44
+ return nil if @options.filter.nil?
45
+
46
+ @options.filter.split(',').map do |root|
47
+ root.split("::").map(&:to_sym)
48
+ end
49
+ end
50
+
39
51
  def graph
40
52
  @graph ||= Courgette::DirectoryAnalyser.new.tap do |da|
41
53
  da.analyse glob
@@ -1,3 +1,5 @@
1
+ require 'set'
2
+
1
3
  module Courgette
2
4
  class Graph
3
5
  attr_reader :nodes, :edges
@@ -5,6 +7,8 @@ module Courgette
5
7
  def initialize nodes, edges
6
8
  @nodes = nodes
7
9
  @edges = edges
10
+
11
+ setup_graph
8
12
  end
9
13
 
10
14
  def dependency_count node
@@ -15,6 +19,39 @@ module Courgette
15
19
  edges.select { |r| r.reference == node }.count
16
20
  end
17
21
 
22
+ def filter roots
23
+ return self if roots.nil?
24
+
25
+ visited = Set.new
26
+
27
+ roots.each do |r|
28
+ dfs(r, visited)
29
+ end
30
+
31
+ filtered_edges = edges.select { |r| visited.include? r.referrer }
32
+
33
+ Graph.new visited.to_a, filtered_edges
34
+ end
35
+
36
+ attr_accessor :adjacency_list
37
+
18
38
  private
39
+ def dfs v, visited
40
+ return if visited.include? v
41
+
42
+ visited << v
43
+
44
+ adjacency_list[v].each do |w|
45
+ dfs(w, visited) unless visited.include? w
46
+ end
47
+ end
48
+
49
+ def setup_graph
50
+ self.adjacency_list = Hash.new { |h,k| h[k] = Set.new }
51
+
52
+ edges.each do |e|
53
+ self.adjacency_list[e.referrer] << e.reference
54
+ end
55
+ end
19
56
  end
20
57
  end
@@ -1,3 +1,3 @@
1
1
  module Courgette
2
- VERSION = "0.3.0"
2
+ VERSION = "0.4.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: courgette
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Hugo Peixoto
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-02-06 00:00:00.000000000 Z
11
+ date: 2015-07-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: parser
@@ -171,7 +171,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
171
171
  version: '0'
172
172
  requirements: []
173
173
  rubyforge_project:
174
- rubygems_version: 2.2.2
174
+ rubygems_version: 2.4.5
175
175
  signing_key:
176
176
  specification_version: 4
177
177
  summary: Courgette analyses a set of files, and calculates a dependency graph