courgette 0.3.0 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
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