ponytail 0.2.0 → 0.3.0

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 (98) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -0
  3. data/README.md +8 -0
  4. data/Rakefile +2 -0
  5. data/app/assets/javascripts/ponytail/application.js +9 -0
  6. data/app/assets/javascripts/ponytail/collections/.keep +0 -0
  7. data/app/assets/javascripts/ponytail/models/column.js +43 -6
  8. data/app/assets/javascripts/ponytail/models/command.js +8 -0
  9. data/app/assets/javascripts/ponytail/models/create_table_command.js +16 -0
  10. data/app/assets/javascripts/ponytail/models/drop_table_command.js +8 -0
  11. data/app/assets/javascripts/ponytail/models/migration_file.js +36 -20
  12. data/app/assets/javascripts/ponytail/models/rename_table_command.js +9 -0
  13. data/app/assets/javascripts/ponytail/models/table.js +32 -28
  14. data/app/assets/javascripts/ponytail/ponytail.js +15 -0
  15. data/app/assets/javascripts/ponytail/routers/.keep +0 -0
  16. data/app/assets/javascripts/ponytail/views/column.js +36 -0
  17. data/app/assets/javascripts/ponytail/views/migration_file.js +24 -0
  18. data/app/assets/javascripts/ponytail/views/new_migrations.js +36 -0
  19. data/app/assets/javascripts/ponytail/views/table.js +61 -0
  20. data/app/assets/stylesheets/ponytail/application.css +2 -2
  21. data/app/controllers/ponytail/migrations_controller.rb +7 -0
  22. data/app/views/ponytail/migrations/_column.html.erb +22 -0
  23. data/app/views/ponytail/migrations/_column_view_template.html.erb +22 -0
  24. data/app/views/ponytail/migrations/_migration.html.erb +1 -0
  25. data/app/views/ponytail/migrations/_migration_file.html.erb +23 -0
  26. data/app/views/ponytail/migrations/_table.html.erb +7 -6
  27. data/app/views/ponytail/migrations/_table_view_template.html.erb +23 -0
  28. data/app/views/ponytail/migrations/index.html.erb +1 -2
  29. data/app/views/ponytail/migrations/new.html.erb +6 -26
  30. data/lib/ponytail/migration.rb +4 -0
  31. data/lib/ponytail/version.rb +1 -1
  32. data/lib/rails/mapper.rb +1 -1
  33. data/ponytail.gemspec +4 -2
  34. data/spec/controllers/migrations_controller_spec.rb +1 -1
  35. data/spec/dummy/README.rdoc +28 -0
  36. data/spec/dummy/Rakefile +6 -0
  37. data/spec/dummy/app/assets/images/.keep +0 -0
  38. data/spec/dummy/app/assets/javascripts/application.js +13 -0
  39. data/spec/dummy/app/assets/stylesheets/application.css +13 -0
  40. data/spec/dummy/app/controllers/application_controller.rb +5 -0
  41. data/spec/dummy/app/controllers/concerns/.keep +0 -0
  42. data/spec/dummy/app/helpers/application_helper.rb +2 -0
  43. data/spec/dummy/app/mailers/.keep +0 -0
  44. data/spec/dummy/app/models/.keep +0 -0
  45. data/spec/dummy/app/models/concerns/.keep +0 -0
  46. data/spec/dummy/app/views/layouts/application.html.erb +14 -0
  47. data/spec/dummy/bin/bundle +3 -0
  48. data/spec/dummy/bin/rails +4 -0
  49. data/spec/dummy/bin/rake +4 -0
  50. data/spec/dummy/config/application.rb +23 -0
  51. data/spec/dummy/config/boot.rb +5 -0
  52. data/spec/dummy/config/database.yml +25 -0
  53. data/spec/dummy/config/environment.rb +5 -0
  54. data/spec/dummy/config/environments/development.rb +29 -0
  55. data/spec/dummy/config/environments/production.rb +80 -0
  56. data/spec/dummy/config/environments/test.rb +36 -0
  57. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  58. data/spec/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  59. data/spec/dummy/config/initializers/inflections.rb +16 -0
  60. data/spec/dummy/config/initializers/mime_types.rb +5 -0
  61. data/spec/dummy/config/initializers/secret_token.rb +12 -0
  62. data/spec/dummy/config/initializers/session_store.rb +3 -0
  63. data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
  64. data/spec/dummy/config/locales/en.yml +23 -0
  65. data/spec/dummy/config/routes.rb +2 -0
  66. data/spec/dummy/config.ru +4 -0
  67. data/spec/dummy/db/migrate/20131202142657_create_users.rb +10 -0
  68. data/spec/dummy/db/migrate/20131202142714_create_books.rb +10 -0
  69. data/spec/dummy/db/schema.rb +30 -0
  70. data/spec/dummy/lib/assets/.keep +0 -0
  71. data/spec/dummy/log/.keep +0 -0
  72. data/spec/dummy/public/404.html +58 -0
  73. data/spec/dummy/public/422.html +58 -0
  74. data/spec/dummy/public/500.html +57 -0
  75. data/spec/dummy/public/favicon.ico +0 -0
  76. data/spec/features/migrations/index_spec.rb +8 -0
  77. data/spec/javascripts/helpers/build_model.js +11 -0
  78. data/spec/javascripts/ponytail/models/column_spec.js +0 -12
  79. data/spec/javascripts/ponytail/models/command_spec.js +8 -0
  80. data/spec/javascripts/ponytail/models/create_command_spec.js +16 -0
  81. data/spec/javascripts/ponytail/models/migration_file_spec.js +12 -5
  82. data/spec/javascripts/ponytail/models/table_spec.js +15 -24
  83. data/spec/javascripts/support/jasmine.yml +6 -1
  84. data/spec/spec_helper.rb +6 -1
  85. data/vendor/assets/javascripts/backbone-min.js +2 -0
  86. data/vendor/assets/javascripts/jquery.min.js +6 -0
  87. data/vendor/assets/javascripts/jquery_ujs.js +394 -0
  88. data/vendor/assets/javascripts/underscore-min.js +6 -0
  89. metadata +140 -15
  90. data/app/assets/javascripts/ponytail/index.js +0 -20
  91. data/app/assets/javascripts/ponytail/models/create_table.js +0 -13
  92. data/app/assets/javascripts/ponytail/models/rename_table.js +0 -8
  93. data/app/assets/javascripts/ponytail/views/migration_file_view.js +0 -39
  94. data/app/assets/javascripts/ponytail/views/new_migration_view.js +0 -60
  95. data/app/assets/javascripts/ponytail/views/table_view.js +0 -68
  96. data/spec/javascripts/ponytail/views/migration_file_view_spec.js +0 -17
  97. data/spec/javascripts/ponytail/views/new_migration_view_spec.js +0 -17
  98. data/spec/javascripts/ponytail/views/table_view_spec.js +0 -17
