active_designer 0.0.0 → 0.0.3

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
2
  SHA1:
3
- metadata.gz: d531a1fdbca54b0ba042e38941696997af0b9c97
4
- data.tar.gz: 63de8eb465600d5748cabb3982e3ff6acedb2639
3
+ metadata.gz: 9473ab18b3540a1e51362d8d9ac74a763d318508
4
+ data.tar.gz: 7c2cb8cfb28757ab14a26dba1c229d49025a5cef
5
5
  SHA512:
6
- metadata.gz: 28c272aea0fa0a3eceda16d0ac66ed6825cc7372c2e2e0bb12194a50ce48aad7e7daaed6f8f2b932adc889c678478831062ed7d91fb636e7065385d9b89bdfca
7
- data.tar.gz: dbf124cf9fe64b4b4089dfbec359454a9850474bfbc007f57ec6611a23b59ac84f55b9ddf5baf84690fca0db48a0396612c37b77b71bb47aafaac4cff34ead23
6
+ metadata.gz: ae61e1234a802e9c3eba1f55d838bdeec3772706e129d9a39a2181f50281495bca196616b450711f2ed13c9221cb720ac8dd4fc5ba1870ee9520ad0542152dab
7
+ data.tar.gz: 824d6f4a9a6f63012c96179f115883deb6bc78cca7bbe37291255c767e61b9fa72d1bb6e3a1ffca2b4af0b393449569b2ba8b7c75e0df65e5222dc5d166debb8
@@ -12,7 +12,7 @@ module ActiveDesigner
12
12
  end
13
13
 
14
14
  if command == "--help" || command == "-h"
15
- stdout.puts "To create a schema run '$ active-designer create filepath'"
15
+ stdout.puts "To create a schema run '$ active-designer --create filepath'"
16
16
  stdout.puts "If youre in the root of a Sinatra or Ruby on Rails project the filepath should be './db/schema.rb'"
17
17
  return 0
18
18
  end
@@ -24,11 +24,13 @@ module ActiveDesigner
24
24
 
25
25
  if !input_path
26
26
  stderr.puts "No path was provided, use -h or --help for more information"
27
+
27
28
  return 1
28
29
  end
29
30
 
30
31
  if !File.exist?(input_path)
31
32
  stderr.puts "#{input_path.inspect} does not exist, use -h or --help for more information"
33
+
32
34
  return 1
33
35
  end
34
36
 
@@ -36,6 +38,7 @@ module ActiveDesigner
36
38
 
37
39
  if File.exist?(output_path) && !overwrite?(stdin, stdout, output_path)
38
40
  stderr.puts "Aborted"
41
+
39
42
  return 1
40
43
  end
41
44
 
