rubrowser 2.0.0 → 2.1.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
- SHA1:
3
- metadata.gz: 37e83a67859f66506295f0fdff3237407c2c9a6d
4
- data.tar.gz: 2ab42f6e3208468743ad5722f130accf2849d101
2
+ SHA256:
3
+ metadata.gz: a3f34361f8481fafacdbb4bda6020e92cc031e9e934e934935e36970164dd9f7
4
+ data.tar.gz: 5e8899befc1456be7326215551b081a061bd9156f754d409c64484bf6797113e
5
5
  SHA512:
6
- metadata.gz: 2e47b9d43b0e0a71a6a58b678960c6d72b869503e1efddc4221f1ff015631f15883f35e0a76b17c2aa72f7889e730d13339c133791071909e9f2bae3cb4909ef
7
- data.tar.gz: eed29f968098beebbe11e6abfd8987be1f2c162d5bda4ab5d389f157895ed6d22dfe52461a6f9d7e1f161e95efd0aef8f7a3adb076542b5f066734084570174c
6
+ metadata.gz: 2df8b115f261a7bc09bfa296aeeb3b2db77f7f6e6e0bbd00673de377bb473c29e7c95458e42d02b4406a41262c114d3591e21fad96f5103676001989ef09551c
7
+ data.tar.gz: 752c00be5fb7b1b079895946de617967b2232d6a7f2ea830e118a2076b52d624f545bd6ddc91ebe93e884c536e30e8d1381b4e213fe0dc4b0f7b3e0bcb73d352
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- rubrowser (2.0.0)
4
+ rubrowser (2.1.0)
5
5
  parser (~> 2.3, >= 2.3.0)
6
6
 
7
7
  GEM
@@ -52,4 +52,4 @@ DEPENDENCIES
52
52
  rubrowser!
53
53
 
54
54
  BUNDLED WITH
55
- 1.15.2
55
+ 1.16.1
data/bin/rubrowser CHANGED
@@ -6,12 +6,16 @@ require 'rubrowser'
6
6
  require 'rubrowser/renderer'
7
7
 
8
8
  options = {
9
- files: ARGV.empty? ? ['.'] : ARGV
9
+ toolbox: true
10
10
  }
11
11
 
12
12
  OptionParser.new do |opts|
13
13
  opts.banner = "Usage: #{__FILE__} [options] [file] ..."
14
14
 
15
+ opts.on('-T', '--no-toolbox', 'Don\'t display toolbox on the page') do
16
+ options[:toolbox] = false
17
+ end
18
+
15
19
  opts.on('-v', '--version', 'Print Rubrowser version') do
16
20
  puts "Rubrowser #{Rubrowser::VERSION}"
17
21
  exit
@@ -23,4 +27,6 @@ OptionParser.new do |opts|
23
27
  end
24
28
  end.parse!
25
29
 
30
+ options[:files] = ARGV.empty? ? ['.'] : ARGV
31
+
26
32
  puts Rubrowser::Renderer.call(options)
@@ -6,6 +6,7 @@ module Rubrowser
6
6
  class Renderer
7
7
  # Accepted options are:
8
8
  # files: list of file paths to parse
9
+ # toolbox: bool, show/hide toolbox
9
10
  def self.call(options = {})
10
11
  new(options).call
11
12
  end
@@ -22,6 +23,11 @@ module Rubrowser
22
23
 
23
24
  def initialize(options)
24
25
  @files = options[:files]
26
+ @toolbox = options[:toolbox]
27
+ end
28
+
29
+ def toolbox?
30
+ @toolbox
25
31
  end
26
32
 
27
33
  def data
@@ -1,3 +1,3 @@
1
1
  module Rubrowser
2
- VERSION = '2.0.0'.freeze
2
+ VERSION = '2.1.0'.freeze
3
3
  end
@@ -2,169 +2,164 @@ var classForCircular = function(d) {
2
2
  return d.circular ? 'circular' : '';
3
3
  };
4
4
 
