rails-erd-d3 0.0.12 → 0.0.13

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/lib/rails_erd_d3.rb +164 -164
  3. data/rails-erd-d3.gemspec +1 -1
  4. metadata +1 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4f464444369345b4390c98b1854f04cc4c1d534a
4
- data.tar.gz: 19e30cba46c1ec373a9d3033cb87f15010817dc4
3
+ metadata.gz: e07338bbac0f646951bf6f14f7b4d9d2a4dee8c1
4
+ data.tar.gz: efe46195b3ec4e8fecd73f704a7ef1194b3c3388
5
5
  SHA512:
6
- metadata.gz: 9ab6b3e67299d1550dd3c9f602f09d0df648b4372fee3cbe53c8a894c25bf10ee513808e5dc381c559ce360d8ad9aa91180c6eb3d40d5a2e65d761f939c4454b
7
- data.tar.gz: 2a971c82ac84d4df9d0d0835707e8c8e8ec67459bbe36d809a526024dd8fad357fea44008b1ba4255c7abd8826a610cbf0513f4b025a3ee002822f660aecf879
6
+ metadata.gz: 7e7feb8b0498280ea803f1e1e468de41acbbfb9e940e120cb2f0570c503105603d0b04cecc008eb635c92b1b19024d756116208aca972c28261f0b8545a8c095
7
+ data.tar.gz: 0cc61d77cc74c3afcec681aa91db623a091995fdb246b9410decfb10b29de13e458ba786938935faa0d8824caf09dbd06a395ea21b317a6048ab23833a9f9894
data/lib/rails_erd_d3.rb CHANGED
@@ -29,12 +29,10 @@ class RailsErdD3
29
29
  nodes = []
30
30
  links = []
31
31
  @@models.each do |model|
32
- name = model.model_name.plural.capitalize
33
-
34
- nodes << { label: name, r: 30 }
32
+ nodes << { label: model.name.capitalize, r: 30 }
35
33
  model.reflections.keys.each do |key|
36
34
  links << {
37
- source: models_list[name],
35
+ source: models_list[model.model_name.plural.capitalize],
38
36
  target: models_list[key.pluralize.capitalize]
39
37
  }
40
38
  end
@@ -48,176 +46,179 @@ class RailsErdD3
48
46
  Rails.application.eager_load!
49
47
 
50
48
  file = File.new("erd.html", "w")
