rubrowser 0.3.1 → 2.0.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: fa463c82a9510b20cb22bf00daeac6fc23bfab95
4
- data.tar.gz: a5b0c4b8aab45182208e7b5811c682a3fc64fca8
3
+ metadata.gz: 37e83a67859f66506295f0fdff3237407c2c9a6d
4
+ data.tar.gz: 2ab42f6e3208468743ad5722f130accf2849d101
5
5
  SHA512:
6
- metadata.gz: b9c9d3ab34e424af0e497a973cb70a6f858d64e59bbb6e949a3c3c222dcb1ec38f26587e1c841cdea5b18312939c5c6dcc451ae771cf6cf2a3ec8f8b61336c9e
7
- data.tar.gz: dc90749e99a239e0815139671b152b3ad27f819b5233db28029014de5934be7b4dd0023aac29031d68f65df40687996c7d10decc88bdc6ba86577bfa1e90cbbe
6
+ metadata.gz: 2e47b9d43b0e0a71a6a58b678960c6d72b869503e1efddc4221f1ff015631f15883f35e0a76b17c2aa72f7889e730d13339c133791071909e9f2bae3cb4909ef
7
+ data.tar.gz: eed29f968098beebbe11e6abfd8987be1f2c162d5bda4ab5d389f157895ed6d22dfe52461a6f9d7e1f161e95efd0aef8f7a3adb076542b5f066734084570174c
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- rubrowser (0.3.1)
4
+ rubrowser (2.0.0)
5
5
  parser (~> 2.3, >= 2.3.0)
6
6
 
7
7
  GEM
data/bin/rubrowser CHANGED
@@ -3,21 +3,15 @@ $LOAD_PATH.push File.expand_path('../../lib', __FILE__)
3
3
 
4
4
  require 'optparse'
5
5
  require 'rubrowser'
6
- require 'rubrowser/server'
6
+ require 'rubrowser/renderer'
7
7
 
8
8
  options = {
9
- port: 9000,
10
9
  files: ARGV.empty? ? ['.'] : ARGV
11
10
  }
12
11
 
13
12
  OptionParser.new do |opts|
14
13
  opts.banner = "Usage: #{__FILE__} [options] [file] ..."
15
14
 
16
- message = 'Specify port number for server, default = 9000'
17
- opts.on('-pPORT', '--port=PORT', message) do |port|
18
- options[:port] = port.to_i
19
- end
20
-
21
15
  opts.on('-v', '--version', 'Print Rubrowser version') do
22
16
  puts "Rubrowser #{Rubrowser::VERSION}"
23
17
  exit
@@ -29,4 +23,4 @@ OptionParser.new do |opts|
29
23
  end
30
24
  end.parse!
31
25
 
32
- Rubrowser::Server.start(options)
26
+ puts Rubrowser::Renderer.call(options)
@@ -1,45 +1,27 @@
1
- require 'webrick'
2
1
  require 'erb'
3
2
  require 'rubrowser/data'
4
3
  require 'rubrowser/formatter/json'
5
4
 
6
5
  module Rubrowser
7
- class Server < WEBrick::HTTPServer
6
+ class Renderer
8
7
  # Accepted options are:
9
- # port: port number for the server
10
8
  # files: list of file paths to parse
11
- def self.start(options = {})
12
- new(options).start
9
+ def self.call(options = {})
10
+ new(options).call
11
+ end
12
+
13
+ def call
14
+ erb :index
13
15
  end
14
16
 
15
17
  private
16
18
 
17
19
  include ERB::Util
18
20
 
19
- ROUTES = {
20
- '/' => :root,
21
- '/data.json' => :data
22
- }.freeze
23
-
24
21
  attr_reader :files
25
22
 
26
23
  def initialize(options)
27
- super Port: options[:port]
28
24
  @files = options[:files]
29
-
30
- mount_proc '/' do |req, res|
31
- res.body = router(req.path)
32
- end
33
- end
34
-
35
- def router(path)
36
- return file(path) if file?(path)
37
- return send(ROUTES[path]) if ROUTES.key?(path)
38
- 'Route not found.'
39
- end
40
-
41
- def root
42
- erb :index
43
25
  end
44
26
 
45
27
  def data
@@ -48,13 +30,8 @@ module Rubrowser
48
30
  formatter.call
49
31
  end
50
32
 
51
- def file?(path)
52
- path = resolve_file_path("/public#{path}")
53
- File.file?(path)
54
- end
55
-
56
33
  def file(path)
