rails_db 0.6 → 0.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (113) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +24 -0
  3. data/Gemfile.lock +159 -0
  4. data/app/assets/images/rails_db/railsdb.png +0 -0
  5. data/app/assets/images/rails_db/runsql.png +0 -0
  6. data/app/assets/javascripts/rails_db/application.js +2 -1
  7. data/app/assets/javascripts/rails_db/foundation.min.js +20 -0
  8. data/app/assets/javascripts/rails_db/foundation/foundation.abide.js +426 -0
  9. data/app/assets/javascripts/rails_db/foundation/foundation.accordion.js +125 -0
  10. data/app/assets/javascripts/rails_db/foundation/foundation.alert.js +43 -0
  11. data/app/assets/javascripts/rails_db/foundation/foundation.clearing.js +586 -0
  12. data/app/assets/javascripts/rails_db/foundation/foundation.dropdown.js +468 -0
  13. data/app/assets/javascripts/rails_db/foundation/foundation.equalizer.js +104 -0
  14. data/app/assets/javascripts/rails_db/foundation/foundation.interchange.js +360 -0
  15. data/app/assets/javascripts/rails_db/foundation/foundation.joyride.js +935 -0
  16. data/app/assets/javascripts/rails_db/foundation/foundation.js +732 -0
  17. data/app/assets/javascripts/rails_db/foundation/foundation.magellan.js +214 -0
  18. data/app/assets/javascripts/rails_db/foundation/foundation.offcanvas.js +225 -0
  19. data/app/assets/javascripts/rails_db/foundation/foundation.orbit.js +476 -0
  20. data/app/assets/javascripts/rails_db/foundation/foundation.reveal.js +522 -0
  21. data/app/assets/javascripts/rails_db/foundation/foundation.slider.js +296 -0
  22. data/app/assets/javascripts/rails_db/foundation/foundation.tab.js +247 -0
  23. data/app/assets/javascripts/rails_db/foundation/foundation.tooltip.js +348 -0
  24. data/app/assets/javascripts/rails_db/foundation/foundation.topbar.js +458 -0
  25. data/app/assets/javascripts/rails_db/sticky.js +4 -16
  26. data/app/assets/javascripts/rails_db/vendor/fastclick.js +8 -0
  27. data/app/assets/javascripts/rails_db/vendor/jquery.cookie.js +8 -0
  28. data/app/assets/javascripts/rails_db/vendor/jquery.js +26 -0
  29. data/app/assets/javascripts/rails_db/vendor/modernizr.js +8 -0
  30. data/app/assets/javascripts/rails_db/vendor/placeholder.js +2 -0
  31. data/app/assets/stylesheets/rails_db/application.css +1 -0
  32. data/app/assets/stylesheets/rails_db/foundation.css +6579 -0
  33. data/app/assets/stylesheets/rails_db/foundation.min.css +1 -0
  34. data/app/assets/stylesheets/rails_db/foundation_and_overrides.css.scss +7 -4
  35. data/app/assets/stylesheets/rails_db/normalize.css +424 -0
  36. data/app/views/layouts/rails_db/application.html.erb +0 -1
  37. data/app/views/rails_db/dashboard/index.html.erb +1 -0
  38. data/app/views/rails_db/dashboard/standalone.html.erb +19 -0
  39. data/app/views/rails_db/shared/_footer.html.erb +36 -35
  40. data/app/views/rails_db/shared/_header.html.erb +7 -0
  41. data/app/views/rails_db/tables/data.js.erb +3 -1
  42. data/app/views/rails_db/tables/show.js.erb +3 -1
  43. data/bin/rails_db +3 -0
  44. data/bin/railsdb +3 -0
  45. data/bin/runsql +50 -0
  46. data/config/routes.rb +1 -1
  47. data/lib/ext/string_ext.rb +10 -0
  48. data/lib/libs.rb +24 -0
  49. data/lib/rails_db.rb +16 -8
  50. data/lib/rails_db/adapters/base_adapter.rb +21 -2
  51. data/lib/rails_db/adapters/mysql.rb +8 -0
  52. data/lib/rails_db/blank_results.rb +8 -0
  53. data/lib/rails_db/database.rb +12 -0
  54. data/lib/rails_db/mysql_result.rb +18 -0
  55. data/lib/rails_db/table.rb +10 -10
  56. data/lib/rails_db/table_data.rb +4 -4
  57. data/lib/rails_db/table_pagination.rb +1 -1
  58. data/lib/rails_db/version.rb +1 -1
  59. data/lib/standalone.rb +49 -0
  60. data/rails_db.gemspec +32 -0
  61. data/test/dashboard_controller_test.rb +3 -0
  62. data/test/dummy/db/rails_db.sqlite3 +0 -0
  63. data/test/dummy/db/rails_db_dev.sqlite3 +0 -0
  64. data/test/dummy/db/schema.rb +40 -40
  65. data/test/sql_query_test.rb +13 -0
  66. data/test/standalone/Gemfile +17 -0
  67. data/test/standalone/Gemfile.lock +138 -0
  68. data/test/standalone/README.rdoc +28 -0
  69. data/test/standalone/Rakefile +6 -0
  70. data/test/standalone/app/assets/fonts/glyphicons-halflings-regular.eot +0 -0
  71. data/test/standalone/app/assets/fonts/glyphicons-halflings-regular.svg +288 -0
  72. data/test/standalone/app/assets/fonts/glyphicons-halflings-regular.ttf +0 -0
  73. data/test/standalone/app/assets/fonts/glyphicons-halflings-regular.woff +0 -0
  74. data/test/standalone/app/assets/fonts/glyphicons-halflings-regular.woff2 +0 -0
  75. data/test/standalone/app/assets/javascripts/application.js +13 -0
  76. data/test/standalone/app/assets/stylesheets/application.css +15 -0
  77. data/test/standalone/app/assets/stylesheets/bootstrap-theme.min.css +5 -0
  78. data/test/standalone/app/assets/stylesheets/bootstrap.min.css +5 -0
  79. data/test/standalone/app/controllers/application_controller.rb +5 -0
  80. data/test/standalone/app/controllers/home_controller.rb +7 -0
  81. data/test/standalone/app/helpers/application_helper.rb +2 -0
  82. data/test/standalone/app/views/home/index.html.erb +3 -0
  83. data/test/standalone/app/views/layouts/application.html.erb +16 -0
  84. data/test/standalone/bin/bundle +3 -0
  85. data/test/standalone/bin/rails +4 -0
  86. data/test/standalone/bin/rake +4 -0
  87. data/test/standalone/bin/setup +29 -0
  88. data/test/standalone/config.ru +4 -0
  89. data/test/standalone/config/application.rb +40 -0
  90. data/test/standalone/config/boot.rb +7 -0
  91. data/test/standalone/config/database.yml +0 -0
  92. data/test/standalone/config/environment.rb +5 -0
  93. data/test/standalone/config/environments/development.rb +43 -0
  94. data/test/standalone/config/environments/production.rb +82 -0
  95. data/test/standalone/config/environments/test.rb +46 -0
  96. data/test/standalone/config/initializers/assets.rb +11 -0
  97. data/test/standalone/config/initializers/backtrace_silencers.rb +7 -0
  98. data/test/standalone/config/initializers/cookies_serializer.rb +3 -0
  99. data/test/standalone/config/initializers/filter_parameter_logging.rb +4 -0
  100. data/test/standalone/config/initializers/inflections.rb +16 -0
  101. data/test/standalone/config/initializers/mime_types.rb +4 -0
  102. data/test/standalone/config/initializers/quite_assets.rb +11 -0
  103. data/test/standalone/config/initializers/rails_db.rb +23 -0
  104. data/test/standalone/config/initializers/session_store.rb +3 -0
  105. data/test/standalone/config/initializers/wrap_parameters.rb +14 -0
  106. data/test/standalone/config/locales/en.yml +23 -0
  107. data/test/standalone/config/routes.rb +5 -0
  108. data/test/standalone/config/secrets.yml +22 -0
  109. data/test/standalone/public/404.html +67 -0
  110. data/test/standalone/public/422.html +67 -0
  111. data/test/standalone/public/500.html +66 -0
  112. data/test/standalone/public/favicon.ico +0 -0
  113. metadata +160 -37