51
- file.puts("
52
- <!DOCTYPE HTML>
53
- <html>
54
- #{get_head}
55
- <body>
56
- #{get_nav}
57
- <div id='erd'>
58
- </div>
59
- #{get_d3}
60
- #{get_modals}
61
- </body>
62
- </html>
63
- ")
49
+ file.write(
50
+ "<!DOCTYPE HTML>"\
51
+ "<html>"\
52
+ "#{get_head}"\
53
+ "<body>"\
54
+ "#{get_nav}"\
55
+ "<div id='erd'>"\
56
+ "</div>"\
57
+ "#{get_d3}"\
58
+ "#{get_modals}"\
59
+ "</body>"\
60
+ "</html>"
61
+ )
64
62
  file.close
65
63
 
66
- puts "File erd.html was successfully created!"
64
+ "File erd.html was successfully created!"
67
65
  end
68
66
 
69
67
  private
70
68
 
71
69
  def self.get_head
72
- "
73
- <head>
74
- <title>ERD</title>
75
- <meta charset='utf-8'>
76
- <script src='https://code.jquery.com/jquery-3.1.1.min.js' integrity='sha256-hVVnYaiADRTO2PzUGmuLJr8BLUSjGIZsDYGmIJLv2b8=' crossorigin='anonymous'></script>
77
- <script src='https://cdnjs.cloudflare.com/ajax/libs/d3/4.3.0/d3.min.js'></script>
78
- <script src='https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js' integrity='sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa' crossorigin='anonymous'></script>
79
- <link rel='stylesheet' href='https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css' integrity='sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u' crossorigin='anonymous'>
80
- </head>
81
- "
70
+ "<head>"\
71
+ "<title>ERD</title>"\
72
+ "<meta charset='utf-8'>"\
73
+ "<script src='https://code.jquery.com/jquery-3.1.1.min.js' integrity='sha256-hVVnYaiADRTO2PzUGmuLJr8BLUSjGIZsDYGmIJLv2b8=' crossorigin='anonymous'></script>"\
74
+ "<script src='https://cdnjs.cloudflare.com/ajax/libs/d3/4.3.0/d3.min.js'></script>"\
75
+ "<script src='https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js' integrity='sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa' crossorigin='anonymous'></script>"\
76
+ "<link rel='stylesheet' href='https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css' integrity='sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u' crossorigin='anonymous'>"\
77
+ "</head>"
82
78
  end
83
79
 
84
80
  def self.get_nav
85
- "
86
- <nav class='navbar navbar-default'>
87
- <div class='container-fluid'>
88
- <div class='navbar-header'>
89
- <div class='navbar-brand'>
90
- <a href='https://github.com/RomanKrasavtsev/rails-erd-d3'>
91
- Rails-ERD-D3
92
- </a>
93
- </div>
94
- </div>
95
- </div>
96
- </nav>
97
- "
81
+ "<nav class='navbar navbar-default' style='background-color: #337ab7;'>"
82
+ "<div class='container'>"\
83
+ "<div class='navbar-header'>"\
84
+ "<div class='navbar-brand'>"\
85
+ "<a href='https://github.com/RomanKrasavtsev/rails-erd-d3' target='_blank' style='color: white;'>"\
86
+ "Rails-ERD-D3"\
87
+ "</a>"\
88
+ "</div>"\
89
+ "</div>"\
90
+ "<div class='collapse navbar-collapse'>"\
91
+ "<ul class='nav navbar-nav navbar-right'>"\
92
+ "<li>"\
93
+ "<a href='https://github.com/romankrasavtsev' target='_blank' style='color: white;'>"\
94
+ "&copy; 2016 Roman Krasavtsev"\
95
+ "</a>"\
96
+ "</li>"\
97
+ "</ul>"\
98
+ "</div>"\
99
+ "</div>"\
100
+ "</nav>"
98
101
  end
99
102
 
100
103
  def self.get_d3
101
- "
102
- <script>
103
- var data = #{get_data};
104
-
105
- var width = window.innerWidth
106
- || document.documentElement.clientWidth
107
- || document.body.clientWidth;
108
- var height = window.innerHeight
109
- || document.documentElement.clientHeight
110
- || document.body.clientHeight;
111
-
112
- var colorScale = d3.scaleOrdinal(d3.schemeCategory20);
113
-
114
- var svg = d3.select('#erd').append('svg')
115
- .attr('height', height)
116
- .attr('width', width)
117
- .style('background', 'white');
118
-
119
- var simulation = d3.forceSimulation()
120
- .force('link', d3.forceLink().id(function(d) { return d.index }))
121
- .force('collide',d3.forceCollide( function(d){return d.r + 20 }).iterations(30) )
122
- .force('charge', d3.forceManyBody())
123
- .force('center', d3.forceCenter(width / 2, height / 2))
124
- .force('y', d3.forceY(0))
125
- .force('x', d3.forceX(0));
126
-
127
- var link = svg.append('g')
128
- .classed('links', true)
129
- .selectAll('line')
130
- .data(data.links)
131
- .enter()
132
- .append('line')
133
- .attr('stroke', 'black');
134
-
135
- var node = svg.selectAll('.node')
136
- .data(data.nodes)
137
- .enter()
138
- .append('g')
139
- .classed('node', true)
140
- .style('cursor', 'pointer')
141
- .attr('data-toggle', 'modal')
142
- .attr('data-target', function(d, i){ return '#' + data.nodes[i].label })
143
- .call(d3.drag()
144
- .on('start', dragstarted)
145
- .on('drag', dragged)
146
- .on('end', dragended));
147
-
148
- node.append('circle')
149
- .classed('circle', true)
150
- .attr('r', function(d){ return d.r })
151
- .attr('fill', function(d, i){ return colorScale(i) });
152
-
153
- node.append('text')
154
- .classed('text', true)
155
- .text(function(d) {
156
- return d.label;
104
+ "<script>
105
+ var data = #{get_data};
106
+
107
+ var width = window.innerWidth
108
+ || document.documentElement.clientWidth
109
+ || document.body.clientWidth;
110
+ var height = window.innerHeight
111
+ || document.documentElement.clientHeight
112
+ || document.body.clientHeight;
113
+
114
+ var colorScale = d3.scaleOrdinal(d3.schemeCategory20);
115
+
116
+ var svg = d3.select('#erd').append('svg')
117
+ .attr('height', height)
118
+ .attr('width', width)
119
+ .style('background', 'white');
120
+
121
+ var simulation = d3.forceSimulation()
122
+ .force('link', d3.forceLink().id(function(d) { return d.index }))
123
+ .force('collide',d3.forceCollide( function(d){return d.r + 20 }).iterations(30) )
124
+ .force('charge', d3.forceManyBody())
125
+ .force('center', d3.forceCenter(width / 2, height / 2))
126
+ .force('y', d3.forceY(0))
127
+ .force('x', d3.forceX(0));
128
+
129
+ var link = svg.append('g')
130
+ .classed('links', true)
131
+ .selectAll('line')
132
+ .data(data.links)
133
+ .enter()
134
+ .append('line')
135
+ .attr('stroke', 'black');
136
+
137
+ var node = svg.selectAll('.node')
138
+ .data(data.nodes)
139
+ .enter()
140
+ .append('g')
141
+ .classed('node', true)
142
+ .style('cursor', 'pointer')
143
+ .attr('data-toggle', 'modal')
144
+ .attr('data-target', function(d, i){ return '#' + data.nodes[i].label })
145
+ .call(d3.drag()
146
+ .on('start', dragstarted)
147
+ .on('drag', dragged)
148
+ .on('end', dragended));
149
+
150
+ node.append('circle')
151
+ .classed('circle', true)
152
+ .attr('r', function(d){ return d.r })
153
+ .attr('fill', function(d, i){ return colorScale(i) });
154
+
155
+ node.append('text')
156
+ .classed('text', true)
157
+ .text(function(d) {
158
+ return d.label;
159
+ });
160
+
161
+ var ticked = function() {
162
+ link
163
+ .attr('x1', function(d) { return d.source.x; })
164
+ .attr('y1', function(d) { return d.source.y; })
165
+ .attr('x2', function(d) { return d.target.x; })
166
+ .attr('y2', function(d) { return d.target.y; });
167
+
168
+ node
169
+ .attr('transform', function(d) {
170
+ return 'translate(' + [d.x, d.y] + ')';
157
171
  });
158
-
159
- var ticked = function() {
160
- link
161
- .attr('x1', function(d) { return d.source.x; })
162
- .attr('y1', function(d) { return d.source.y; })
163
- .attr('x2', function(d) { return d.target.x; })
164
- .attr('y2', function(d) { return d.target.y; });
165
-
166
- node
167
- .attr('transform', function(d) {
168
- return 'translate(' + [d.x, d.y] + ')';
169
- });
170
- }
171
-
172
- simulation.nodes(data.nodes)
173
- .on('tick', ticked);
174
-
175
- simulation.force('link')
176
- .links(data.links);
177
-
178
- function dragstarted(d) {
179
- if (!d3.event.active) simulation.alphaTarget(0.3).restart();
180
- d.fx = d.x;
181
- d.fy = d.y;
182
- }
183
-
184
- function dragged(d) {
185
- d.fx = d3.event.x;
186
- d.fy = d3.event.y;
187
- }
188
-
189
- function dragended(d) {
190
- if (!d3.event.active) simulation.alphaTarget(0);
191
- d.fx = null;
192
- d.fy = null;
193
- }
194
- </script>
195
- "
172
+ }
173
+
174
+ simulation.nodes(data.nodes)
175
+ .on('tick', ticked);
176
+
177
+ simulation.force('link')
178
+ .links(data.links);
179
+
180
+ function dragstarted(d) {
181
+ if (!d3.event.active) simulation.alphaTarget(0.3).restart();
182
+ d.fx = d.x;
183
+ d.fy = d.y;
184
+ }
185
+
186
+ function dragged(d) {
187
+ d.fx = d3.event.x;
188
+ d.fy = d3.event.y;
189
+ }
190
+
191
+ function dragended(d) {
192
+ if (!d3.event.active) simulation.alphaTarget(0);
193
+ d.fx = null;
194
+ d.fy = null;
195
+ }
196
+ </script>
197
+ "
196
198
  end
197
199
 
198
200
  def self.get_modals
199
201
  modals = ""
200
202
  @@models.each do |model|
201
203
  name = model.model_name.plural.capitalize
202
- modals += "
203
- <div class='modal fade' id='#{name}' tabindex='-1' role='dialog'>
204
- <div class='modal-dialog' role='document'>
205
- <div class='modal-content'>
206
- <div class='modal-header'>
207
- <button type='button' class='close' data-dismiss='modal' aria-label='Close'><span aria-hidden='true'>&times;</span></button>
208
- <h4 class='modal-title'>#{name}</h4>
209
- </div>
210
- <div class='modal-body'>
211
- <table class='table table-hover'>
212
- <thead>
213
- <tr>
214
- <th>#</th>
215
- <th>name</th>
216
- <th>macro</th>
217
- <th>foreign_key</th>
218
- </tr>
219
- </thead>
220
- <tbody>"
204
+ modals += "<div class='modal fade' id='#{name}' tabindex='-1' role='dialog'>"\
205
+ "<div class='modal-dialog' role='document'>"\
206
+ "<div class='modal-content'>"\
207
+ "<div class='modal-header'>"\
208
+ "<button type='button' class='close' data-dismiss='modal' aria-label='Close'><span aria-hidden='true'>&times;</span></button>"\
209
+ "<h4 class='modal-title'>#{name}</h4>"\
210
+ "</div>"\
211
+ "<div class='modal-body'>"\
212
+ "<table class='table table-hover'>"\
213
+ "<thead>"\
214
+ "<tr>"\
215
+ "<th>#</th>"\
216
+ "<th>name</th>"\
217
+ "<th>macro</th>"\
218
+ "<th>foreign_key</th>"\
219
+ "</tr>"\
220
+ "</thead>"\
221
+ "<tbody>"
221
222
 
222
223
  model.reflections.each_with_index do |r, index|
223
224
  name = r[0]
@@ -229,16 +230,15 @@ class RailsErdD3
229
230
  "</tr>"
230
231
  end
231
232
 
232
- modals += "
233
- </tbody>
234
- </table>
235
- </div>
236
- <div class='modal-footer'>
237
- <button type='button' class='btn btn-default' data-dismiss='modal'>Close</button>
238
- </div>
239
- </div>
240
- </div>
241
- </div>"
233
+ modals += "</tbody>"
234
+ "</table>"\
235
+ "</div>"\
236
+ "<div class='modal-footer'>"\
237
+ "<button type='button' class='btn btn-default' data-dismiss='modal'>Close</button>"\
238
+ "</div>"\
239
+ "</div>"\
240
+ "</div>"\
241
+ "</div>"
242
242
  end
243
243
 
244
244
  modals
data/rails-erd-d3.gemspec CHANGED
@@ -6,7 +6,7 @@ Gem::Specification.new do |spec|
6
6
  spec.name = "rails-erd-d3"
7
7
  spec.authors = ["Roman Krasavtsev"]
8
8
  spec.email = ["mr.krasavtsev@gmail.com"]
9
- spec.version = "0.0.12"
9
+ spec.version = "0.0.13"
10
10
  spec.summary = "Entity–relationship diagram with D3.js for Rails application"
11
11
  spec.description = "This gem creates entity–relationship diagram with D3.js for your Rails application"
12
12
  spec.homepage = "https://github.com/RomanKrasavtsev/rails-erd-d3"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rails-erd-d3
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.12
4
+ version: 0.0.13
5
5
  platform: ruby
6
6
  authors:
7
7
  - Roman Krasavtsev