57
- File.read(resolve_file_path("/public#{path}"))
34
+ File.read(resolve_file_path("/public/#{path}"))
58
35
  end
59
36
 
60
37
  def erb(template)
@@ -1,3 +1,3 @@
1
1
  module Rubrowser
2
- VERSION = '0.3.1'.freeze
2
+ VERSION = '2.0.0'.freeze
3
3
  end
@@ -6,15 +6,6 @@ html, body, .dependency_graph, .dependency_graph svg{
6
6
  font: 10px sans-serif;
7
7
  }
8
8
 
9
- .loading{
10
- position: absolute;
11
- top: 30px;
12
- left: 0px;
13
- text-align: center;
14
- width: 100%;
15
- font-size: 3rem;
16
- }
17
-
18
9
  .link {
19
10
  fill: none;
20
11
  stroke: #666;
@@ -77,7 +68,6 @@ text.type{
77
68
  width: 200px;
78
69
  background: white;
79
70
  border-right: 1px solid #ddd;
80
- display: none;
81
71
  overflow: auto;
82
72
  }
83
73
 
@@ -1,9 +1,3 @@
1
- d3.json("/data.json", function(error, data) {
2
- parseGraph(data);
3
- $('.loading').hide();
4
- $('.toolbox').show();
5
- });
6
-
7
1
  var classForCircular = function(d) {
8
2
  return d.circular ? 'circular' : '';
9
3
  };
@@ -172,3 +166,5 @@ var parseGraph = function(data){
172
166
  };
173
167
  $(document).trigger('graph-rendered');
174
168
  };
169
+
170
+ parseGraph(data);
data/readme.md CHANGED
@@ -2,26 +2,41 @@
2
2
 