5
- var parseGraph = function(data){
6
- var svg = d3.select(".dependency_graph svg"),
7
- $svg = $('.dependency_graph svg'),
8
- width = $svg.width(),
9
- height = $svg.height(),
10
- drag = d3.drag()
11
- .on("start", dragstarted)
12
- .on("drag", dragged)
13
- .on("end", dragended),
14
- dup_definitions = data.definitions.map(function(d){ return {id: d.namespace, type: d.type, lines: d.lines, circular: d.circular }; }),
15
- definitions = _(dup_definitions).groupBy('id').map(function(group) {
16
- return {
17
- id: group[0].id,
18
- type: group[0].type,
19
- lines: _(group).sumBy('lines'),
20
- circular: group[0].circular
21
- };
22
- }).value(),
23
- namespaces = definitions.map(function(d){ return d.id; }),
24
- relations = data.relations.map(function(d){ return {source: d.caller, target: d.resolved_namespace, circular: d.circular}; }),
25
- max_lines = _.maxBy(definitions, 'lines').lines,
26
- max_circle_r = 50;
27
-
28
- relations = relations.filter(function(d){
29
- return namespaces.indexOf(d.source) >= 0 && namespaces.indexOf(d.target) >= 0;
30
- });
31
- relations = _.uniqWith(relations, _.isEqual);
32
-
33
- var zoom = d3.zoom()
34
- .on("zoom", function () {
35
- container.attr("transform", d3.event.transform);
36
- });
37
-
38
- svg.call(zoom)
39
- .on("dblclick.zoom", null);
40
-
41
- var container = svg.append('g'),
42
- simulation = d3.forceSimulation()
43
- .force("link", d3.forceLink().id(function(d) { return d.id; }))
44
- .force("charge", d3.forceManyBody())
45
- .force("center", d3.forceCenter(width / 2, height / 2))
46
- .force("forceCollide", d3.forceCollide(80));
47
-
48
- simulation
49
- .nodes(definitions)
50
- .on("tick", ticked);
51
-
52
- simulation.force("link")
53
- .links(relations);
54
-
55
- var link = container.append("g")
56
- .attr("class", "links")
57
- .selectAll("path")
58
- .data(relations)
59
- .enter().append("path")
60
- .attr("class", function(d) { return 'link ' + classForCircular(d); })
61
- .attr("marker-end", function(d){ return "url(#" + d.target.id + ")"; }),
62
- node = container.append("g")
63
- .attr("class", "nodes")
64
- .selectAll("g")
65
- .data(definitions)
66
- .enter().append("g")
67
- .call(drag)
68
- .on("dblclick", dblclick),
69
- circle = node
70
- .append("circle")
71
- .attr("r", function(d) { return d.lines / max_lines * max_circle_r + 6; })
72
- .attr("class", function (d) { return classForCircular(d) ; }),
73
- type = node
74
- .append("text")
75
- .attr("class", "type")
76
- .attr("x", "-0.4em")
77
- .attr("y", "0.4em")
78
- .text(function(d) { return d.type[0]; }),
79
- text = node
80
- .append("text")
81
- .attr("class", "namespace")
82
- .attr("x", function(d) { return d.lines / max_lines * max_circle_r + 8; })
83
- .attr("y", ".31em")
84
- .text(function(d) { return d.id; });
85
-
86
- container.append("defs").selectAll("marker")
87
- .data(definitions)
88
- .enter().append("marker")
89
- .attr("id", function(d) { return d.id; })
90
- .attr("viewBox", "0 -5 10 10")
91
- .attr("refX", function(d){ return d.lines / max_lines * max_circle_r + 20; })
92
- .attr("refY", 0)
93
- .attr("markerWidth", 6)
94
- .attr("markerHeight", 6)
95
- .attr("orient", "auto")
96
- .append("path")
97
- .attr("d", "M0,-5L10,0L0,5");
98
-
99
- function ticked() {
100
- link.attr("d", linkArc);
101
- node.attr("transform", transform);
102
- }
103
-
104
- function linkArc(d) {
105
- var dx = d.target.x - d.source.x,
106
- dy = d.target.y - d.source.y,
107
- dr = 0;
108
- return "M" + d.source.x + "," + d.source.y + "A" + dr + "," + dr + " 0 0,1 " + d.target.x + "," + d.target.y;
109
- }
110
-
111
- function dragstarted(d) {
112
- if (!d3.event.active) simulation.alphaTarget(0.3).restart();
113
- d3.select(this).classed("fixed", true);
114
- d.fx = d.x;
115
- d.fy = d.y;
116
- }
117
-
118
- function dragged(d) {
119
- d.fx = d3.event.x;
120
- d.fy = d3.event.y;
121
- }
122
-
123
- function dragended(d) {
124
- if (!d3.event.active) simulation.alphaTarget(0);
125
- }
126
-
127
- function dblclick(d) {
128
- d3.select(this).classed("fixed", false);
129
- d.fx = null;
130
- d.fy = null;
131
- }
132
-
133
- function transform(d) {
134
- return "translate(" + d.x + "," + d.y + ")";
135
- }
136
-
137
-
138
- node.on('mouseover', function(d) {
139
- var relatives = [];
140
- link.classed('downlighted', function(l) {
141
- if (d === l.source || d === l.target){
142
- relatives.push(l.source);
143
- relatives.push(l.target);
144
- return false;
145
- }else{
146
- return true;
147
- }
5
+ var svg = d3.select(".dependency_graph svg"),
6
+ $svg = $('.dependency_graph svg'),
7
+ width = $svg.width(),
8
+ height = $svg.height(),
9
+ drag = d3.drag()
10
+ .on("start", dragstarted)
11
+ .on("drag", dragged)
12
+ .on("end", dragended),
13
+ dup_definitions = data.definitions.map(function(d){ return {id: d.namespace, type: d.type, lines: d.lines, circular: d.circular }; }),
14
+ definitions = _(dup_definitions).groupBy('id').map(function(group) {
15
+ return {
16
+ id: group[0].id,
17
+ type: group[0].type,
18
+ lines: _(group).sumBy('lines'),
19
+ circular: group[0].circular
20
+ };
21
+ }).value(),
22
+ namespaces = definitions.map(function(d){ return d.id; }),
23
+ relations = data.relations.map(function(d){ return {source: d.caller, target: d.resolved_namespace, circular: d.circular}; }),
24
+ max_lines = _.maxBy(definitions, 'lines').lines,
25
+ max_circle_r = 50;
26
+
27
+ relations = relations.filter(function(d){
28
+ return namespaces.indexOf(d.source) >= 0 && namespaces.indexOf(d.target) >= 0;
29
+ });
30
+ relations = _.uniqWith(relations, _.isEqual);
31
+
32
+ var zoom = d3.zoom()
33
+ .on("zoom", function () {
34
+ container.attr("transform", d3.event.transform);
148
35
  });
149
- node.classed('downlighted', function(n) {
150
- return !(n == d || relatives.indexOf(n) > -1);
151
- });
152
- });
153
36
 
154
- node.on('mouseout', function() {
155
- link.classed('downlighted', false);
156
- node.classed('downlighted', false);
37
+ svg.call(zoom)
38
+ .on("dblclick.zoom", null);
39
+
40
+ var container = svg.append('g'),
41
+ simulation = d3.forceSimulation()
42
+ .force("link", d3.forceLink().id(function(d) { return d.id; }))
43
+ .force("charge", d3.forceManyBody())
44
+ .force("center", d3.forceCenter(width / 2, height / 2))
45
+ .force("forceCollide", d3.forceCollide(80));
46
+
47
+ simulation
48
+ .nodes(definitions)
49
+ .on("tick", ticked);
50
+
51
+ simulation.force("link")
52
+ .links(relations);
53
+
54
+ var link = container.append("g")
55
+ .attr("class", "links")
56
+ .selectAll("path")
57
+ .data(relations)
58
+ .enter().append("path")
59
+ .attr("class", function(d) { return 'link ' + classForCircular(d); })
60
+ .attr("marker-end", function(d){ return "url(#" + d.target.id + ")"; }),
61
+ node = container.append("g")
62
+ .attr("class", "nodes")
63
+ .selectAll("g")
64
+ .data(definitions)
65
+ .enter().append("g")
66
+ .call(drag)
67
+ .on("dblclick", dblclick),
68
+ circle = node
69
+ .append("circle")
70
+ .attr("r", function(d) { return d.lines / max_lines * max_circle_r + 6; })
71
+ .attr("class", function (d) { return classForCircular(d) ; }),
72
+ type = node
73
+ .append("text")
74
+ .attr("class", "type")
75
+ .attr("x", "-0.4em")
76
+ .attr("y", "0.4em")
77
+ .text(function(d) { return d.type[0]; }),
78
+ text = node
79
+ .append("text")
80
+ .attr("class", "namespace")
81
+ .attr("x", function(d) { return d.lines / max_lines * max_circle_r + 8; })
82
+ .attr("y", ".31em")
83
+ .text(function(d) { return d.id; });
84
+
85
+ container.append("defs").selectAll("marker")
86
+ .data(definitions)
87
+ .enter().append("marker")
88
+ .attr("id", function(d) { return d.id; })
89
+ .attr("viewBox", "0 -5 10 10")
90
+ .attr("refX", function(d){ return d.lines / max_lines * max_circle_r + 20; })
91
+ .attr("refY", 0)
92
+ .attr("markerWidth", 6)
93
+ .attr("markerHeight", 6)
94
+ .attr("orient", "auto")
95
+ .append("path")
96
+ .attr("d", "M0,-5L10,0L0,5");
97
+
98
+ function ticked() {
99
+ link.attr("d", linkArc);
100
+ node.attr("transform", transform);
101
+ }
102
+
103
+ function linkArc(d) {
104
+ var dx = d.target.x - d.source.x,
105
+ dy = d.target.y - d.source.y,
106
+ dr = 0;
107
+ return "M" + d.source.x + "," + d.source.y + "A" + dr + "," + dr + " 0 0,1 " + d.target.x + "," + d.target.y;
108
+ }
109
+
110
+ function dragstarted(d) {
111
+ if (!d3.event.active) simulation.alphaTarget(0.3).restart();
112
+ d3.select(this).classed("fixed", true);
113
+ d.fx = d.x;
114
+ d.fy = d.y;
115
+ }
116
+
117
+ function dragged(d) {
118
+ d.fx = d3.event.x;
119
+ d.fy = d3.event.y;
120
+ }
121
+
122
+ function dragended(d) {
123
+ if (!d3.event.active) simulation.alphaTarget(0);
124
+ }
125
+
126
+ function dblclick(d) {
127
+ d3.select(this).classed("fixed", false);
128
+ d.fx = null;
129
+ d.fy = null;
130
+ }
131
+
132
+ function transform(d) {
133
+ return "translate(" + d.x + "," + d.y + ")";
134
+ }
135
+
136
+
137
+ node.on('mouseover', function(d) {
138
+ var relatives = [];
139
+ link.classed('downlighted', function(l) {
140
+ if (d === l.source || d === l.target){
141
+ relatives.push(l.source);
142
+ relatives.push(l.target);
143
+ return false;
144
+ }else{
145
+ return true;
146
+ }
157
147
  });
158
-
159
- window.rubrowser = {
160
- data: data,
161
- definitions: definitions,
162
- relations: relations,
163
- simulation: simulation,
164
- node: node,
165
- link: link
166
- };
167
- $(document).trigger('graph-rendered');
148
+ node.classed('downlighted', function(n) {
149
+ return !(n == d || relatives.indexOf(n) > -1);
150
+ });
151
+ });
152
+
153
+ node.on('mouseout', function() {
154
+ link.classed('downlighted', false);
155
+ node.classed('downlighted', false);
156
+ });
157
+
158
+ window.rubrowser = {
159
+ data: data,
160
+ definitions: definitions,
161
+ relations: relations,
162
+ simulation: simulation,
163
+ node: node,
164
+ link: link
168
165
  };
169
-
170
- parseGraph(data);
@@ -5,46 +5,44 @@ $(document).on('click', '.panel .title', function(){
5
5
  // --------------------------------
6
6
  // Details Panel
7
7
  // --------------------------------
8
- $(document).on('graph-rendered', function(){
9
- rubrowser.node.on('click', function(d){
10
- var namespace = d.id;
11
- var lines = d.lines;
12
- var dependents = rubrowser.relations.filter(function(i){ return i.target.id == namespace; });
13
- var dependencies = rubrowser.relations.filter(function(i){ return i.source.id == namespace; });
14
- var definitions = rubrowser.data.definitions.filter(function(i){ return i.namespace == namespace; });
15
- var relations = rubrowser.data.relations.filter(function(i){ return i.resolved_namespace == namespace || i.caller == namespace; });
16
-
17
- var content = $('<div>');
18
- content.append('<label><strong>'+namespace+' ('+d.lines+' Lines)</strong></label>');
19
-
20
- content.append('<strong>Defined in:</strong>');
21
- var definitions_ol = $("<ol>");
22
- for(var i=0; i<definitions.length; i++){
23
- definitions_ol.append("<li>"+definitions[i].file+":"+definitions[i].line.toString()+"</li>");
8
+ rubrowser.node.on('click', function(d){
9
+ var namespace = d.id;
10
+ var lines = d.lines;
11
+ var dependents = rubrowser.relations.filter(function(i){ return i.target.id == namespace; });
12
+ var dependencies = rubrowser.relations.filter(function(i){ return i.source.id == namespace; });
13
+ var definitions = rubrowser.data.definitions.filter(function(i){ return i.namespace == namespace; });
14
+ var relations = rubrowser.data.relations.filter(function(i){ return i.resolved_namespace == namespace || i.caller == namespace; });
15
+
16
+ var content = $('<div>');
17
+ content.append('<label><strong>'+namespace+' ('+d.lines+' Lines)</strong></label>');
18
+
19
+ content.append('<strong>Defined in:</strong>');
20
+ var definitions_ol = $("<ol>");
21
+ for(var i=0; i<definitions.length; i++){
22
+ definitions_ol.append("<li>"+definitions[i].file+":"+definitions[i].line.toString()+"</li>");
23
+ }
24
+ content.append(definitions_ol);
25
+
26
+ if( dependents.length > 0 ){
27
+ content.append('<strong>Dependents:</strong>');
28
+ var dependents_ol = $("<ol>");
29
+ for(var i=0; i<dependents.length; i++){
30
+ dependents_ol.append("<li>"+dependents[i].source.id+"</li>");
24
31
  }
25
- content.append(definitions_ol);
26
-
27
- if( dependents.length > 0 ){
28
- content.append('<strong>Dependents:</strong>');
29
- var dependents_ol = $("<ol>");
30
- for(var i=0; i<dependents.length; i++){
31
- dependents_ol.append("<li>"+dependents[i].source.id+"</li>");
32
- }
33
- content.append(dependents_ol);
32
+ content.append(dependents_ol);
33
+ }
34
+
35
+ if( dependencies.length > 0 ){
36
+ content.append('<strong>Dependencies:</strong>');
37
+ var dependencies_ol = $("<ol>");
38
+ for(var i=0; i<dependencies.length; i++){
39
+ dependencies_ol.append("<li>"+dependencies[i].target.id+"</li>");
34
40
  }
41
+ content.append(dependencies_ol);
42
+ }
35
43
 
36
- if( dependencies.length > 0 ){
37
- content.append('<strong>Dependencies:</strong>');
38
- var dependencies_ol = $("<ol>");
39
- for(var i=0; i<dependencies.length; i++){
40
- dependencies_ol.append("<li>"+dependencies[i].target.id+"</li>");
41
- }
42
- content.append(dependencies_ol);
43
- }
44
-
45
- $('#information_panel').html(content);
46
- return true;
47
- });
44
+ $('#information_panel').html(content);
45
+ return true;
48
46
  });
49
47
 
50
48