@@ -0,0 +1,394 @@
1
+ (function($, undefined) {
2
+
3
+ /**
4
+ * Unobtrusive scripting adapter for jQuery
5
+ * https://github.com/rails/jquery-ujs
6
+ *
7
+ * Requires jQuery 1.7.0 or later.
8
+ *
9
+ * Released under the MIT license
10
+ *
11
+ */
12
+
13
+ // Cut down on the number of issues from people inadvertently including jquery_ujs twice
14
+ // by detecting and raising an error when it happens.
15
+ if ( $.rails !== undefined ) {
16
+ $.error('jquery-ujs has already been loaded!');
17
+ }
18
+
19
+ // Shorthand to make it a little easier to call public rails functions from within rails.js
20
+ var rails;
21
+ var $document = $(document);
22
+
23
+ $.rails = rails = {
24
+ // Link elements bound by jquery-ujs
25
+ linkClickSelector: 'a[data-confirm], a[data-method], a[data-remote], a[data-disable-with]',
26
+
27
+ // Button elements boud jquery-ujs
28
+ buttonClickSelector: 'button[data-remote]',
29
+
30
+ // Select elements bound by jquery-ujs
31
+ inputChangeSelector: 'select[data-remote], input[data-remote], textarea[data-remote]',
32
+
33
+ // Form elements bound by jquery-ujs
34
+ formSubmitSelector: 'form',
35
+
36
+ // Form input elements bound by jquery-ujs
37
+ formInputClickSelector: 'form input[type=submit], form input[type=image], form button[type=submit], form button:not([type])',
38
+
39
+ // Form input elements disabled during form submission
40
+ disableSelector: 'input[data-disable-with], button[data-disable-with], textarea[data-disable-with]',
41
+
42
+ // Form input elements re-enabled after form submission
43
+ enableSelector: 'input[data-disable-with]:disabled, button[data-disable-with]:disabled, textarea[data-disable-with]:disabled',
44
+
45
+ // Form required input elements
46
+ requiredInputSelector: 'input[name][required]:not([disabled]),textarea[name][required]:not([disabled])',
47
+
48
+ // Form file input elements
49
+ fileInputSelector: 'input[type=file]',
50
+
51
+ // Link onClick disable selector with possible reenable after remote submission
52
+ linkDisableSelector: 'a[data-disable-with]',
53
+
54
+ // Make sure that every Ajax request sends the CSRF token
55
+ CSRFProtection: function(xhr) {
56
+ var token = $('meta[name="csrf-token"]').attr('content');
57
+ if (token) xhr.setRequestHeader('X-CSRF-Token', token);
58
+ },
59
+
60
+ // Triggers an event on an element and returns false if the event result is false
61
+ fire: function(obj, name, data) {
62
+ var event = $.Event(name);
63
+ obj.trigger(event, data);
64
+ return event.result !== false;
65
+ },
66
+
67
+ // Default confirm dialog, may be overridden with custom confirm dialog in $.rails.confirm
68
+ confirm: function(message) {
69
+ return confirm(message);
70
+ },
71
+
72
+ // Default ajax function, may be overridden with custom function in $.rails.ajax
73
+ ajax: function(options) {
74
+ return $.ajax(options);
75
+ },
76
+
77
+ // Default way to get an element's href. May be overridden at $.rails.href.
78
+ href: function(element) {
79
+ return element.attr('href');
80
+ },
81
+
82
+ // Submits "remote" forms and links with ajax
83
+ handleRemote: function(element) {
84
+ var method, url, data, elCrossDomain, crossDomain, withCredentials, dataType, options;
85
+
86
+ if (rails.fire(element, 'ajax:before')) {
87
+ elCrossDomain = element.data('cross-domain');
88
+ crossDomain = elCrossDomain === undefined ? null : elCrossDomain;
89
+ withCredentials = element.data('with-credentials') || null;
90
+ dataType = element.data('type') || ($.ajaxSettings && $.ajaxSettings.dataType);
91
+
92
+ if (element.is('form')) {
93
+ method = element.attr('method');
94
+ url = element.attr('action');
95
+ data = element.serializeArray();
96
+ // memoized value from clicked submit button
97
+ var button = element.data('ujs:submit-button');
98
+ if (button) {
99
+ data.push(button);
100
+ element.data('ujs:submit-button', null);
101
+ }
102
+ } else if (element.is(rails.inputChangeSelector)) {
103
+ method = element.data('method');
104
+ url = element.data('url');
105
+ data = element.serialize();
106
+ if (element.data('params')) data = data + "&" + element.data('params');
107
+ } else if (element.is(rails.buttonClickSelector)) {
108
+ method = element.data('method') || 'get';
109
+ url = element.data('url');
110
+ data = element.serialize();
111
+ if (element.data('params')) data = data + "&" + element.data('params');
112
+ } else {
113
+ method = element.data('method');
114
+ url = rails.href(element);
115
+ data = element.data('params') || null;
116
+ }
117
+
118
+ options = {
119
+ type: method || 'GET', data: data, dataType: dataType,
120
+ // stopping the "ajax:beforeSend" event will cancel the ajax request
121
+ beforeSend: function(xhr, settings) {
122
+ if (settings.dataType === undefined) {
123
+ xhr.setRequestHeader('accept', '*/*;q=0.5, ' + settings.accepts.script);
124
+ }
125
+ return rails.fire(element, 'ajax:beforeSend', [xhr, settings]);
126
+ },
127
+ success: function(data, status, xhr) {
128
+ element.trigger('ajax:success', [data, status, xhr]);
129
+ },
130
+ complete: function(xhr, status) {
131
+ element.trigger('ajax:complete', [xhr, status]);
132
+ },
133
+ error: function(xhr, status, error) {
134
+ element.trigger('ajax:error', [xhr, status, error]);
135
+ },
136
+ crossDomain: crossDomain
137
+ };
138
+
139
+ // There is no withCredentials for IE6-8 when
140
+ // "Enable native XMLHTTP support" is disabled
141
+ if (withCredentials) {
142
+ options.xhrFields = {
143
+ withCredentials: withCredentials
144
+ };
145
+ }
146
+
147
+ // Only pass url to `ajax` options if not blank
148
+ if (url) { options.url = url; }
149
+
150
+ var jqxhr = rails.ajax(options);
151
+ element.trigger('ajax:send', jqxhr);
152
+ return jqxhr;
153
+ } else {
154
+ return false;
155
+ }
156
+ },
157
+
158
+ // Handles "data-method" on links such as:
159
+ // <a href="/users/5" data-method="delete" rel="nofollow" data-confirm="Are you sure?">Delete</a>
160
+ handleMethod: function(link) {
161
+ var href = rails.href(link),
162
+ method = link.data('method'),
163
+ target = link.attr('target'),
164
+ csrf_token = $('meta[name=csrf-token]').attr('content'),
165
+ csrf_param = $('meta[name=csrf-param]').attr('content'),
166
+ form = $('<form method="post" action="' + href + '"></form>'),
167
+ metadata_input = '<input name="_method" value="' + method + '" type="hidden" />';
168
+
169
+ if (csrf_param !== undefined && csrf_token !== undefined) {
170
+ metadata_input += '<input name="' + csrf_param + '" value="' + csrf_token + '" type="hidden" />';
171
+ }
172
+
173
+ if (target) { form.attr('target', target); }
174
+
175
+ form.hide().append(metadata_input).appendTo('body');
176
+ form.submit();
177
+ },
178
+
179
+ /* Disables form elements:
180
+ - Caches element value in 'ujs:enable-with' data store
181
+ - Replaces element text with value of 'data-disable-with' attribute
182
+ - Sets disabled property to true
183
+ */
184
+ disableFormElements: function(form) {
185
+ form.find(rails.disableSelector).each(function() {
186
+ var element = $(this), method = element.is('button') ? 'html' : 'val';
187
+ element.data('ujs:enable-with', element[method]());
188
+ element[method](element.data('disable-with'));
189
+ element.prop('disabled', true);
190
+ });
191
+ },
192
+
193
+ /* Re-enables disabled form elements:
194
+ - Replaces element text with cached value from 'ujs:enable-with' data store (created in `disableFormElements`)
195
+ - Sets disabled property to false
196
+ */
197
+ enableFormElements: function(form) {
198
+ form.find(rails.enableSelector).each(function() {
199
+ var element = $(this), method = element.is('button') ? 'html' : 'val';
200
+ if (element.data('ujs:enable-with')) element[method](element.data('ujs:enable-with'));
201
+ element.prop('disabled', false);
202
+ });
203
+ },
204
+
205
+ /* For 'data-confirm' attribute:
206
+ - Fires `confirm` event
207
+ - Shows the confirmation dialog
208
+ - Fires the `confirm:complete` event
209
+
210
+ Returns `true` if no function stops the chain and user chose yes; `false` otherwise.
211
+ Attaching a handler to the element's `confirm` event that returns a `falsy` value cancels the confirmation dialog.
212
+ Attaching a handler to the element's `confirm:complete` event that returns a `falsy` value makes this function
213
+ return false. The `confirm:complete` event is fired whether or not the user answered true or false to the dialog.
214
+ */
215
+ allowAction: function(element) {
216
+ var message = element.data('confirm'),
217
+ answer = false, callback;
218
+ if (!message) { return true; }
219
+
220
+ if (rails.fire(element, 'confirm')) {
221
+ answer = rails.confirm(message);
222
+ callback = rails.fire(element, 'confirm:complete', [answer]);
223
+ }
224
+ return answer && callback;
225
+ },
226
+
227
+ // Helper function which checks for blank inputs in a form that match the specified CSS selector
228
+ blankInputs: function(form, specifiedSelector, nonBlank) {
229
+ var inputs = $(), input, valueToCheck,
230
+ selector = specifiedSelector || 'input,textarea',
231
+ allInputs = form.find(selector);
232
+
233
+ allInputs.each(function() {
234
+ input = $(this);
235
+ valueToCheck = input.is('input[type=checkbox],input[type=radio]') ? input.is(':checked') : input.val();
236
+ // If nonBlank and valueToCheck are both truthy, or nonBlank and valueToCheck are both falsey
237
+ if (!valueToCheck === !nonBlank) {
238
+
239
+ // Don't count unchecked required radio if other radio with same name is checked
240
+ if (input.is('input[type=radio]') && allInputs.filter('input[type=radio]:checked[name="' + input.attr('name') + '"]').length) {
241
+ return true; // Skip to next input
242
+ }
243
+
244
+ inputs = inputs.add(input);
245
+ }
246
+ });
247
+ return inputs.length ? inputs : false;
248
+ },
249
+
250
+ // Helper function which checks for non-blank inputs in a form that match the specified CSS selector
251
+ nonBlankInputs: function(form, specifiedSelector) {
252
+ return rails.blankInputs(form, specifiedSelector, true); // true specifies nonBlank
253
+ },
254
+
255
+ // Helper function, needed to provide consistent behavior in IE
256
+ stopEverything: function(e) {
257
+ $(e.target).trigger('ujs:everythingStopped');
258
+ e.stopImmediatePropagation();
259
+ return false;
260
+ },
261
+
262
+ // replace element's html with the 'data-disable-with' after storing original html
263
+ // and prevent clicking on it
264
+ disableElement: function(element) {
265
+ element.data('ujs:enable-with', element.html()); // store enabled state
266
+ element.html(element.data('disable-with')); // set to disabled state
267
+ element.bind('click.railsDisable', function(e) { // prevent further clicking
268
+ return rails.stopEverything(e);
269
+ });
270
+ },
271
+
272
+ // restore element to its original state which was disabled by 'disableElement' above
273
+ enableElement: function(element) {
274
+ if (element.data('ujs:enable-with') !== undefined) {
275
+ element.html(element.data('ujs:enable-with')); // set to old enabled state
276
+ element.removeData('ujs:enable-with'); // clean up cache
277
+ }
278
+ element.unbind('click.railsDisable'); // enable element
279
+ }
280
+
281
+ };
282
+
283
+ if (rails.fire($document, 'rails:attachBindings')) {
284
+
285
+ $.ajaxPrefilter(function(options, originalOptions, xhr){ if ( !options.crossDomain ) { rails.CSRFProtection(xhr); }});
286
+
287
+ $document.delegate(rails.linkDisableSelector, 'ajax:complete', function() {
288
+ rails.enableElement($(this));
289
+ });
290
+
291
+ $document.delegate(rails.linkClickSelector, 'click.rails', function(e) {
292
+ var link = $(this), method = link.data('method'), data = link.data('params');
293
+ if (!rails.allowAction(link)) return rails.stopEverything(e);
294
+
295
+ if (link.is(rails.linkDisableSelector)) rails.disableElement(link);
296
+
297
+ if (link.data('remote') !== undefined) {
298
+ if ( (e.metaKey || e.ctrlKey) && (!method || method === 'GET') && !data ) { return true; }
299
+
300
+ var handleRemote = rails.handleRemote(link);
301
+ // response from rails.handleRemote() will either be false or a deferred object promise.
302
+ if (handleRemote === false) {
303
+ rails.enableElement(link);
304
+ } else {
305
+ handleRemote.error( function() { rails.enableElement(link); } );
306
+ }
307
+ return false;
308
+
309
+ } else if (link.data('method')) {
310
+ rails.handleMethod(link);
311
+ return false;
312
+ }
313
+ });
314
+
315
+ $document.delegate(rails.buttonClickSelector, 'click.rails', function(e) {
316
+ var button = $(this);
317
+ if (!rails.allowAction(button)) return rails.stopEverything(e);
318
+
319
+ rails.handleRemote(button);
320
+ return false;
321
+ });
322
+
323
+ $document.delegate(rails.inputChangeSelector, 'change.rails', function(e) {
324
+ var link = $(this);
325
+ if (!rails.allowAction(link)) return rails.stopEverything(e);
326
+
327
+ rails.handleRemote(link);
328
+ return false;
329
+ });
330
+
331
+ $document.delegate(rails.formSubmitSelector, 'submit.rails', function(e) {
332
+ var form = $(this),
333
+ remote = form.data('remote') !== undefined,
334
+ blankRequiredInputs = rails.blankInputs(form, rails.requiredInputSelector),
335
+ nonBlankFileInputs = rails.nonBlankInputs(form, rails.fileInputSelector);
336
+
337
+ if (!rails.allowAction(form)) return rails.stopEverything(e);
338
+
339
+ // skip other logic when required values are missing or file upload is present
340
+ if (blankRequiredInputs && form.attr("novalidate") == undefined && rails.fire(form, 'ajax:aborted:required', [blankRequiredInputs])) {
341
+ return rails.stopEverything(e);
342
+ }
343
+
344
+ if (remote) {
345
+ if (nonBlankFileInputs) {
346
+ // slight timeout so that the submit button gets properly serialized
347
+ // (make it easy for event handler to serialize form without disabled values)
348
+ setTimeout(function(){ rails.disableFormElements(form); }, 13);
349
+ var aborted = rails.fire(form, 'ajax:aborted:file', [nonBlankFileInputs]);
350
+
351
+ // re-enable form elements if event bindings return false (canceling normal form submission)
352
+ if (!aborted) { setTimeout(function(){ rails.enableFormElements(form); }, 13); }
353
+
354
+ return aborted;
355
+ }
356
+
357
+ rails.handleRemote(form);
358
+ return false;
359
+
360
+ } else {
361
+ // slight timeout so that the submit button gets properly serialized
362
+ setTimeout(function(){ rails.disableFormElements(form); }, 13);
363
+ }
364
+ });
365
+
366
+ $document.delegate(rails.formInputClickSelector, 'click.rails', function(event) {
367
+ var button = $(this);
368
+
369
+ if (!rails.allowAction(button)) return rails.stopEverything(event);
370
+
371
+ // register the pressed submit button
372
+ var name = button.attr('name'),
373
+ data = name ? {name:name, value:button.val()} : null;
374
+
375
+ button.closest('form').data('ujs:submit-button', data);
376
+ });
377
+
378
+ $document.delegate(rails.formSubmitSelector, 'ajax:beforeSend.rails', function(event) {
379
+ if (this == event.target) rails.disableFormElements($(this));
380
+ });
381
+
382
+ $document.delegate(rails.formSubmitSelector, 'ajax:complete.rails', function(event) {
383
+ if (this == event.target) rails.enableFormElements($(this));
384
+ });
385
+
386
+ $(function(){
387
+ // making sure that all forms have actual up-to-date token(cached forms contain old one)
388
+ var csrf_token = $('meta[name=csrf-token]').attr('content');
389
+ var csrf_param = $('meta[name=csrf-param]').attr('content');
390
+ $('form input[name="' + csrf_param + '"]').val(csrf_token);
391
+ });
392
+ }
393
+
394
+ })( jQuery );
@@ -0,0 +1,6 @@
1
+ // Underscore.js 1.5.2
2
+ // http://underscorejs.org
3
+ // (c) 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
4
+ // Underscore may be freely distributed under the MIT license.
5
+ (function(){var n=this,t=n._,r={},e=Array.prototype,u=Object.prototype,i=Function.prototype,a=e.push,o=e.slice,c=e.concat,l=u.toString,f=u.hasOwnProperty,s=e.forEach,p=e.map,h=e.reduce,v=e.reduceRight,g=e.filter,d=e.every,m=e.some,y=e.indexOf,b=e.lastIndexOf,x=Array.isArray,w=Object.keys,_=i.bind,j=function(n){return n instanceof j?n:this instanceof j?(this._wrapped=n,void 0):new j(n)};"undefined"!=typeof exports?("undefined"!=typeof module&&module.exports&&(exports=module.exports=j),exports._=j):n._=j,j.VERSION="1.5.2";var A=j.each=j.forEach=function(n,t,e){if(null!=n)if(s&&n.forEach===s)n.forEach(t,e);else if(n.length===+n.length){for(var u=0,i=n.length;i>u;u++)if(t.call(e,n[u],u,n)===r)return}else for(var a=j.keys(n),u=0,i=a.length;i>u;u++)if(t.call(e,n[a[u]],a[u],n)===r)return};j.map=j.collect=function(n,t,r){var e=[];return null==n?e:p&&n.map===p?n.map(t,r):(A(n,function(n,u,i){e.push(t.call(r,n,u,i))}),e)};var E="Reduce of empty array with no initial value";j.reduce=j.foldl=j.inject=function(n,t,r,e){var u=arguments.length>2;if(null==n&&(n=[]),h&&n.reduce===h)return e&&(t=j.bind(t,e)),u?n.reduce(t,r):n.reduce(t);if(A(n,function(n,i,a){u?r=t.call(e,r,n,i,a):(r=n,u=!0)}),!u)throw new TypeError(E);return r},j.reduceRight=j.foldr=function(n,t,r,e){var u=arguments.length>2;if(null==n&&(n=[]),v&&n.reduceRight===v)return e&&(t=j.bind(t,e)),u?n.reduceRight(t,r):n.reduceRight(t);var i=n.length;if(i!==+i){var a=j.keys(n);i=a.length}if(A(n,function(o,c,l){c=a?a[--i]:--i,u?r=t.call(e,r,n[c],c,l):(r=n[c],u=!0)}),!u)throw new TypeError(E);return r},j.find=j.detect=function(n,t,r){var e;return O(n,function(n,u,i){return t.call(r,n,u,i)?(e=n,!0):void 0}),e},j.filter=j.select=function(n,t,r){var e=[];return null==n?e:g&&n.filter===g?n.filter(t,r):(A(n,function(n,u,i){t.call(r,n,u,i)&&e.push(n)}),e)},j.reject=function(n,t,r){return j.filter(n,function(n,e,u){return!t.call(r,n,e,u)},r)},j.every=j.all=function(n,t,e){t||(t=j.identity);var u=!0;return null==n?u:d&&n.every===d?n.every(t,e):(A(n,function(n,i,a){return(u=u&&t.call(e,n,i,a))?void 0:r}),!!u)};var O=j.some=j.any=function(n,t,e){t||(t=j.identity);var u=!1;return null==n?u:m&&n.some===m?n.some(t,e):(A(n,function(n,i,a){return u||(u=t.call(e,n,i,a))?r:void 0}),!!u)};j.contains=j.include=function(n,t){return null==n?!1:y&&n.indexOf===y?n.indexOf(t)!=-1:O(n,function(n){return n===t})},j.invoke=function(n,t){var r=o.call(arguments,2),e=j.isFunction(t);return j.map(n,function(n){return(e?t:n[t]).apply(n,r)})},j.pluck=function(n,t){return j.map(n,function(n){return n[t]})},j.where=function(n,t,r){return j.isEmpty(t)?r?void 0:[]:j[r?"find":"filter"](n,function(n){for(var r in t)if(t[r]!==n[r])return!1;return!0})},j.findWhere=function(n,t){return j.where(n,t,!0)},j.max=function(n,t,r){if(!t&&j.isArray(n)&&n[0]===+n[0]&&n.length<65535)return Math.max.apply(Math,n);if(!t&&j.isEmpty(n))return-1/0;var e={computed:-1/0,value:-1/0};return A(n,function(n,u,i){var a=t?t.call(r,n,u,i):n;a>e.computed&&(e={value:n,computed:a})}),e.value},j.min=function(n,t,r){if(!t&&j.isArray(n)&&n[0]===+n[0]&&n.length<65535)return Math.min.apply(Math,n);if(!t&&j.isEmpty(n))return 1/0;var e={computed:1/0,value:1/0};return A(n,function(n,u,i){var a=t?t.call(r,n,u,i):n;a<e.computed&&(e={value:n,computed:a})}),e.value},j.shuffle=function(n){var t,r=0,e=[];return A(n,function(n){t=j.random(r++),e[r-1]=e[t],e[t]=n}),e},j.sample=function(n,t,r){return arguments.length<2||r?n[j.random(n.length-1)]:j.shuffle(n).slice(0,Math.max(0,t))};var k=function(n){return j.isFunction(n)?n:function(t){return t[n]}};j.sortBy=function(n,t,r){var e=k(t);return j.pluck(j.map(n,function(n,t,u){return{value:n,index:t,criteria:e.call(r,n,t,u)}}).sort(function(n,t){var r=n.criteria,e=t.criteria;if(r!==e){if(r>e||r===void 0)return 1;if(e>r||e===void 0)return-1}return n.index-t.index}),"value")};var F=function(n){return function(t,r,e){var u={},i=null==r?j.identity:k(r);return A(t,function(r,a){var o=i.call(e,r,a,t);n(u,o,r)}),u}};j.groupBy=F(function(n,t,r){(j.has(n,t)?n[t]:n[t]=[]).push(r)}),j.indexBy=F(function(n,t,r){n[t]=r}),j.countBy=F(function(n,t){j.has(n,t)?n[t]++:n[t]=1}),j.sortedIndex=function(n,t,r,e){r=null==r?j.identity:k(r);for(var u=r.call(e,t),i=0,a=n.length;a>i;){var o=i+a>>>1;r.call(e,n[o])<u?i=o+1:a=o}return i},j.toArray=function(n){return n?j.isArray(n)?o.call(n):n.length===+n.length?j.map(n,j.identity):j.values(n):[]},j.size=function(n){return null==n?0:n.length===+n.length?n.length:j.keys(n).length},j.first=j.head=j.take=function(n,t,r){return null==n?void 0:null==t||r?n[0]:o.call(n,0,t)},j.initial=function(n,t,r){return o.call(n,0,n.length-(null==t||r?1:t))},j.last=function(n,t,r){return null==n?void 0:null==t||r?n[n.length-1]:o.call(n,Math.max(n.length-t,0))},j.rest=j.tail=j.drop=function(n,t,r){return o.call(n,null==t||r?1:t)},j.compact=function(n){return j.filter(n,j.identity)};var M=function(n,t,r){return t&&j.every(n,j.isArray)?c.apply(r,n):(A(n,function(n){j.isArray(n)||j.isArguments(n)?t?a.apply(r,n):M(n,t,r):r.push(n)}),r)};j.flatten=function(n,t){return M(n,t,[])},j.without=function(n){return j.difference(n,o.call(arguments,1))},j.uniq=j.unique=function(n,t,r,e){j.isFunction(t)&&(e=r,r=t,t=!1);var u=r?j.map(n,r,e):n,i=[],a=[];return A(u,function(r,e){(t?e&&a[a.length-1]===r:j.contains(a,r))||(a.push(r),i.push(n[e]))}),i},j.union=function(){return j.uniq(j.flatten(arguments,!0))},j.intersection=function(n){var t=o.call(arguments,1);return j.filter(j.uniq(n),function(n){return j.every(t,function(t){return j.indexOf(t,n)>=0})})},j.difference=function(n){var t=c.apply(e,o.call(arguments,1));return j.filter(n,function(n){return!j.contains(t,n)})},j.zip=function(){for(var n=j.max(j.pluck(arguments,"length").concat(0)),t=new Array(n),r=0;n>r;r++)t[r]=j.pluck(arguments,""+r);return t},j.object=function(n,t){if(null==n)return{};for(var r={},e=0,u=n.length;u>e;e++)t?r[n[e]]=t[e]:r[n[e][0]]=n[e][1];return r},j.indexOf=function(n,t,r){if(null==n)return-1;var e=0,u=n.length;if(r){if("number"!=typeof r)return e=j.sortedIndex(n,t),n[e]===t?e:-1;e=0>r?Math.max(0,u+r):r}if(y&&n.indexOf===y)return n.indexOf(t,r);for(;u>e;e++)if(n[e]===t)return e;return-1},j.lastIndexOf=function(n,t,r){if(null==n)return-1;var e=null!=r;if(b&&n.lastIndexOf===b)return e?n.lastIndexOf(t,r):n.lastIndexOf(t);for(var u=e?r:n.length;u--;)if(n[u]===t)return u;return-1},j.range=function(n,t,r){arguments.length<=1&&(t=n||0,n=0),r=arguments[2]||1;for(var e=Math.max(Math.ceil((t-n)/r),0),u=0,i=new Array(e);e>u;)i[u++]=n,n+=r;return i};var R=function(){};j.bind=function(n,t){var r,e;if(_&&n.bind===_)return _.apply(n,o.call(arguments,1));if(!j.isFunction(n))throw new TypeError;return r=o.call(arguments,2),e=function(){if(!(this instanceof e))return n.apply(t,r.concat(o.call(arguments)));R.prototype=n.prototype;var u=new R;R.prototype=null;var i=n.apply(u,r.concat(o.call(arguments)));return Object(i)===i?i:u}},j.partial=function(n){var t=o.call(arguments,1);return function(){return n.apply(this,t.concat(o.call(arguments)))}},j.bindAll=function(n){var t=o.call(arguments,1);if(0===t.length)throw new Error("bindAll must be passed function names");return A(t,function(t){n[t]=j.bind(n[t],n)}),n},j.memoize=function(n,t){var r={};return t||(t=j.identity),function(){var e=t.apply(this,arguments);return j.has(r,e)?r[e]:r[e]=n.apply(this,arguments)}},j.delay=function(n,t){var r=o.call(arguments,2);return setTimeout(function(){return n.apply(null,r)},t)},j.defer=function(n){return j.delay.apply(j,[n,1].concat(o.call(arguments,1)))},j.throttle=function(n,t,r){var e,u,i,a=null,o=0;r||(r={});var c=function(){o=r.leading===!1?0:new Date,a=null,i=n.apply(e,u)};return function(){var l=new Date;o||r.leading!==!1||(o=l);var f=t-(l-o);return e=this,u=arguments,0>=f?(clearTimeout(a),a=null,o=l,i=n.apply(e,u)):a||r.trailing===!1||(a=setTimeout(c,f)),i}},j.debounce=function(n,t,r){var e,u,i,a,o;return function(){i=this,u=arguments,a=new Date;var c=function(){var l=new Date-a;t>l?e=setTimeout(c,t-l):(e=null,r||(o=n.apply(i,u)))},l=r&&!e;return e||(e=setTimeout(c,t)),l&&(o=n.apply(i,u)),o}},j.once=function(n){var t,r=!1;return function(){return r?t:(r=!0,t=n.apply(this,arguments),n=null,t)}},j.wrap=function(n,t){return function(){var r=[n];return a.apply(r,arguments),t.apply(this,r)}},j.compose=function(){var n=arguments;return function(){for(var t=arguments,r=n.length-1;r>=0;r--)t=[n[r].apply(this,t)];return t[0]}},j.after=function(n,t){return function(){return--n<1?t.apply(this,arguments):void 0}},j.keys=w||function(n){if(n!==Object(n))throw new TypeError("Invalid object");var t=[];for(var r in n)j.has(n,r)&&t.push(r);return t},j.values=function(n){for(var t=j.keys(n),r=t.length,e=new Array(r),u=0;r>u;u++)e[u]=n[t[u]];return e},j.pairs=function(n){for(var t=j.keys(n),r=t.length,e=new Array(r),u=0;r>u;u++)e[u]=[t[u],n[t[u]]];return e},j.invert=function(n){for(var t={},r=j.keys(n),e=0,u=r.length;u>e;e++)t[n[r[e]]]=r[e];return t},j.functions=j.methods=function(n){var t=[];for(var r in n)j.isFunction(n[r])&&t.push(r);return t.sort()},j.extend=function(n){return A(o.call(arguments,1),function(t){if(t)for(var r in t)n[r]=t[r]}),n},j.pick=function(n){var t={},r=c.apply(e,o.call(arguments,1));return A(r,function(r){r in n&&(t[r]=n[r])}),t},j.omit=function(n){var t={},r=c.apply(e,o.call(arguments,1));for(var u in n)j.contains(r,u)||(t[u]=n[u]);return t},j.defaults=function(n){return A(o.call(arguments,1),function(t){if(t)for(var r in t)n[r]===void 0&&(n[r]=t[r])}),n},j.clone=function(n){return j.isObject(n)?j.isArray(n)?n.slice():j.extend({},n):n},j.tap=function(n,t){return t(n),n};var S=function(n,t,r,e){if(n===t)return 0!==n||1/n==1/t;if(null==n||null==t)return n===t;n instanceof j&&(n=n._wrapped),t instanceof j&&(t=t._wrapped);var u=l.call(n);if(u!=l.call(t))return!1;switch(u){case"[object String]":return n==String(t);case"[object Number]":return n!=+n?t!=+t:0==n?1/n==1/t:n==+t;case"[object Date]":case"[object Boolean]":return+n==+t;case"[object RegExp]":return n.source==t.source&&n.global==t.global&&n.multiline==t.multiline&&n.ignoreCase==t.ignoreCase}if("object"!=typeof n||"object"!=typeof t)return!1;for(var i=r.length;i--;)if(r[i]==n)return e[i]==t;var a=n.constructor,o=t.constructor;if(a!==o&&!(j.isFunction(a)&&a instanceof a&&j.isFunction(o)&&o instanceof o))return!1;r.push(n),e.push(t);var c=0,f=!0;if("[object Array]"==u){if(c=n.length,f=c==t.length)for(;c--&&(f=S(n[c],t[c],r,e)););}else{for(var s in n)if(j.has(n,s)&&(c++,!(f=j.has(t,s)&&S(n[s],t[s],r,e))))break;if(f){for(s in t)if(j.has(t,s)&&!c--)break;f=!c}}return r.pop(),e.pop(),f};j.isEqual=function(n,t){return S(n,t,[],[])},j.isEmpty=function(n){if(null==n)return!0;if(j.isArray(n)||j.isString(n))return 0===n.length;for(var t in n)if(j.has(n,t))return!1;return!0},j.isElement=function(n){return!(!n||1!==n.nodeType)},j.isArray=x||function(n){return"[object Array]"==l.call(n)},j.isObject=function(n){return n===Object(n)},A(["Arguments","Function","String","Number","Date","RegExp"],function(n){j["is"+n]=function(t){return l.call(t)=="[object "+n+"]"}}),j.isArguments(arguments)||(j.isArguments=function(n){return!(!n||!j.has(n,"callee"))}),"function"!=typeof/./&&(j.isFunction=function(n){return"function"==typeof n}),j.isFinite=function(n){return isFinite(n)&&!isNaN(parseFloat(n))},j.isNaN=function(n){return j.isNumber(n)&&n!=+n},j.isBoolean=function(n){return n===!0||n===!1||"[object Boolean]"==l.call(n)},j.isNull=function(n){return null===n},j.isUndefined=function(n){return n===void 0},j.has=function(n,t){return f.call(n,t)},j.noConflict=function(){return n._=t,this},j.identity=function(n){return n},j.times=function(n,t,r){for(var e=Array(Math.max(0,n)),u=0;n>u;u++)e[u]=t.call(r,u);return e},j.random=function(n,t){return null==t&&(t=n,n=0),n+Math.floor(Math.random()*(t-n+1))};var I={escape:{"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#x27;"}};I.unescape=j.invert(I.escape);var T={escape:new RegExp("["+j.keys(I.escape).join("")+"]","g"),unescape:new RegExp("("+j.keys(I.unescape).join("|")+")","g")};j.each(["escape","unescape"],function(n){j[n]=function(t){return null==t?"":(""+t).replace(T[n],function(t){return I[n][t]})}}),j.result=function(n,t){if(null==n)return void 0;var r=n[t];return j.isFunction(r)?r.call(n):r},j.mixin=function(n){A(j.functions(n),function(t){var r=j[t]=n[t];j.prototype[t]=function(){var n=[this._wrapped];return a.apply(n,arguments),z.call(this,r.apply(j,n))}})};var N=0;j.uniqueId=function(n){var t=++N+"";return n?n+t:t},j.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var q=/(.)^/,B={"'":"'","\\":"\\","\r":"r","\n":"n"," ":"t","\u2028":"u2028","\u2029":"u2029"},D=/\\|'|\r|\n|\t|\u2028|\u2029/g;j.template=function(n,t,r){var e;r=j.defaults({},r,j.templateSettings);var u=new RegExp([(r.escape||q).source,(r.interpolate||q).source,(r.evaluate||q).source].join("|")+"|$","g"),i=0,a="__p+='";n.replace(u,function(t,r,e,u,o){return a+=n.slice(i,o).replace(D,function(n){return"\\"+B[n]}),r&&(a+="'+\n((__t=("+r+"))==null?'':_.escape(__t))+\n'"),e&&(a+="'+\n((__t=("+e+"))==null?'':__t)+\n'"),u&&(a+="';\n"+u+"\n__p+='"),i=o+t.length,t}),a+="';\n",r.variable||(a="with(obj||{}){\n"+a+"}\n"),a="var __t,__p='',__j=Array.prototype.join,"+"print=function(){__p+=__j.call(arguments,'');};\n"+a+"return __p;\n";try{e=new Function(r.variable||"obj","_",a)}catch(o){throw o.source=a,o}if(t)return e(t,j);var c=function(n){return e.call(this,n,j)};return c.source="function("+(r.variable||"obj")+"){\n"+a+"}",c},j.chain=function(n){return j(n).chain()};var z=function(n){return this._chain?j(n).chain():n};j.mixin(j),A(["pop","push","reverse","shift","sort","splice","unshift"],function(n){var t=e[n];j.prototype[n]=function(){var r=this._wrapped;return t.apply(r,arguments),"shift"!=n&&"splice"!=n||0!==r.length||delete r[0],z.call(this,r)}}),A(["concat","join","slice"],function(n){var t=e[n];j.prototype[n]=function(){return z.call(this,t.apply(this._wrapped,arguments))}}),j.extend(j.prototype,{chain:function(){return this._chain=!0,this},value:function(){return this._wrapped}})}).call(this);
6
+ //# sourceMappingURL=underscore-min.map
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ponytail
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - sinsoku
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-12-14 00:00:00.000000000 Z
11
+ date: 2013-12-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -53,7 +53,7 @@ dependencies:
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
- name: rspec
56
+ name: rspec-rails
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - '>='
@@ -68,6 +68,20 @@ dependencies:
68
68
  version: '0'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: jasmine
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ~>
74
+ - !ruby/object:Gem::Version
75
+ version: '1.3'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ~>
81
+ - !ruby/object:Gem::Version
82
+ version: '1.3'
83
+ - !ruby/object:Gem::Dependency
84
+ name: capybara
71
85
  requirement: !ruby/object:Gem::Requirement
72
86
  requirements:
73
87
  - - '>='
@@ -94,6 +108,20 @@ dependencies:
94
108
  - - '>='
95
109
  - !ruby/object:Gem::Version
96
110
  version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: sqlite3
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - '>='
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - '>='
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
97
125
  description: Ponytail is a Rails engine that shows the migrations.
98
126
  email:
99
127
  - sinsoku.listy@gmail.com
@@ -110,22 +138,31 @@ files:
110
138
  - README.md
111
139
  - Rakefile
112
140
  - app/assets/javascripts/ponytail/application.js
113
- - app/assets/javascripts/ponytail/index.js
141
+ - app/assets/javascripts/ponytail/collections/.keep
114
142
  - app/assets/javascripts/ponytail/models/column.js
115
- - app/assets/javascripts/ponytail/models/create_table.js
143
+ - app/assets/javascripts/ponytail/models/command.js
144
+ - app/assets/javascripts/ponytail/models/create_table_command.js
145
+ - app/assets/javascripts/ponytail/models/drop_table_command.js
116
146
  - app/assets/javascripts/ponytail/models/migration_file.js
117
- - app/assets/javascripts/ponytail/models/rename_table.js
147
+ - app/assets/javascripts/ponytail/models/rename_table_command.js
118
148
  - app/assets/javascripts/ponytail/models/table.js
119
- - app/assets/javascripts/ponytail/views/migration_file_view.js
120
- - app/assets/javascripts/ponytail/views/new_migration_view.js
121
- - app/assets/javascripts/ponytail/views/table_view.js
149
+ - app/assets/javascripts/ponytail/ponytail.js
150
+ - app/assets/javascripts/ponytail/routers/.keep
151
+ - app/assets/javascripts/ponytail/views/column.js
152
+ - app/assets/javascripts/ponytail/views/migration_file.js
153
+ - app/assets/javascripts/ponytail/views/new_migrations.js
154
+ - app/assets/javascripts/ponytail/views/table.js
122
155
  - app/assets/stylesheets/ponytail/application.css
123
156
  - app/controllers/ponytail/migrations_controller.rb
124
157
  - app/views/layouts/ponytail/application.html.erb
158
+ - app/views/ponytail/migrations/_column.html.erb
159
+ - app/views/ponytail/migrations/_column_view_template.html.erb
125
160
  - app/views/ponytail/migrations/_migration.html.erb
161
+ - app/views/ponytail/migrations/_migration_file.html.erb
126
162
  - app/views/ponytail/migrations/_new_errors.html.erb
127
163
  - app/views/ponytail/migrations/_notice.html.erb
128
164
  - app/views/ponytail/migrations/_table.html.erb
165
+ - app/views/ponytail/migrations/_table_view_template.html.erb
129
166
  - app/views/ponytail/migrations/index.html.erb
130
167
  - app/views/ponytail/migrations/new.html.erb
131
168
  - config/routes.rb
@@ -137,13 +174,55 @@ files:
137
174
  - lib/rails/mapper.rb
138
175
  - ponytail.gemspec
139
176
  - spec/controllers/migrations_controller_spec.rb
177
+ - spec/dummy/README.rdoc
178
+ - spec/dummy/Rakefile
179
+ - spec/dummy/app/assets/images/.keep
180
+ - spec/dummy/app/assets/javascripts/application.js
181
+ - spec/dummy/app/assets/stylesheets/application.css
182
+ - spec/dummy/app/controllers/application_controller.rb
183
+ - spec/dummy/app/controllers/concerns/.keep
184
+ - spec/dummy/app/helpers/application_helper.rb
185
+ - spec/dummy/app/mailers/.keep
186
+ - spec/dummy/app/models/.keep
187
+ - spec/dummy/app/models/concerns/.keep
188
+ - spec/dummy/app/views/layouts/application.html.erb
189
+ - spec/dummy/bin/bundle
190
+ - spec/dummy/bin/rails
191
+ - spec/dummy/bin/rake
192
+ - spec/dummy/config.ru
193
+ - spec/dummy/config/application.rb
194
+ - spec/dummy/config/boot.rb
195
+ - spec/dummy/config/database.yml
196
+ - spec/dummy/config/environment.rb
197
+ - spec/dummy/config/environments/development.rb
198
+ - spec/dummy/config/environments/production.rb
199
+ - spec/dummy/config/environments/test.rb
200
+ - spec/dummy/config/initializers/backtrace_silencers.rb
201
+ - spec/dummy/config/initializers/filter_parameter_logging.rb
202
+ - spec/dummy/config/initializers/inflections.rb
203
+ - spec/dummy/config/initializers/mime_types.rb
204
+ - spec/dummy/config/initializers/secret_token.rb
205
+ - spec/dummy/config/initializers/session_store.rb
206
+ - spec/dummy/config/initializers/wrap_parameters.rb
207
+ - spec/dummy/config/locales/en.yml
208
+ - spec/dummy/config/routes.rb
209
+ - spec/dummy/db/migrate/20131202142657_create_users.rb
210
+ - spec/dummy/db/migrate/20131202142714_create_books.rb
211
+ - spec/dummy/db/schema.rb
212
+ - spec/dummy/lib/assets/.keep
213
+ - spec/dummy/log/.keep
214
+ - spec/dummy/public/404.html
215
+ - spec/dummy/public/422.html
216
+ - spec/dummy/public/500.html
217
+ - spec/dummy/public/favicon.ico
218
+ - spec/features/migrations/index_spec.rb
140
219
  - spec/javascripts/helpers/.keep
220
+ - spec/javascripts/helpers/build_model.js
141
221
  - spec/javascripts/ponytail/models/column_spec.js
222
+ - spec/javascripts/ponytail/models/command_spec.js
223
+ - spec/javascripts/ponytail/models/create_command_spec.js
142
224
  - spec/javascripts/ponytail/models/migration_file_spec.js
143
225
  - spec/javascripts/ponytail/models/table_spec.js
144
- - spec/javascripts/ponytail/views/migration_file_view_spec.js
145
- - spec/javascripts/ponytail/views/new_migration_view_spec.js
146
- - spec/javascripts/ponytail/views/table_view_spec.js
147
226
  - spec/javascripts/support/jasmine.yml
148
227
  - spec/javascripts/support/jasmine_helper.rb
149
228
  - spec/ponytail/migration_spec.rb
@@ -151,6 +230,10 @@ files:
151
230
  - spec/ponytail_spec.rb
152
231
  - spec/rails/mapper_spec.rb
153
232
  - spec/spec_helper.rb
233
+ - vendor/assets/javascripts/backbone-min.js
234
+ - vendor/assets/javascripts/jquery.min.js
235
+ - vendor/assets/javascripts/jquery_ujs.js
236
+ - vendor/assets/javascripts/underscore-min.js
154
237
  homepage: https://github.com/sinsoku/ponytail
155
238
  licenses:
156
239
  - MIT
@@ -177,13 +260,55 @@ specification_version: 4
177
260
  summary: Ponytail is a Rails engine that shows the migrations.
178
261
  test_files:
179
262
  - spec/controllers/migrations_controller_spec.rb
263
+ - spec/dummy/README.rdoc
264
+ - spec/dummy/Rakefile
265
+ - spec/dummy/app/assets/images/.keep
266
+ - spec/dummy/app/assets/javascripts/application.js
267
+ - spec/dummy/app/assets/stylesheets/application.css
268
+ - spec/dummy/app/controllers/application_controller.rb
269
+ - spec/dummy/app/controllers/concerns/.keep
270
+ - spec/dummy/app/helpers/application_helper.rb
271
+ - spec/dummy/app/mailers/.keep
272
+ - spec/dummy/app/models/.keep
273
+ - spec/dummy/app/models/concerns/.keep
274
+ - spec/dummy/app/views/layouts/application.html.erb
275
+ - spec/dummy/bin/bundle
276
+ - spec/dummy/bin/rails
277
+ - spec/dummy/bin/rake
278
+ - spec/dummy/config.ru
279
+ - spec/dummy/config/application.rb
280
+ - spec/dummy/config/boot.rb
281
+ - spec/dummy/config/database.yml
282
+ - spec/dummy/config/environment.rb
283
+ - spec/dummy/config/environments/development.rb
284
+ - spec/dummy/config/environments/production.rb
285
+ - spec/dummy/config/environments/test.rb
286
+ - spec/dummy/config/initializers/backtrace_silencers.rb
287
+ - spec/dummy/config/initializers/filter_parameter_logging.rb
288
+ - spec/dummy/config/initializers/inflections.rb
289
+ - spec/dummy/config/initializers/mime_types.rb
290
+ - spec/dummy/config/initializers/secret_token.rb
291
+ - spec/dummy/config/initializers/session_store.rb
292
+ - spec/dummy/config/initializers/wrap_parameters.rb
293
+ - spec/dummy/config/locales/en.yml
294
+ - spec/dummy/config/routes.rb
295
+ - spec/dummy/db/migrate/20131202142657_create_users.rb
296
+ - spec/dummy/db/migrate/20131202142714_create_books.rb
297
+ - spec/dummy/db/schema.rb
298
+ - spec/dummy/lib/assets/.keep
299
+ - spec/dummy/log/.keep
300
+ - spec/dummy/public/404.html
301
+ - spec/dummy/public/422.html
302
+ - spec/dummy/public/500.html
303
+ - spec/dummy/public/favicon.ico
304
+ - spec/features/migrations/index_spec.rb
180
305
  - spec/javascripts/helpers/.keep
306
+ - spec/javascripts/helpers/build_model.js
181
307
  - spec/javascripts/ponytail/models/column_spec.js
308
+ - spec/javascripts/ponytail/models/command_spec.js
309
+ - spec/javascripts/ponytail/models/create_command_spec.js
182
310
  - spec/javascripts/ponytail/models/migration_file_spec.js
183
311
  - spec/javascripts/ponytail/models/table_spec.js
184
- - spec/javascripts/ponytail/views/migration_file_view_spec.js
185
- - spec/javascripts/ponytail/views/new_migration_view_spec.js
186
- - spec/javascripts/ponytail/views/table_view_spec.js
187
312
  - spec/javascripts/support/jasmine.yml
188
313
  - spec/javascripts/support/jasmine_helper.rb
189
314
  - spec/ponytail/migration_spec.rb