3
3
  [![Gem Version](https://badge.fury.io/rb/rubrowser.svg)](https://badge.fury.io/rb/rubrowser)
4
4
 
5
- a visualizer for ruby code (rails or otherwise), it analyze your code and extract the modules definitions and used classes/modules and render all these information as a directed force graph using D3.
5
+
6
+
7
+ a visualizer for ruby code (rails or otherwise), it analyze your code and
8
+ extract the modules definitions and used classes/modules and render all these
9
+ information as a directed force graph using D3.
10
+
11
+ ### Note:
12
+
13
+ Starting from version 2.0.0 the project is no longer an http server, it
14
+ generates one HTML file that is self-contained, data and script and html in one
15
+ file, so you can generate it in your CI build and publish it as part of your
16
+ documentation
6
17
 
7
18
  this project is so small that the visualization looks like so
8
19
 
9
20
  ![rubrowser visualization](http://i.imgur.com/5mbshee.png)
10
21
 
11
- the idea is that the project opens every `.rb` file and parse it with `parser` gem then list all modules and classes definitions, and all constants that are listed inside this module/class and link them together.
22
+ the idea is that the project opens every `.rb` file and parse it with `parser`
23
+ gem then list all modules and classes definitions, and all constants that are
24
+ listed inside this module/class and link them together.
12
25
 
13
26
  Here are some output examples
14
27
 
15
- | Gem | Visualization |
16
- | ------------- |:-------------:|
17
- | rack-1.6.4/lib | ![rake](http://i.imgur.com/4UsCo0a.png) |
18
- | actioncable-5.0.0/lib | ![acioncable](http://i.imgur.com/Q0Xqjsz.png) |
19
- | railties-5.0.0/lib | ![railties](http://i.imgur.com/31g10a1.png) |
28
+ | Gem | Visualization |
29
+ | ------------- | :-------------: |
30
+ | rack-1.6.4/lib | ![rake](http://i.imgur.com/4UsCo0a.png) |
31
+ | actioncable-5.0.0/lib | ![acioncable](http://i.imgur.com/Q0Xqjsz.png) |
32
+ | railties-5.0.0/lib | ![railties](http://i.imgur.com/31g10a1.png) |
20
33
 
21
34
  there are couple things you need to keep in mind:
22
35
 
23
- * if your file doesn't have a valid ruby syntax it won't be parsed and will print warning.
24
- * if you reference a class that is not defined in your project it won't be in the graph, we only display the graph of classes/modules you defined
36
+ * if your file doesn't have a valid ruby syntax it won't be parsed and will
37
+ print warning.
38
+ * if you reference a class that is not defined in your project it won't be in
39
+ the graph, we only display the graph of classes/modules you defined
25
40
  * it statically analyze the code so meta programming is out of question in here
26
41
  * rails associations are meta programming so forget it :smile:
27
42
 
@@ -37,7 +52,6 @@ gem install rubrowser
37
52
 
38
53
  ```
39
54
  Usage: rubrowser [options] [file] ...
40
- -p, --port=PORT Specify port number for server, default = 9000
41
55
  -v, --version Print Rubrowser version
42
56
  -h, --help Prints this help
43
57
  ```
@@ -46,25 +60,33 @@ if you run it without any options
46
60
  ```
47
61
  rubrowser
48
62
  ```
49
- it'll analyze the current directory and open port 9000, so you can access the graph from `localhost:9000`
63
+ it'll analyze the current directory and print out an HTML file, so you can write it to a file, and open it in your browser
64
+
65
+ ```
66
+ rubrowser > output.html
67
+ ```
50
68
 
51
69
  ## Features
52
70
 
53
71
  * interactive graph, you can pull any node to fix it to some position
54
72
  * to release node double click on it
55
73
  * zoom and pan with mouse or touch pad
56
- * highlight node and all related nodes, it'll make it easier for you to see what depends and dependencies of certain class
74
+ * highlight node and all related nodes, it'll make it easier for you to see what
75
+ depends and dependencies of certain class
57
76
  * ignore node by name
58
77
  * ignore nodes of certain type (modules/classes)
59
78
  * hide namespaces
60
79
  * hide relations
61
80
  * change graph appearance (collision radius)
62
81
  * stop animation immediately
63
- * Module/class circle size on the graph will be relative to module number of lines in your code
82
+ * Module/class circle size on the graph will be relative to module number of
83
+ lines in your code
64
84
  * cyclical dependencies are marked in red
65
85
 
66
86
  ## Why?
67
87
 
68
- Because i didn't find a good visualization tool to make me understand ruby projects when I join a new one.
88
+ Because i didn't find a good visualization tool to make me understand ruby
89
+ projects when I join a new one.
69
90
 
70
- it's great when you want to get into an open source project and visualize the structure to know where to work and the relations between modules/classes.
91
+ it's great when you want to get into an open source project and visualize the
92
+ structure to know where to work and the relations between modules/classes.
data/views/index.erb CHANGED
@@ -3,14 +3,12 @@
3
3
  <head>
4
4
  <meta content='text/html; charset=UTF-8' http-equiv='Content-Type'>
5
5
  <title>Rubrowser</title>
6
- <link href='/css/application.css' media='all' rel='stylesheet'>
6
+ <link media='all' rel='stylesheet'>
7
+ <style><%= file('css/application.css') %></style>
7
8
  </head>
8
9
  <body>
9
10
  <div class='dependency_graph'>
10
11
  <svg></svg>
11
- <div class="loading">
12
- Parsing files...
13
- </div>
14
12
  </div>
15
13
  <div class="toolbox">
16
14
  <div class="panel">
@@ -49,10 +47,13 @@
49
47
  </div>
50
48
  </div>
51
49
 
52
- <script src='/javascript/lodash.js' type='text/javascript'></script>
53
- <script src='/javascript/d3.js' type='text/javascript'></script>
54
- <script src='/javascript/jquery.js' type='text/javascript'></script>
55
- <script src='/javascript/application.js' type='text/javascript'></script>
56
- <script src='/javascript/toolbox.js' type='text/javascript'></script>
50
+ <script src='https://unpkg.com/lodash@4.17.4/lodash.min.js' type='text/javascript'></script>
51
+ <script src='https://unpkg.com/d3@4.13.0/build/d3.min.js' type='text/javascript'></script>
52
+ <script src='https://unpkg.com/jquery@3.3.1/dist/jquery.min.js' type='text/javascript'></script>
53
+ <script type='text/javascript'>
54
+ var data = <%= data %>
55
+ </script>
56
+ <script type='text/javascript'><%= file('javascript/application.js') %></script>
57
+ <script type='text/javascript'><%= file('javascript/toolbox.js') %></script>
57
58
  </body>
58
59
  </html>
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rubrowser
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Emad Elsaid
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-10-17 00:00:00.000000000 Z
11
+ date: 2018-01-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: parser
@@ -130,7 +130,7 @@ files:
130
130
  - lib/rubrowser/parser/file.rb
131
131
  - lib/rubrowser/parser/file/builder.rb
132
132
  - lib/rubrowser/parser/relation/base.rb
133
- - lib/rubrowser/server.rb
133
+ - lib/rubrowser/renderer.rb
134
134
  - lib/rubrowser/version.rb
135
135
  - public/css/application.css
136
136
  - public/javascript/application.js