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.
- checksums.yaml +4 -4
- data/lib/rails_erd_d3.rb +164 -164
- data/rails-erd-d3.gemspec +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e07338bbac0f646951bf6f14f7b4d9d2a4dee8c1
|
4
|
+
data.tar.gz: efe46195b3ec4e8fecd73f704a7ef1194b3c3388
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
-
|
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[
|
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.
|
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
|
-
|
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
|
-
|
74
|
-
<
|
75
|
-
<
|
76
|
-
<script
|
77
|
-
<script src='https://
|
78
|
-
<
|
79
|
-
|
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
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
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
|
+
"© 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
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
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
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
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
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
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'>×</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
|
-
</
|
234
|
-
</
|
235
|
-
|
236
|
-
|
237
|
-
|
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.
|
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"
|