@@ -0,0 +1,104 @@
1
+ ;(function ($, window, document, undefined) {
2
+ 'use strict';
3
+
4
+ Foundation.libs.equalizer = {
5
+ name : 'equalizer',
6
+
7
+ version : '5.5.3',
8
+
9
+ settings : {
10
+ use_tallest : true,
11
+ before_height_change : $.noop,
12
+ after_height_change : $.noop,
13
+ equalize_on_stack : false,
14
+ act_on_hidden_el: false
15
+ },
16
+
17
+ init : function (scope, method, options) {
18
+ Foundation.inherit(this, 'image_loaded');
19
+ this.bindings(method, options);
20
+ this.reflow();
21
+ },
22
+
23
+ events : function () {
24
+ this.S(window).off('.equalizer').on('resize.fndtn.equalizer', function (e) {
25
+ this.reflow();
26
+ }.bind(this));
27
+ },
28
+
29
+ equalize : function (equalizer) {
30
+ var isStacked = false,
31
+ group = equalizer.data('equalizer'),
32
+ settings = equalizer.data(this.attr_name(true)+'-init') || this.settings,
33
+ vals,
34
+ firstTopOffset;
35
+
36
+ if (settings.act_on_hidden_el) {
37
+ vals = group ? equalizer.find('['+this.attr_name()+'-watch="'+group+'"]') : equalizer.find('['+this.attr_name()+'-watch]');
38
+ }
39
+ else {
40
+ vals = group ? equalizer.find('['+this.attr_name()+'-watch="'+group+'"]:visible') : equalizer.find('['+this.attr_name()+'-watch]:visible');
41
+ }
42
+
43
+ if (vals.length === 0) {
44
+ return;
45
+ }
46
+
47
+ settings.before_height_change();
48
+ equalizer.trigger('before-height-change.fndth.equalizer');
49
+ vals.height('inherit');
50
+
51
+ if (settings.equalize_on_stack === false) {
52
+ firstTopOffset = vals.first().offset().top;
53
+ vals.each(function () {
54
+ if ($(this).offset().top !== firstTopOffset) {
55
+ isStacked = true;
56
+ return false;
57
+ }
58
+ });
59
+ if (isStacked) {
60
+ return;
61
+ }
62
+ }
63
+
64
+ var heights = vals.map(function () { return $(this).outerHeight(false) }).get();
65
+
66
+ if (settings.use_tallest) {
67
+ var max = Math.max.apply(null, heights);
68
+ vals.css('height', max);
69
+ } else {
70
+ var min = Math.min.apply(null, heights);
71
+ vals.css('height', min);
72
+ }
73
+
74
+ settings.after_height_change();
75
+ equalizer.trigger('after-height-change.fndtn.equalizer');
76
+ },
77
+
78
+ reflow : function () {
79
+ var self = this;
80
+
81
+ this.S('[' + this.attr_name() + ']', this.scope).each(function () {
82
+ var $eq_target = $(this),
83
+ media_query = $eq_target.data('equalizer-mq'),
84
+ ignore_media_query = true;
85
+
86
+ if (media_query) {
87
+ media_query = 'is_' + media_query.replace(/-/g, '_');
88
+ if (Foundation.utils.hasOwnProperty(media_query)) {
89
+ ignore_media_query = false;
90
+ }
91
+ }
92
+
93
+ self.image_loaded(self.S('img', this), function () {
94
+ if (ignore_media_query || Foundation.utils[media_query]()) {
95
+ self.equalize($eq_target)
96
+ } else {
97
+ var vals = $eq_target.find('[' + self.attr_name() + '-watch]:visible');
98
+ vals.css('height', 'auto');
99
+ }
100
+ });
101
+ });
102
+ }
103
+ };
104
+ })(jQuery, window, window.document);
@@ -0,0 +1,360 @@
1
+ ;(function ($, window, document, undefined) {
2
+ 'use strict';
3
+
4
+ Foundation.libs.interchange = {
5
+ name : 'interchange',
6
+
7
+ version : '5.5.3',
8
+
9
+ cache : {},
10
+
11
+ images_loaded : false,
12
+ nodes_loaded : false,
13
+
14
+ settings : {
15
+ load_attr : 'interchange',
16
+
17
+ named_queries : {
18
+ 'default' : 'only screen',
19
+ 'small' : Foundation.media_queries['small'],
20
+ 'small-only' : Foundation.media_queries['small-only'],
21
+ 'medium' : Foundation.media_queries['medium'],
22
+ 'medium-only' : Foundation.media_queries['medium-only'],
23
+ 'large' : Foundation.media_queries['large'],
24
+ 'large-only' : Foundation.media_queries['large-only'],
25
+ 'xlarge' : Foundation.media_queries['xlarge'],
26
+ 'xlarge-only' : Foundation.media_queries['xlarge-only'],
27
+ 'xxlarge' : Foundation.media_queries['xxlarge'],
28
+ 'landscape' : 'only screen and (orientation: landscape)',
29
+ 'portrait' : 'only screen and (orientation: portrait)',
30
+ 'retina' : 'only screen and (-webkit-min-device-pixel-ratio: 2),' +
31
+ 'only screen and (min--moz-device-pixel-ratio: 2),' +
32
+ 'only screen and (-o-min-device-pixel-ratio: 2/1),' +
33
+ 'only screen and (min-device-pixel-ratio: 2),' +
34
+ 'only screen and (min-resolution: 192dpi),' +
35
+ 'only screen and (min-resolution: 2dppx)'
36
+ },
37
+
38
+ directives : {
39
+ replace : function (el, path, trigger) {
40
+ // The trigger argument, if called within the directive, fires
41
+ // an event named after the directive on the element, passing
42
+ // any parameters along to the event that you pass to trigger.
43
+ //
44
+ // ex. trigger(), trigger([a, b, c]), or trigger(a, b, c)
45
+ //
46
+ // This allows you to bind a callback like so:
47
+ // $('#interchangeContainer').on('replace', function (e, a, b, c) {
48
+ // console.log($(this).html(), a, b, c);
49
+ // });
50
+
51
+ if (el !== null && /IMG/.test(el[0].nodeName)) {
52
+ var orig_path = $.each(el, function(){this.src = path;});
53
+ // var orig_path = el[0].src;
54
+
55
+ if (new RegExp(path, 'i').test(orig_path)) {
56
+ return;
57
+ }
58
+
59
+ el.attr("src", path);
60
+
61
+ return trigger(el[0].src);
62
+ }
63
+ var last_path = el.data(this.data_attr + '-last-path'),
64
+ self = this;
65
+
66
+ if (last_path == path) {
67
+ return;
68
+ }
69
+
70
+ if (/\.(gif|jpg|jpeg|tiff|png)([?#].*)?/i.test(path)) {
71
+ $(el).css('background-image', 'url(' + path + ')');
72
+ el.data('interchange-last-path', path);
73
+ return trigger(path);
74
+ }
75
+
76
+ return $.get(path, function (response) {
77
+ el.html(response);
78
+ el.data(self.data_attr + '-last-path', path);
79
+ trigger();
80
+ });
81
+
82
+ }
83
+ }
84
+ },
85
+
86
+ init : function (scope, method, options) {
87
+ Foundation.inherit(this, 'throttle random_str');
88
+
89
+ this.data_attr = this.set_data_attr();
90
+ $.extend(true, this.settings, method, options);
91
+ this.bindings(method, options);
92
+ this.reflow();
93
+ },
94
+
95
+ get_media_hash : function () {
96
+ var mediaHash = '';
97
+ for (var queryName in this.settings.named_queries ) {
98
+ mediaHash += matchMedia(this.settings.named_queries[queryName]).matches.toString();
99
+ }
100
+ return mediaHash;
101
+ },
102
+
103
+ events : function () {
104
+ var self = this, prevMediaHash;
105
+
106
+ $(window)
107
+ .off('.interchange')
108
+ .on('resize.fndtn.interchange', self.throttle(function () {
109
+ var currMediaHash = self.get_media_hash();
110
+ if (currMediaHash !== prevMediaHash) {
111
+ self.resize();
112
+ }
113
+ prevMediaHash = currMediaHash;
114
+ }, 50));
115
+
116
+ return this;
117
+ },
118
+
119
+ resize : function () {
120
+ var cache = this.cache;
121
+
122
+ if (!this.images_loaded || !this.nodes_loaded) {
123
+ setTimeout($.proxy(this.resize, this), 50);
124
+ return;
125
+ }
126
+
127
+ for (var uuid in cache) {
128
+ if (cache.hasOwnProperty(uuid)) {
129
+ var passed = this.results(uuid, cache[uuid]);
130
+ if (passed) {
131
+ this.settings.directives[passed
132
+ .scenario[1]].call(this, passed.el, passed.scenario[0], (function (passed) {
133
+ if (arguments[0] instanceof Array) {
134
+ var args = arguments[0];
135
+ } else {
136
+ var args = Array.prototype.slice.call(arguments, 0);
137
+ }
138
+
139
+ return function() {
140
+ passed.el.trigger(passed.scenario[1], args);
141
+ }
142
+ }(passed)));
143
+ }
144
+ }
145
+ }
146
+
147
+ },
148
+
149
+ results : function (uuid, scenarios) {
150
+ var count = scenarios.length;
151
+
152
+ if (count > 0) {
153
+ var el = this.S('[' + this.add_namespace('data-uuid') + '="' + uuid + '"]');
154
+
155
+ while (count--) {
156
+ var mq, rule = scenarios[count][2];
157
+ if (this.settings.named_queries.hasOwnProperty(rule)) {
158
+ mq = matchMedia(this.settings.named_queries[rule]);
159
+ } else {
160
+ mq = matchMedia(rule);
161
+ }
162
+ if (mq.matches) {
163
+ return {el : el, scenario : scenarios[count]};
164
+ }
165
+ }
166
+ }
167
+
168
+ return false;
169
+ },
170
+
171
+ load : function (type, force_update) {
172
+ if (typeof this['cached_' + type] === 'undefined' || force_update) {
173
+ this['update_' + type]();
174
+ }
175
+
176
+ return this['cached_' + type];
177
+ },
178
+
179
+ update_images : function () {
180
+ var images = this.S('img[' + this.data_attr + ']'),
181
+ count = images.length,
182
+ i = count,
183
+ loaded_count = 0,
184
+ data_attr = this.data_attr;
185
+
186
+ this.cache = {};
187
+ this.cached_images = [];
188
+ this.images_loaded = (count === 0);
189
+
190
+ while (i--) {
191
+ loaded_count++;
192
+ if (images[i]) {
193
+ var str = images[i].getAttribute(data_attr) || '';
194
+
195
+ if (str.length > 0) {
196
+ this.cached_images.push(images[i]);
197
+ }
198
+ }
199
+
200
+ if (loaded_count === count) {
201
+ this.images_loaded = true;
202
+ this.enhance('images');
203
+ }
204
+ }
205
+
206
+ return this;
207
+ },
208
+
209
+ update_nodes : function () {
210
+ var nodes = this.S('[' + this.data_attr + ']').not('img'),
211
+ count = nodes.length,
212
+ i = count,
213
+ loaded_count = 0,
214
+ data_attr = this.data_attr;
215
+
216
+ this.cached_nodes = [];
217
+ this.nodes_loaded = (count === 0);
218
+
219
+ while (i--) {
220
+ loaded_count++;
221
+ var str = nodes[i].getAttribute(data_attr) || '';
222
+
223
+ if (str.length > 0) {
224
+ this.cached_nodes.push(nodes[i]);
225
+ }
226
+
227
+ if (loaded_count === count) {
228
+ this.nodes_loaded = true;
229
+ this.enhance('nodes');
230
+ }
231
+ }
232
+
233
+ return this;
234
+ },
235
+
236
+ enhance : function (type) {
237
+ var i = this['cached_' + type].length;
238
+
239
+ while (i--) {
240
+ this.object($(this['cached_' + type][i]));
241
+ }
242
+
243
+ return $(window).trigger('resize.fndtn.interchange');
244
+ },
245
+
246
+ convert_directive : function (directive) {
247
+
248
+ var trimmed = this.trim(directive);
249
+
250
+ if (trimmed.length > 0) {
251
+ return trimmed;
252
+ }
253
+
254
+ return 'replace';
255
+ },
256
+
257
+ parse_scenario : function (scenario) {
258
+ // This logic had to be made more complex since some users were using commas in the url path
259
+ // So we cannot simply just split on a comma
260
+
261
+ var directive_match = scenario[0].match(/(.+),\s*(\w+)\s*$/),
262
+ // getting the mq has gotten a bit complicated since we started accounting for several use cases
263
+ // of URLs. For now we'll continue to match these scenarios, but we may consider having these scenarios
264
+ // as nested objects or arrays in F6.
265
+ // regex: match everything before close parenthesis for mq
266
+ media_query = scenario[1].match(/(.*)\)/);
267
+
268
+ if (directive_match) {
269
+ var path = directive_match[1],
270
+ directive = directive_match[2];
271
+
272
+ } else {
273
+ var cached_split = scenario[0].split(/,\s*$/),
274
+ path = cached_split[0],
275
+ directive = '';
276
+ }
277
+
278
+ return [this.trim(path), this.convert_directive(directive), this.trim(media_query[1])];
279
+ },
280
+
281
+ object : function (el) {
282
+ var raw_arr = this.parse_data_attr(el),
283
+ scenarios = [],
284
+ i = raw_arr.length;
285
+
286
+ if (i > 0) {
287
+ while (i--) {
288
+ // split array between comma delimited content and mq
289
+ // regex: comma, optional space, open parenthesis
290
+ var scenario = raw_arr[i].split(/,\s?\(/);
291
+
292
+ if (scenario.length > 1) {
293
+ var params = this.parse_scenario(scenario);
294
+ scenarios.push(params);
295
+ }
296
+ }
297
+ }
298
+
299
+ return this.store(el, scenarios);
300
+ },
301
+
302
+ store : function (el, scenarios) {
303
+ var uuid = this.random_str(),
304
+ current_uuid = el.data(this.add_namespace('uuid', true));
305
+
306
+ if (this.cache[current_uuid]) {
307
+ return this.cache[current_uuid];
308
+ }
309
+
310
+ el.attr(this.add_namespace('data-uuid'), uuid);
311
+ return this.cache[uuid] = scenarios;
312
+ },
313
+
314
+ trim : function (str) {
315
+
316
+ if (typeof str === 'string') {
317
+ return $.trim(str);
318
+ }
319
+
320
+ return str;
321
+ },
322
+
323
+ set_data_attr : function (init) {
324
+ if (init) {
325
+ if (this.namespace.length > 0) {
326
+ return this.namespace + '-' + this.settings.load_attr;
327
+ }
328
+
329
+ return this.settings.load_attr;
330
+ }
331
+
332
+ if (this.namespace.length > 0) {
333
+ return 'data-' + this.namespace + '-' + this.settings.load_attr;
334
+ }
335
+
336
+ return 'data-' + this.settings.load_attr;
337
+ },
338
+
339
+ parse_data_attr : function (el) {
340
+ var raw = el.attr(this.attr_name()).split(/\[(.*?)\]/),
341
+ i = raw.length,
342
+ output = [];
343
+
344
+ while (i--) {
345
+ if (raw[i].replace(/[\W\d]+/, '').length > 4) {
346
+ output.push(raw[i]);
347
+ }
348
+ }
349
+
350
+ return output;
351
+ },
352
+
353
+ reflow : function () {
354
+ this.load('images', true);
355
+ this.load('nodes', true);
356
+ }
357
+
358
+ };
359
+
360
+ }(jQuery, window, window.document));