rxcms-dbms_plugin 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 6a5c7b2e40fce8215804e11922e889f6bc1c8ac8
4
+ data.tar.gz: 90ff1466b76e644a54ce462f99ff33545feff513
5
+ SHA512:
6
+ metadata.gz: 62b5dc9acedd100a71c041c9b2ce62eadaa69f6d278ab81145e767492ed3b4fa6e82ee0753f55f90b0c67e083302b4f17e8aa9f6f002214bac517a8e68221f3d
7
+ data.tar.gz: bbc9af329dbc6aff233b4ab81f692d543fd5a9aa4e76b629a4eb8999267c20603c2bde1440224c1d3e87ab1ee550f4c884b02de28d822fc758b7a4d536df9b87
data/MIT-LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright 2013 YOURNAME
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.rdoc ADDED
@@ -0,0 +1,3 @@
1
+ = AllianceDbmsPlugin
2
+
3
+ This project rocks and uses MIT-LICENSE.
data/Rakefile ADDED
@@ -0,0 +1,29 @@
1
+ #!/usr/bin/env rake
2
+ begin
3
+ require 'bundler/setup'
4
+ rescue LoadError
5
+ puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
6
+ end
7
+ begin
8
+ require 'rdoc/task'
9
+ rescue LoadError
10
+ require 'rdoc/rdoc'
11
+ require 'rake/rdoctask'
12
+ RDoc::Task = Rake::RDocTask
13
+ end
14
+
15
+ RDoc::Task.new(:rdoc) do |rdoc|
16
+ rdoc.rdoc_dir = 'rdoc'
17
+ rdoc.title = 'RxcmsDbmsPlugin'
18
+ rdoc.options << '--line-numbers'
19
+ rdoc.rdoc_files.include('README.rdoc')
20
+ rdoc.rdoc_files.include('lib/**/*.rb')
21
+ end
22
+
23
+ APP_RAKEFILE = File.expand_path("../spec/dummy/Rakefile", __FILE__)
24
+ load 'rails/tasks/engine.rake'
25
+
26
+
27
+
28
+ Bundler::GemHelper.install_tasks
29
+
@@ -0,0 +1,555 @@
1
+ var const_key_regex = /^[a-zA-Z\-]+$/i;
2
+
3
+ function reloadStoredQueriesList()
4
+ {
5
+ $.getJSON("/dbms/connection/query/all", function(response){
6
+ if (response.status == "success")
7
+ {
8
+ // Get previous selection
9
+ var prevActiveObj = $($(".storedQuery").filter(function(){
10
+ return $(this).hasClass("active");
11
+ }).first());
12
+ var prevActiveObjKey = null;
13
+ if (prevActiveObj != null && prevActiveObj != undefined)
14
+ {
15
+ prevActiveObjKey = $(prevActiveObj.find("span:first")).text();
16
+ }
17
+
18
+ $("#storeQueryList li:not(:first)").remove();
19
+ for (var i = 0; i < response.data.length; i++)
20
+ {
21
+ var cloned = $("#storeQueryDummy").clone();
22
+
23
+ $(cloned.find("a:first span:first")).text(response.data[i].key);
24
+ var responseData = JSON.parse(response.data[i].value);
25
+ $(cloned.find("a:first input[type=checkbox]:first")).attr("checked", responseData.enabled);
26
+ $(cloned.find("a:first input[type=checkbox]:first")).on("click", function(e){
27
+ e.stopPropagation();
28
+ var checked = $(this).is(":checked").toString();
29
+
30
+ var id = $($(this).parents("li:first")).attr("data-store-id");
31
+
32
+ $.ajax({
33
+ url: "/dbms/connection/query/update/" + id,
34
+ cache: false,
35
+ type: "PUT",
36
+ data: {
37
+ "enabled" : checked
38
+ },
39
+ before_send: function(){
40
+
41
+ },
42
+ error: function(){
43
+ Messenger().post("Unable to contact server");
44
+ },
45
+ success: function(response){
46
+ if (response.status == "success")
47
+ {
48
+ Messenger().post("The stored query was successfully updated");
49
+ }
50
+ else
51
+ {
52
+ Messenger().post("Unable to update the stored query");
53
+ }
54
+ }
55
+ });
56
+ });
57
+ $(cloned.find("a:first span:eq(1)")).on("click", function(e){
58
+ e.stopPropagation();
59
+
60
+ var $this = $(this);
61
+ var id = $($(this).parents("li:first")).attr("data-store-id");
62
+
63
+ $.ajax({
64
+ url: "/dbms/connection/query/delete/" + id,
65
+ cache: false,
66
+ type: "DELETE",
67
+ before_send: function(){
68
+
69
+ },
70
+ error: function(){
71
+ Messenger().post("Unable to contact server");
72
+ },
73
+ success: function(response){
74
+ if (response.status == "success")
75
+ {
76
+ var activeQueryObj = $($(".storedQuery").filter(function(){
77
+ return $(this).hasClass("active");
78
+ }).first());
79
+
80
+ if ($(activeQueryObj).find("span:eq(1)").get(0) == $this.get(0))
81
+ {
82
+ $("#updateSqlBtn").attr("disabled","disabled");
83
+ $("#updateSqlBtn").hide();
84
+ $("#saveSqlBtn").show();
85
+ $($("#resultTable thead:first").find("tr:first")).html("");
86
+ $("#resultTable tbody:first").html("");
87
+ }
88
+
89
+ reloadStoredQueriesList();
90
+ Messenger().post("The stored query was successfully deleted");
91
+ }
92
+ else
93
+ {
94
+ Messenger().post("Unable to delete the stored query");
95
+ }
96
+ }
97
+ });
98
+ });
99
+ cloned.attr("data-store-id", response.data[i].id);
100
+ cloned.attr("data-store-language", responseData.language);
101
+ cloned.addClass("storedQuery");
102
+ cloned.removeAttr("id");
103
+ cloned.css("display","block");
104
+
105
+ // set active if equal
106
+ if (prevActiveObjKey != null)
107
+ if ($(cloned.find("span:first")).text() == prevActiveObjKey)
108
+ cloned.addClass("active");
109
+
110
+ $("#storeQueryList").append(cloned);
111
+
112
+ }
113
+ }
114
+ else
115
+ {
116
+ Messenger().post("unable to get list of stored queries");
117
+ }
118
+ });
119
+ }
120
+
121
+ $(function(){
122
+
123
+ var elem = $("#saveSqlBtn");
124
+ var updateElem = $("#updateSqlBtn");
125
+ $.data(elem, "sqlResult", 0);
126
+ $.data(updateElem, "sqlResult", 0);
127
+
128
+ Messenger.options = {
129
+ extraClasses: 'messenger-fixed messenger-on-bottom messenger-on-right',
130
+ theme: 'air'
131
+ };
132
+
133
+ $("#dbmsTypeSelect").on("change", function(){
134
+ $(".connectorContainer").fadeOut("fast");
135
+ switch($(this).val())
136
+ {
137
+ case "mysql2":
138
+ $("#sql").fadeIn("fast");
139
+ $("#portTxt").val("3306");
140
+ break;
141
+ case "sqlite":
142
+ $("#sqlite").fadeIn("fast");
143
+ break;
144
+ case "postgresql":
145
+ $("#sql").fadeIn("fast");
146
+ $("#portTxt").val("5432");
147
+ break;
148
+ default:
149
+ }
150
+ });
151
+
152
+ $(".sqlProceedBtn").on("click", function(){
153
+
154
+ if ($("#dbmsTypeSelect").val() == "sqlite")
155
+ {
156
+ if ($("#dbTxtSqlite").val().length == 0)
157
+ {
158
+ Messenger().post("Path to database is required");
159
+ return;
160
+ }
161
+ }
162
+ else
163
+ {
164
+ var errors = "";
165
+ if ($("#hostTxt").val().length == 0) errors += "Host is required.<br />"
166
+ if ($("#portTxt").val().length == 0) errors += "Port is required.<br />"
167
+ if ($("#dbTxt").val().length == 0) errors += "Database is required.<br />"
168
+ if ($("#userTxt").val().length == 0) errors += "User is required.<br />"
169
+
170
+ if (errors.length > 0)
171
+ {
172
+ Messenger().post(errors);
173
+ return;
174
+ }
175
+ }
176
+
177
+ $("#sqlProceedBtn").attr("disabled","disabled");
178
+
179
+ $.post("/dbms/connection/make",
180
+ {
181
+ "type" : $("#dbmsTypeSelect").val(),
182
+ "host" : $("#hostTxt").val(),
183
+ "port" : $("#portTxt").val(),
184
+ "database": $("#dbmsTypeSelect").val() == "sqlite" ? $("#dbTxtSqlite").val() : $("#dbTxt").val(),
185
+ "user" : $("#userTxt").val(),
186
+ "password" : $("#passwordTxt").val()
187
+ }
188
+ ,function(response){
189
+ if (response.status == "success")
190
+ {
191
+ Messenger().post("Connection to database server was established, creating persistent database records...");
192
+
193
+ $.post("/dbms/installer/before_process", {
194
+ "dbmsAdapter" : $("#dbmsTypeSelect").val(),
195
+ "dbmsHost" : $("#hostTxt").val(),
196
+ "dbmsPort" : $("#portTxt").val(),
197
+ "dbmsDatabase" : $("#dbmsTypeSelect").val() == "sqlite" ? $("#dbTxtSqlite").val() : $("#dbTxt").val(),
198
+ "dbmsUser" : $("#userTxt").val(),
199
+ "dbmsPassword" : $("#passwordTxt").val()
200
+ }, function(response){
201
+ if (response.status == "success")
202
+ {
203
+ Messenger().post("All done, reloading...");
204
+ location.reload();
205
+ }
206
+ else
207
+ {
208
+ $("#sqlProceedBtn").removeAttr("disabled");
209
+ Messenger().post("There was a problem while doing initial processing");
210
+ }
211
+ }).error(function(){
212
+ $("#sqlProceedBtn").removeAttr("disabled");
213
+ Messenger().post("Unable to do initial processing");
214
+ })
215
+ }
216
+ else
217
+ {
218
+ Messenger().post("The current login information is invalid or component configuration items are malformed.");
219
+ location.reload();
220
+ }
221
+ }).error(function(){
222
+ $("#sqlProceedBtn").removeAttr("disabled");
223
+ Messenger().post("Unable to connect to server");
224
+ });
225
+
226
+ //$("#dataManagementConsole").fadeIn("fast");
227
+ });
228
+
229
+ // Populate stored query list
230
+ reloadStoredQueriesList();
231
+
232
+ // Retrieve data from table
233
+ $("#executeSqlBtn").on("click", function(){
234
+ var $this = $(this);
235
+ $($("#resultTable thead:first").find("tr:first")).html("");
236
+ $("#resultTable tbody:first").html("");
237
+
238
+ if ($("#sqlQueryTxt").val().length > 0)
239
+ {
240
+ $this.attr("disabled","disabled");
241
+ $.post("/dbms/connection/sql", {
242
+ "sql" : $("#sqlQueryTxt").val()
243
+ }, function(response){
244
+ if (response.status == "success")
245
+ {
246
+ var columns = response.data.columns;
247
+ var result = response.data.result;
248
+
249
+ // console.log("populating columns...");
250
+ // Populate Table columns with labels
251
+
252
+ if (columns.length > 0)
253
+ {
254
+ for (var col = 0; col < columns.length; col++)
255
+ {
256
+ var th = $("<th>" + columns[col] + "</th>")
257
+ $($("#resultTable thead:first").find("tr:first")).append(th);
258
+ }
259
+ $("#saveSqlBtn").removeAttr("disabled");
260
+ $("#updateSqlBtn").removeAttr("disabled");
261
+ }
262
+ else
263
+ {
264
+ var th = $("<th>No data</th>");
265
+ $($("#resultTable thead:first").find("tr:first")).append(th);
266
+
267
+ $("#saveSqlBtn").attr("disabled","disabled");
268
+ $("#updateSqlBtn").removeAttr("disabled");
269
+ }
270
+ // console.log("populating records...")
271
+ // Populate table records
272
+
273
+ for (var i = 0; i < result.length; i++)
274
+ {
275
+ var row = $("<tr></tr>");
276
+ for (var index in result[i])
277
+ {
278
+ console.log(result[i][index]);
279
+ var rowData = $("<td>" + result[i][index] + "</td>");
280
+ $(row).append(rowData);
281
+ }
282
+ $("#resultTable tbody:first").append(row);
283
+ }
284
+ // console.log("done...");
285
+
286
+ // set data for save button
287
+ $.data(elem, "sqlResult", columns.length);
288
+ $.data(updateElem, "sqlResult", columns.length);
289
+ }
290
+ else
291
+ {
292
+ if (response.message != undefined)
293
+ Messenger().post(response.message);
294
+
295
+ if (response.data != undefined)
296
+ // set data for save button
297
+ $.data(elem, "sqlResult", response.data.columns.length);
298
+ }
299
+
300
+ $this.removeAttr("disabled");
301
+ }).error(function(){
302
+ Messenger().post("Unable to contact server");
303
+ $this.removeAttr("disabled");
304
+ });
305
+ }
306
+
307
+ });
308
+
309
+ // Save query to table
310
+ elem.on("click", function(){
311
+ var iGood = $.data(elem, "sqlResult");
312
+ $("#processStoreQueryModalBtn").attr("data-igood", iGood);
313
+
314
+ if (iGood == 0)
315
+ {
316
+ Messenger().post("No 'select' queries were executed");
317
+ } else
318
+ {
319
+ $("#storedQueryKey").val("");
320
+ $("#storeQueryModal").modal();
321
+ }
322
+ });
323
+
324
+ updateElem.on("click", function(){
325
+ var iGood = $.data(updateElem, "sqlResult");
326
+ if (iGood == 0)
327
+ {
328
+ Messenger().post("No 'select' queries were executed");
329
+ }
330
+ else
331
+ {
332
+ // Perform update
333
+ var updateObj = $($(".storedQuery").filter(function(){
334
+ return $(this).hasClass("active");
335
+ }).first());
336
+ var id = updateObj.attr("data-store-id");
337
+
338
+ $.ajax({
339
+ url: "/dbms/connection/query/update/" + id,
340
+ cache: false,
341
+ type: "PUT",
342
+ data: {
343
+ "value" : $("#sqlQueryTxt").val().trim()
344
+ },
345
+ before_send: function(){
346
+
347
+ },
348
+ error: function(){
349
+ Messenger().post("Unable to contact server");
350
+ },
351
+ success: function(response){
352
+ if (response.status == "success")
353
+ {
354
+ Messenger().post("The stored query was successfully updated");
355
+ }
356
+ else
357
+ {
358
+ Messenger().post("Unable to update the stored query");
359
+ }
360
+ }
361
+ });
362
+ }
363
+ });
364
+
365
+ $("#processStoreQueryModalBtn").on("click", function(){
366
+ var iGood = parseInt($(this).attr("data-igood"));
367
+
368
+ if ($("#storedQueryKey").val().length > 0)
369
+ {
370
+ if (const_key_regex.test($("#storedQueryKey").val()))
371
+ {
372
+ if (iGood > 0)
373
+ {
374
+ $.post("/dbms/connection/query/store", {
375
+ "key" : $("#storedQueryKey").val().trim(),
376
+ "value" : $("#sqlQueryTxt").val().trim()
377
+ }, function(response){
378
+ if (response.status == "success")
379
+ {
380
+ $("#storeQueryModal").modal("hide");
381
+ $("#saveSqlBtn").attr("disabled","disabled");
382
+ $("#saveSqlBtn").show();
383
+ $("#updateSqlBtn").attr("disabled","disabled");
384
+ $("#updateSqlBtn").hide();
385
+ $($("#resultTable thead:first").find("tr:first")).html("");
386
+ $("#resultTable tbody:first").html("");
387
+ reloadStoredQueriesList();
388
+ Messenger().post("Query has been successfully stored");
389
+ } else
390
+ {
391
+ Messenger().post(response.message);
392
+ }
393
+ }).error(function(){
394
+ Messenger().post("Unable to contact server");
395
+ });
396
+ }
397
+ else
398
+ {
399
+ Messenger().post("Query has no results");
400
+ }
401
+ }
402
+ else
403
+ {
404
+ Messenger().post("stored query key is invalid");
405
+ }
406
+ }
407
+ else
408
+ {
409
+ Messenger().post("stored query key is required");
410
+ }
411
+ });
412
+
413
+ $("#sqlQueryTxt").on("change", function(){
414
+ // Unimplemented
415
+ });
416
+
417
+ $("#sqlQueryTxt").on("keyup", function(){
418
+ $("#saveSqlBtn").attr("disabled","disabled");
419
+ $("#updateSqlBtn").attr("disabled","disabled");
420
+ });
421
+
422
+ $("#storeQueryList").on("click", ".storedQuery", function(e){
423
+ e.stopPropagation();
424
+
425
+ $(this).siblings().removeClass("active");
426
+ if ($(this).hasClass("active"))
427
+ {
428
+ $(this).removeClass("active");
429
+ $("#sqlQueryTxt").val("");
430
+ $("#updateSqlBtn").hide();
431
+ $("#localeSqlBtn").hide();
432
+ $("#saveSqlBtn").show();
433
+ $("#saveSqlBtn").attr("disabled","disabled");
434
+ $($("#resultTable thead:first").find("tr:first")).html("");
435
+ $("#resultTable tbody:first").html("");
436
+ }
437
+ else
438
+ {
439
+ $(this).addClass("active");
440
+ $("#resultTable tbody:first").html("");
441
+ $($("#resultTable thead:first").find("tr:first")).html("");
442
+ $("#updateSqlBtn").attr("disabled","disabled");
443
+ $("#updateSqlBtn").show();
444
+ $("#localeSqlBtn").show();
445
+ $("#saveSqlBtn").hide();
446
+
447
+ var id = $(this).attr("data-store-id");
448
+ $.getJSON("/dbms/connection/query/one/" + id + "/dbms_stored_query", function(response){
449
+ if (response.status == "success")
450
+ {
451
+ var data = JSON.parse(response.data.value);
452
+ $("#sqlQueryTxt").val(data.sql);
453
+ } else
454
+ {
455
+ Messenger().post("Unable to get stored query with that key");
456
+ }
457
+ }).error(function(){
458
+ Messenger().post("Unable to contact server");
459
+ });
460
+ }
461
+ });
462
+
463
+ $("#storeQueryLanguageModal").on("shown", function(){
464
+ $("#storeQueryLanguageSelect").attr('disabled','disabled');
465
+
466
+ $.getJSON("/manager/s/items/list/locale", function(response){
467
+ $("#storeQueryLanguageSelect").append($('<option value="none" data-value=""></option>'));
468
+
469
+ for (var i = 0; i < response.length; i++)
470
+ {
471
+ var langItem = $("<option></option>");
472
+ langItem.attr("value", response[i].value);
473
+ langItem.attr("data-value", response[i].id);
474
+ langItem.text(response[i].key);
475
+
476
+ $("#storeQueryLanguageSelect").append(langItem);
477
+ }
478
+
479
+ var updateObj = $($(".storedQuery").filter(function(){
480
+ return $(this).hasClass("active");
481
+ }).first());
482
+ var currentLanguageKey = updateObj.attr("data-store-language");
483
+
484
+ $("#storeQueryLanguageSelect").val(currentLanguageKey);
485
+ $("#storeQueryLanguageSelect").removeAttr("disabled");
486
+ }).error(function(){
487
+ $("#storeQueryLanguageSelect").append($('<option value="" data-value="">error when retrieving</option>'));
488
+ });
489
+ });
490
+
491
+ $("#storeQueryLanguageModal").on("hidden", function(){
492
+ $("#storeQueryLanguageSelect").html("");
493
+ });
494
+
495
+ $("#storeQueryLanguageSelect").on("change", function(){
496
+ var languageKey = $(this).val();
497
+
498
+ var updateObj = $($(".storedQuery").filter(function(){
499
+ return $(this).hasClass("active");
500
+ }).first());
501
+ var id = updateObj.attr("data-store-id");
502
+
503
+ $.ajax({
504
+ url: "/dbms/connection/query/update/" + id,
505
+ cache: false,
506
+ type: "PUT",
507
+ data: {
508
+ "language" : languageKey
509
+ },
510
+ before_send: function(){
511
+
512
+ },
513
+ error: function(){
514
+ Messenger().post("Unable to contact server");
515
+ },
516
+ success: function(response){
517
+ if (response.status == "success")
518
+ {
519
+ updateObj.attr("data-store-language",languageKey);
520
+ Messenger().post("The stored query was successfully updated");
521
+ }
522
+ else
523
+ {
524
+ Messenger().post("Unable to update the stored query");
525
+ }
526
+ }
527
+ });
528
+
529
+ });
530
+
531
+ $("#localeSqlBtn").on("click", function(){
532
+ $("#storeQueryLanguageModal").modal();
533
+ $("#storeQueryLanguageModal").modal("show");
534
+ });
535
+
536
+ $("#uninstallBtn").on("click", function(){
537
+ var $this = $(this);
538
+ $this.attr("disabled","disabled");
539
+ $.post("/dbms/installer/uninstall", function(response){
540
+ if (response.status == "success")
541
+ {
542
+ Messenger().post("Successfully uninstalled, redirecting...");
543
+ location.reload();
544
+ }
545
+ else
546
+ {
547
+ $this.removeAttr("disabled");
548
+ Messenger().post("Unable to uninstall component");
549
+ }
550
+ }).error(function(){
551
+ Messenger().post("Unable to contact server");
552
+ $this.removeAttr("disabled");
553
+ })
554
+ });
555
+ });
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Created with JetBrains RubyMine.
3
+ * User: arthurdavis
4
+ * Date: 8/28/13
5
+ * Time: 10:51 AM
6
+ * To change this template use File | Settings | File Templates.
7
+ */