rails-erd-d3 0.0.12 → 0.0.13

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.
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