@@ -39,18 +39,51 @@ function titleBodyClickListener(e) {
39
39
 
40
40
  function titleUpdate(e) {
41
41
  let schema = getSchema();
42
- let tableName = $('.table-form')[0].value;
43
- $('.table-form')[0].parentElement.outerHTML = tableTitleHTML(tableName);
42
+ let newTableName = $('.table-form')[0].value;
43
+ let cards = $('.card');
44
+ for (var i = 0; i < cards.length; i++) {
45
+ if ($(cards[i]).find('form').length === 0) {
46
+ let tableName = $(cards[i]).find('h4.table-title').text().trim()
47
+ if (tableName === newTableName) {
48
+ $('.table-form')[0].parentElement.outerHTML = tableTitleHTML(e.data.originalTitle);
49
+ editTableName();
50
+ setSchema(schema);
51
+ return
52
+ // Should produce an error here
53
+ }
54
+ }
55
+ }
56
+ $('.table-form')[0].parentElement.outerHTML = tableTitleHTML(newTableName);
44
57
  $('[data-toggle="popover"]').popover();
45
- if (e.data.originalTitle !== tableName) {
46
- let cardID = e.data.cardID;
47
- schema[cardID].name = tableName;
48
- checkTitleStatus(cardID,schema);
58
+ let tableID = e.data.cardID;
59
+ updateRefs(schema[tableID],schema,newTableName)
60
+ if (e.data.originalTitle !== newTableName) {
61
+ schema[tableID].name = newTableName;
62
+ checkTitleStatus(tableID,schema);
49
63
  }
50
64
  editTableName();
51
65
  setSchema(schema);
52
66
  }
53
67
 
68
+ function updateRefs(table,schema,newTableName) {
69
+ let refs = $("li[id^='ref-']");
70
+ for (var i = 0; i < refs.length; i++) {
71
+ let refName = $(refs[i]).find('span.column-title').text().split('_');
72
+ refName.pop();
73
+ refName = refName.join('_');
74
+ if (refName === table.name) {
75
+ $(refs[i]).find('span.column-title').text(`${newTableName}_id`);
76
+ let refID = refs[i].id;
77
+ let tableID = `tbl-${refID.split('-')[1]}`;
78
+ let refObj = schema[tableID].references[refID];
79
+ refObj.foreign_table_name = newTableName;
80
+ if (!refObj.status.new) {
81
+ refObj.status.modified = true;
82
+ }
83
+ }
84
+ }
85
+ }
86
+
54
87
  function tableTitleHTML(tableName) {
55
88
  return "<h4 class='card-title table-title' data-toggle='popover' data-trigger='hover' data-content='Edit table name'>" +
56
89
  tableName +
@@ -62,7 +95,6 @@ function tableTitleFormHTML(priorText) {
62
95
  }
63
96
 
64
97
  function checkTitleStatus(cardID,schema) {
65
-
66
98
  if (schema[cardID].status.new === false) {
67
99
  updateTitleStatus(cardID,schema);
68
100
  }
@@ -1,15 +1,38 @@
1
-
2
1
  function destroyTable(){
3
2
  if (openEditChecker()) { return };
4
3
  $('.delete-table').unbind('click');
5
4
  $('.delete-table').click(function() {
6
5
  $(this).popover('dispose');
7
6
  let card = $(this).parents('.card');
8
- let listItems = card.find('.list-group-item');
9
- for(let i = 0; i < listItems.length; i++) {
10
- jsPlumb.remove(listItems[i]);
11
- };
12
- card[0].outerHTML = "";
7
+ jsPlumb.remove(card);
8
+ let schema = getSchema();
9
+ let table = schema[card[0].id];
10
+ let status = table.status;
11
+ if (status.new) {
12
+ schema[card[0].id] = null;
13
+ } else {
14
+ status.deleted = true;
15
+ }
16
+
17
+ refs = $("li[id^='ref-']");
18
+ for (let i = 0; i < refs.length; i++) {
19
+ let refEl = $(refs[i]);
20
+ let refID = $(refs[i])[0].id;
21
+ let foreignCard = refEl.parents('.card');
22
+ let foreignCardID = foreignCard[0].id;
23
+ let refObj = schema[foreignCardID].references[refID];
24
+
25
+ if (refObj.foreign_table_name === table.name) {
26
+ if (refObj.status.new) {
27
+ refObj = null;
28
+ } else {
29
+ refObj.status.deleted = true;
30
+ }
31
+ jsPlumb.remove(refs[i]);
32
+ jsPlumb.recalculateOffsets(foreignCard);
33
+ }
34
+ }
35
+ setSchema(schema);
13
36
  });
14
37
  }
15
38
 
@@ -19,17 +42,12 @@ function destroyColumn() {
19
42
  $('.delete-column').unbind('click')
20
43
  $('.delete-column').click(function() {
21
44
  $(this).popover('dispose');
22
- let column = $(this).parents('.list-group-item')[0];
45
+ let column = $(this).parents("li[id^='col-']")[0];
23
46
  let columnID = column.id;
24
- column.outerHTML = "";
47
+ let card = $(this).parents(".card")[0];
48
+ jsPlumb.remove(column)
49
+ jsPlumb.recalculateOffsets(card)
25
50
  let tableID = `tbl-${columnID.split('-')[1]}`;
26
- let conns = connections[tableID];
27
- if (typeof(conns) !== "undefined") {
28
- for(let i = 0; i < conns.length; i++) {
29
- jsPlumb.repaintEverything()
30
- jsPlumb.repaint(conns[i].source)
31
- }
32
- }
33
51
  let columns = schema[tableID].columns
34
52
  let status = columns[columnID].status;
35
53
  if (status.new) {
@@ -47,17 +65,12 @@ function destroyReference() {
47
65
  $('.delete-ref').unbind('click')
48
66
  $('.delete-ref').click(function() {
49
67
  $(this).popover('dispose');
50
- let reference = $(this).parents('.list-group-item')[0];
68
+ let reference = $(this).parents("li[id^='ref-']")[0];
51
69
  let referenceID = reference.id;
52
70
  let tableID = `tbl-${referenceID.split('-')[1]}`;
71
+ let card = $(this).parents(".card")[0];
53
72
  jsPlumb.remove(reference);
54
- let conns = connections[tableID];
55
- for(let i = 0; i < conns.length; i++) {
56
- if (conns[i].source) {
57
- jsPlumb.repaintEverything()
58
- jsPlumb.repaint(conns[i].source)
59
- }
60
- }
73
+ jsPlumb.recalculateOffsets(card)
61
74
  let references = schema[tableID].references
62
75
  let status = references[referenceID].status;
63
76
  if (status.new) {
@@ -90,11 +103,14 @@ function newColumnObj(tableID, columnName, columnType, schema) {
90
103
  function newRefObj(tableID,foreignTableName,foreignTableID, schema) {
91
104
  let tableNum = tableID.split('-')[1];
92
105
  let prevID = 100;
106
+
107
+
108
+
93
109
  let columnIDs = Object.keys(schema[`tbl-${tableNum}`].references);
94
110
  if (columnIDs.length !== 0) {
95
111
  prevID = parseInt(columnIDs[columnIDs.length -1].split('-')[2]);
96
112
  }
97
- let columnID = `col-${tableNum}-${prevID + 1}`;
113
+ let columnID = `ref-${tableNum}-${prevID + 1}`;
98
114
  return schema[tableID].references[columnID] = {
99
115
  id: columnID,
100
116
  table_id: tableID,
@@ -104,15 +120,13 @@ function newRefObj(tableID,foreignTableName,foreignTableID, schema) {
104
120
  }
105
121
  }
106
122
 
107
- function addColumn() {
123
+ function addColumnDisplay() {
108
124
  if (openEditChecker()) { return };
109
125
  $('.fa-plus-square').unbind('click');
110
126
  $('.fa-plus-square').on('click', null, {}, displayColumnJumbo);
111
127
  }
112
128
 
113
- function displayColumnJumbo() {
114
- $('body').append(addColumnCardHTML());
115
- let card = $(this).parents('.card');
129
+ function refColToggle() {
116
130
  $('#column-reference').change(function(){
117
131
  if (this.checked) {
118
132
  $('.add-column-card').find('.column-html').addClass('hidden')
@@ -122,43 +136,109 @@ function displayColumnJumbo() {
122
136
  $('.add-column-card').find('.column-html').removeClass('hidden')
123
137
  }
124
138
  });
139
+ }
125
140
 
141
+ function displayColumnJumboExit() {
126
142
  $('.add-column-card .fa-times').click(function() {
127
143
  $('.add-column-card')[0].outerHTML = ""
128
144
  });
145
+ }
129
146
 
130
- $('form button').click(function() {
131
- let schema = getSchema();
132
- let referenceChecked = $('form input#column-reference')[0].checked
133
- if (referenceChecked) {
134
- let foreignTableName = $('form input#foreign-table-name').val()
135
- let cardIDs = Object.keys(schema)
136
- for(let i = 0; i < cardIDs.length; i++) {
137
- if (schema[cardIDs[i]].name === foreignTableName) {
138
- let referenceRelationship = $('input[name="ref-rel"]:checked').val()
139
- let foreignTableHTML = $(`#${cardIDs[i]}`);
147
+ function addEmptyTableToSchema(tableName = "table_name") {
148
+ tableID = `tbl-${newTableID}`;
140
149
 
141
- let prevRefs = schema[card[0].id].references
142
- let prevRefKeys = Object.keys(prevRefs)
143
- let prevStatus = false
144
- for(let i = 0; i < prevRefKeys.length; i++) {
145
- if (prevRefs[prevRefKeys[i]].foreign_table_name === foreignTableName) {
146
- prevStatus = true
147
- }
148
- }
149
- if (!prevStatus) {
150
- let foreignKeyHTML = foreignTableHTML.find(`#${foreignTableHTML[0].id}-id-column`);
151
- let listGroup = card.find('.list-group');
152
- let refObj = newRefObj(card[0].id, foreignTableName, foreignTableHTML[0].id, schema);
153
- listGroup.append(columnHTML({id: refObj.id, type: "integer", name: `${foreignTableName}_id`},"delete-ref"));
154
- let newColumnHTML = $(`#${refObj.id}`)[0]
155
- createConnector(newColumnHTML,foreignKeyHTML);
156
- }
157
- else {
150
+ let schema = getSchema();
151
+ schema[tableID] = {
152
+ name: tableName,
153
+ original_name: null,
154
+ columns: {},
155
+ references: {},
156
+ status: { original: false, modified: false, new: true, deleted: false },
157
+ id: tableID
158
+ };
159
+ setSchema(schema);
160
+ return schema[tableID]
161
+ }
162
+
163
+ function createNewRef(schema,currentTableHTML) {
164
+ let foreignTableName = $('form input#foreign-table-name').val()
165
+ let cardIDs = Object.keys(schema)
166
+ for(let i = 0; i < cardIDs.length; i++) {
167
+ if (schema[cardIDs[i]].name === foreignTableName) {
168
+ let referenceRelationship = $('input[name="ref-rel"]:checked').val();
169
+ let foreignTableHTML = $(`#${cardIDs[i]}`);
170
+
171
+ if (referenceRelationship === "mtm" ) {
172
+ let currentTableName = currentTableHTML.find('h4.table-title').text().trim();
173
+ let joinTableName = createJoinTableName(currentTableName, foreignTableName);
174
+ for(let i = 0; i < cardIDs.length; i++) {
175
+ if (schema[cardIDs[i]] && schema[cardIDs[i]].name === joinTableName) {
158
176
  console.log("already happend")
177
+ return
159
178
  }
160
179
  }
180
+ let joinTableObj = addEmptyTableToSchema(joinTableName);
181
+ $('.jsPlumbBoundary').append(tableHTML(joinTableName,500,500));
182
+ let joinTableHTML = $(`#${joinTableObj.id}`);
183
+ setCardDraggable(joinTableHTML)
184
+ let foreignTableIDColumnHTML = foreignTableHTML.find(`#${foreignTableHTML[0].id}-id-column`);
185
+ let currentTableIDColumnHTML = currentTableHTML.find(`#${currentTableHTML[0].id}-id-column`);
186
+ let currentRefObj = newRefObj(currentTableHTML[0].id, joinTableName, joinTableObj.id, schema);
187
+ let foreignRefObj = newRefObj(foreignTableHTML[0].id, joinTableName, joinTableObj.id, schema);
188
+ let joinTableListGroup = joinTableHTML.find('.list-group');
189
+ joinTableListGroup.append(columnHTML({id: currentRefObj.id, type: "integer", name: `${currentTableName}_id`},"delete-ref"));
190
+ joinTableListGroup.append(columnHTML({id: foreignRefObj.id, type: "integer", name: `${foreignTableName}_id`},"delete-ref"));
191
+ let joinTableCurrentKeyHTML = $(`#${currentRefObj.id}`)[0];
192
+ let joinTableForeignKeyHTML = $(`#${foreignRefObj.id}`)[0];
193
+ createConnector(joinTableCurrentKeyHTML,currentTableIDColumnHTML);
194
+ createConnector(joinTableForeignKeyHTML,foreignTableIDColumnHTML);
195
+ newTableID += 1;
196
+ } else {
197
+
198
+ let prevRefs = schema[currentTableHTML[0].id].references
199
+ let prevRefKeys = Object.keys(prevRefs)
200
+ let prevStatus = false
201
+ for(let i = 0; i < prevRefKeys.length; i++) {
202
+ if (prevRefs[prevRefKeys[i]].foreign_table_name === foreignTableName) {
203
+ prevStatus = true
204
+ }
205
+ }
206
+ if (!prevStatus) {
207
+ let foreignKeyHTML = foreignTableHTML.find(`#${foreignTableHTML[0].id}-id-column`);
208
+ let listGroup = currentTableHTML.find('.list-group');
209
+ let refObj = newRefObj(currentTableHTML[0].id, foreignTableName, foreignTableHTML[0].id, schema);
210
+ listGroup.append(columnHTML({id: refObj.id, type: "integer", name: `${foreignTableName}_id`},"delete-ref"));
211
+ let newColumnHTML = $(`#${refObj.id}`)[0]
212
+ createConnector(newColumnHTML,foreignKeyHTML);
213
+ }
214
+ else {
215
+ console.log("already happend")
216
+ }
161
217
  }
218
+ }
219
+ }
220
+ }
221
+
222
+ function createJoinTableName(firstName, secondName) {
223
+ if (firstName < secondName) {
224
+ return `${firstName}_${secondName}`;
225
+ } else {
226
+ return `${firstName}_${secondName}`;
227
+ }
228
+ }
229
+
230
+ function displayColumnJumbo() {
231
+ $('body').append(addColumnCardHTML());
232
+ let card = $(this).parents('.card');
233
+
234
+ refColToggle()
235
+ displayColumnJumboExit()
236
+ $('form button').click(function() {
237
+ let schema = getSchema();
238
+ let referenceChecked = $('form input#column-reference')[0].checked
239
+ if (referenceChecked) {
240
+ createNewRef(schema,card)
241
+ schema = getSchema()
162
242
  } else {
163
243
  let columnName = $('form input#column-name').val()
164
244
  let columnType = $('form select#column-type-select').val()
@@ -199,7 +279,6 @@ function addColumnCardHTML() {
199
279
  "</div>"
200
280
  }
201
281
 
202
-
203
282
  function foreignTableRadioButtonHTML() {
204
283
  return "<div class='reference-html hidden'>" +
205
284
  "<div class='form-group'>" +
@@ -207,7 +286,7 @@ function foreignTableRadioButtonHTML() {
207
286
  "</div>" +
208
287
  "<div class='form-check'>" +
209
288
  "<label class='form-check-label'>" +
210
- "<input class='form-check-input' type='radio' name='ref-rel' id='ref-rel-mto' value='mto'>" +
289
+ "<input class='form-check-input' type='radio' name='ref-rel' id='ref-rel-mto' value='mto' checked >" +
211
290
  " Many to one reference" +
212
291
  "</label>" +
213
292
  "</div>" +
@@ -258,7 +337,7 @@ function datatypeSelectoHTML() {
258
337
  function addListeners(){
259
338
  destroyTable()
260
339
  editTableName()
261
- addColumn()
340
+ addColumnDisplay()
262
341
  destroyColumn()
263
342
  destroyReference()
264
343
  $('[data-toggle="popover"]').popover()
@@ -53,20 +53,6 @@ $(document).ready(function() {
53
53
  addTableByClick("table_name")
54
54
  })
55
55
 
56
- function addEmptyTableToSchema() {
57
- tableID = `tbl-${newTableID}`;
58
- let schema = getSchema();
59
- schema[tableID] = {
60
- name: "table_name",
61
- original_name: null,
62
- columns: {},
63
- references: {},
64
- status: { original: false, modified: false, new: true, deleted: false },
65
- id: tableID
66
- };
67
- setSchema(schema);
68
- }
69
-
70
56
  createSchemaFromParams()
71
57
 
72
58
  });
@@ -7,12 +7,12 @@ function tableHTML(tableName,tableX,tableY) {
7
7
  "</h4>" +
8
8
  "<div class='table-nav-buttons'>" +
9
9
  "<i class='fa fa-plus-square' data-toggle='popover' data-trigger='hover' data-content='Add column'></i>" +
10
- "<i class='fa fa-trash' data-toggle='popover' data-trigger='hover' data-content='Destroy table'></i>" +
10
+ "<i class='fa fa-trash delete-table' data-toggle='popover' data-trigger='hover' data-content='Destroy table'></i>" +
11
11
  "</div>" +
12
12
  "</div>" +
13
13
  "<div class='card-block'>" +
14
14
  "<ul class='list-group'>" +
15
- "<li class='list-group-item' >" +
15
+ `<li class='list-group-item' id='tbl-${newTableID}-id-column' >` +
16
16
  "<span class='tag tag-default float-xs-left type-span'>integer</span>" +
17
17
  "<div class='column-title-outer' >" +
18
18
  "<span class='column-title' >id</span>" +
@@ -2,7 +2,7 @@
2
2
  <html>
3
3
 
4
4
  <head>
5
- <title>SQL Helper</title>
5
+ <title>Active Designer</title>
6
6
  <link rel="stylesheet" href="<%= @path %>/public/css/bootstrap.min.css">
7
7
  <script src="<%= @path %>/public/js/tether.min.js"></script>
8
8
  <script src="<%= @path %>/public/js/jquery-3.1.1.js"></script>
@@ -111,8 +111,9 @@
111
111
  <% end %>
112
112
  </div>
113
113
  </div>
114
- <script>localStorage.setItem("schema",JSON.stringify(<%= @schema %>))</script>
115
- <!-- <script>localStorage.setItem("schema",JSON.parse(<%= @schema %>))</script> -->
114
+ <script>
115
+ localStorage.setItem("schema",JSON.stringify(<%= @schema %>))
116
+ </script>
116
117
 
117
118
  </body>
118
119
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: active_designer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.0
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Thom Schlereth
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-01-26 00:00:00.000000000 Z
11
+ date: 2017-02-03 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Active Designer is a gem that allows a user to easily create a visual
14
14
  format of their Active Record schema.rb file for an SQL database. With just one