dropzonejs-rails 0.4.11 → 0.4.12

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3e72ebde5086f7653ba4b2ff9faf9ba1247a832d
4
- data.tar.gz: ca8b70f7a0ddbee0002bc570383bc76095d09e1b
3
+ metadata.gz: 20229c96f62878fc1f45521de96014fde6ff6ebd
4
+ data.tar.gz: ace779f77685ab4e67a5187d1c2547eee81ad2fa
5
5
  SHA512:
6
- metadata.gz: 2721ae0a488c2a4fc21c7cc39517f6bb57de7d8047df5d598ba361b1b36e4082eb7be235ea932068512dde18486b721477d0d5127f74de78754b22ed931b8277
7
- data.tar.gz: 8ed7a066b5a47585b2e77098bd230503785e121dd7ed8cc74d5b5605e72bbaa785df68e2d50e280ddfaace1d9e1f6c3e36bc1328d6bc22d4657757a7444cdc94
6
+ metadata.gz: 716b5a17f76ae375d0a073c985284ae88ea53ee3087c6ab8f44f44fcb33fbf873ecbc419003c3d75cba61925b931b2bdb29149654b00d23fcb31f215568d2965
7
+ data.tar.gz: 0092e7f67f209b100bb9506464b18ee2437e5975a67785239793c60cd29788b2b79c371908c8129a2e7be4b5eb57aeed1abd3ca318a6812977d4a1ed1ac53f68
data/README.md CHANGED
@@ -4,7 +4,7 @@ Integrate [Matias Meno's Dropzone](http://www.dropzonejs.com/) awesome file uplo
4
4
 
5
5
  ## Version
6
6
 
7
- The latest version of this gem bundles **Dropzone v3.7.4**.
7
+ The latest version of this gem bundles **Dropzone v3.8.2**.
8
8
 
9
9
  ## Installation and usage
10
10
 
@@ -1,4 +1,4 @@
1
1
  module DropzonejsRails
2
- VERSION = '0.4.11'
3
- DROPZONE_VERSION = '3.7.4'
2
+ VERSION = '0.4.12'
3
+ DROPZONE_VERSION = '3.8.2'
4
4
  end
@@ -242,7 +242,8 @@ function mixin(obj) {
242
242
  * @api public
243
243
  */
244
244
 
245
- Emitter.prototype.on = function(event, fn){
245
+ Emitter.prototype.on =
246
+ Emitter.prototype.addEventListener = function(event, fn){
246
247
  this._callbacks = this._callbacks || {};
247
248
  (this._callbacks[event] = this._callbacks[event] || [])
248
249
  .push(fn);
@@ -268,7 +269,7 @@ Emitter.prototype.once = function(event, fn){
268
269
  fn.apply(this, arguments);
269
270
  }
270
271
 
271
- fn._off = on;
272
+ on.fn = fn;
272
273
  this.on(event, on);
273
274
  return this;
274
275
  };
@@ -285,8 +286,17 @@ Emitter.prototype.once = function(event, fn){
285
286
 
286
287
  Emitter.prototype.off =
287
288
  Emitter.prototype.removeListener =
288
- Emitter.prototype.removeAllListeners = function(event, fn){
289
+ Emitter.prototype.removeAllListeners =
290
+ Emitter.prototype.removeEventListener = function(event, fn){
289
291
  this._callbacks = this._callbacks || {};
292
+
293
+ // all
294
+ if (0 == arguments.length) {
295
+ this._callbacks = {};
296
+ return this;
297
+ }
298
+
299
+ // specific event
290
300
  var callbacks = this._callbacks[event];
291
301
  if (!callbacks) return this;
292
302
 
@@ -297,8 +307,14 @@ Emitter.prototype.removeAllListeners = function(event, fn){
297
307
  }
298
308
 
299
309
  // remove specific handler
300
- var i = callbacks.indexOf(fn._off || fn);
301
- if (~i) callbacks.splice(i, 1);
310
+ var cb;
311
+ for (var i = 0; i < callbacks.length; i++) {
312
+ cb = callbacks[i];
313
+ if (cb === fn || cb.fn === fn) {
314
+ callbacks.splice(i, 1);
315
+ break;
316
+ }
317
+ }
302
318
  return this;
303
319
  };
304
320
 
@@ -389,7 +405,7 @@ require.register("dropzone/lib/dropzone.js", function(exports, require, module){
389
405
 
390
406
 
391
407
  (function() {
392
- var Dropzone, Em, camelize, contentLoaded, noop, without,
408
+ var Dropzone, Em, camelize, contentLoaded, detectVerticalSquash, drawImageIOSFix, noop, without,
393
409
  __hasProp = {}.hasOwnProperty,
394
410
  __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
395
411
  __slice = [].slice;
@@ -412,7 +428,7 @@ require.register("dropzone/lib/dropzone.js", function(exports, require, module){
412
428
  */
413
429
 
414
430
 
415
- Dropzone.prototype.events = ["drop", "dragstart", "dragend", "dragenter", "dragover", "dragleave", "selectedfiles", "addedfile", "removedfile", "thumbnail", "error", "errormultiple", "processing", "processingmultiple", "uploadprogress", "totaluploadprogress", "sending", "sendingmultiple", "success", "successmultiple", "canceled", "canceledmultiple", "complete", "completemultiple", "reset", "maxfilesexceeded", "maxfilesreached"];
431
+ Dropzone.prototype.events = ["drop", "dragstart", "dragend", "dragenter", "dragover", "dragleave", "addedfile", "removedfile", "thumbnail", "error", "errormultiple", "processing", "processingmultiple", "uploadprogress", "totaluploadprogress", "sending", "sendingmultiple", "success", "successmultiple", "canceled", "canceledmultiple", "complete", "completemultiple", "reset", "maxfilesexceeded", "maxfilesreached"];
416
432
 
417
433
  Dropzone.prototype.defaultOptions = {
418
434
  url: null,
@@ -438,7 +454,7 @@ require.register("dropzone/lib/dropzone.js", function(exports, require, module){
438
454
  dictDefaultMessage: "Drop files here to upload",
439
455
  dictFallbackMessage: "Your browser does not support drag'n'drop file uploads.",
440
456
  dictFallbackText: "Please use the fallback form below to upload your files like in the olden days.",
441
- dictFileTooBig: "File is too big ({{filesize}}MB). Max filesize: {{maxFilesize}}MB.",
457
+ dictFileTooBig: "File is too big ({{filesize}}MiB). Max filesize: {{maxFilesize}}MiB.",
442
458
  dictInvalidFileType: "You can't upload files of this type.",
443
459
  dictResponseError: "Server responded with {{statusCode}} code.",
444
460
  dictCancelUpload: "Cancel upload",
@@ -526,17 +542,16 @@ require.register("dropzone/lib/dropzone.js", function(exports, require, module){
526
542
  dragleave: function(e) {
527
543
  return this.element.classList.remove("dz-drag-hover");
528
544
  },
529
- selectedfiles: function(files) {
530
- if (this.element === this.previewsContainer) {
531
- return this.element.classList.add("dz-started");
532
- }
533
- },
545
+ paste: noop,
534
546
  reset: function() {
535
547
  return this.element.classList.remove("dz-started");
536
548
  },
537
549
  addedfile: function(file) {
538
- var node, _i, _j, _len, _len1, _ref, _ref1,
550
+ var node, removeFileEvent, removeLink, _i, _j, _k, _len, _len1, _len2, _ref, _ref1, _ref2, _results,
539
551
  _this = this;
552
+ if (this.element === this.previewsContainer) {
553
+ this.element.classList.add("dz-started");
554
+ }
540
555
  file.previewElement = Dropzone.createElement(this.options.previewTemplate.trim());
541
556
  file.previewTemplate = file.previewElement;
542
557
  this.previewsContainer.appendChild(file.previewElement);
@@ -551,26 +566,33 @@ require.register("dropzone/lib/dropzone.js", function(exports, require, module){
551
566
  node.innerHTML = this.filesize(file.size);
552
567
  }
553
568
  if (this.options.addRemoveLinks) {
554
- file._removeLink = Dropzone.createElement("<a class=\"dz-remove\" href=\"javascript:undefined;\">" + this.options.dictRemoveFile + "</a>");
555
- file._removeLink.addEventListener("click", function(e) {
556
- e.preventDefault();
557
- e.stopPropagation();
558
- if (file.status === Dropzone.UPLOADING) {
559
- return Dropzone.confirm(_this.options.dictCancelUploadConfirmation, function() {
569
+ file._removeLink = Dropzone.createElement("<a class=\"dz-remove\" href=\"javascript:undefined;\" data-dz-remove>" + this.options.dictRemoveFile + "</a>");
570
+ file.previewElement.appendChild(file._removeLink);
571
+ }
572
+ removeFileEvent = function(e) {
573
+ e.preventDefault();
574
+ e.stopPropagation();
575
+ if (file.status === Dropzone.UPLOADING) {
576
+ return Dropzone.confirm(_this.options.dictCancelUploadConfirmation, function() {
577
+ return _this.removeFile(file);
578
+ });
579
+ } else {
580
+ if (_this.options.dictRemoveFileConfirmation) {
581
+ return Dropzone.confirm(_this.options.dictRemoveFileConfirmation, function() {
560
582
  return _this.removeFile(file);
561
583
  });
562
584
  } else {
563
- if (_this.options.dictRemoveFileConfirmation) {
564
- return Dropzone.confirm(_this.options.dictRemoveFileConfirmation, function() {
565
- return _this.removeFile(file);
566
- });
567
- } else {
568
- return _this.removeFile(file);
569
- }
585
+ return _this.removeFile(file);
570
586
  }
571
- });
572
- return file.previewElement.appendChild(file._removeLink);
587
+ }
588
+ };
589
+ _ref2 = file.previewElement.querySelectorAll("[data-dz-remove]");
590
+ _results = [];
591
+ for (_k = 0, _len2 = _ref2.length; _k < _len2; _k++) {
592
+ removeLink = _ref2[_k];
593
+ _results.push(removeLink.addEventListener("click", removeFileEvent));
573
594
  }
595
+ return _results;
574
596
  },
575
597
  removedfile: function(file) {
576
598
  var _ref;
@@ -797,11 +819,13 @@ require.register("dropzone/lib/dropzone.js", function(exports, require, module){
797
819
  _this.hiddenFileInput.style.width = "0";
798
820
  document.body.appendChild(_this.hiddenFileInput);
799
821
  return _this.hiddenFileInput.addEventListener("change", function() {
800
- var files;
822
+ var file, files, _i, _len;
801
823
  files = _this.hiddenFileInput.files;
802
824
  if (files.length) {
803
- _this.emit("selectedfiles", files);
804
- _this.handleFiles(files);
825
+ for (_i = 0, _len = files.length; _i < _len; _i++) {
826
+ file = files[_i];
827
+ _this.addFile(file);
828
+ }
805
829
  }
806
830
  return setupHiddenFileInput();
807
831
  });
@@ -823,6 +847,13 @@ require.register("dropzone/lib/dropzone.js", function(exports, require, module){
823
847
  this.on("canceled", function(file) {
824
848
  return _this.emit("complete", file);
825
849
  });
850
+ this.on("complete", function(file) {
851
+ if (_this.getUploadingFiles().length === 0 && _this.getQueuedFiles().length === 0) {
852
+ return setTimeout((function() {
853
+ return _this.emit("queuecomplete");
854
+ }), 0);
855
+ }
856
+ });
826
857
  noPropagation = function(e) {
827
858
  e.stopPropagation();
828
859
  if (e.preventDefault) {
@@ -858,6 +889,10 @@ require.register("dropzone/lib/dropzone.js", function(exports, require, module){
858
889
  },
859
890
  "dragend": function(e) {
860
891
  return _this.emit("dragend", e);
892
+ },
893
+ "paste": function(e) {
894
+ noPropagation(e);
895
+ return _this.paste(e);
861
896
  }
862
897
  }
863
898
  }
@@ -1051,17 +1086,29 @@ require.register("dropzone/lib/dropzone.js", function(exports, require, module){
1051
1086
  }
1052
1087
  this.emit("drop", e);
1053
1088
  files = e.dataTransfer.files;
1054
- this.emit("selectedfiles", files);
1055
1089
  if (files.length) {
1056
1090
  items = e.dataTransfer.items;
1057
- if (items && items.length && ((items[0].webkitGetAsEntry != null) || (items[0].getAsEntry != null))) {
1058
- this.handleItems(items);
1091
+ if (items && items.length && (items[0].webkitGetAsEntry != null)) {
1092
+ this._addFilesFromItems(items);
1059
1093
  } else {
1060
1094
  this.handleFiles(files);
1061
1095
  }
1062
1096
  }
1063
1097
  };
1064
1098
 
1099
+ Dropzone.prototype.paste = function(e) {
1100
+ var items, _ref;
1101
+ return;
1102
+ if ((e != null ? (_ref = e.clipboardData) != null ? _ref.items : void 0 : void 0) == null) {
1103
+ return;
1104
+ }
1105
+ this.emit("paste", e);
1106
+ items = e.clipboardData.items;
1107
+ if (items.length) {
1108
+ return this._addFilesFromItems(items);
1109
+ }
1110
+ };
1111
+
1065
1112
  Dropzone.prototype.handleFiles = function(files) {
1066
1113
  var file, _i, _len, _results;
1067
1114
  _results = [];
@@ -1072,21 +1119,56 @@ require.register("dropzone/lib/dropzone.js", function(exports, require, module){
1072
1119
  return _results;
1073
1120
  };
1074
1121
 
1075
- Dropzone.prototype.handleItems = function(items) {
1076
- var entry, item, _i, _len;
1122
+ Dropzone.prototype._addFilesFromItems = function(items) {
1123
+ var entry, item, _i, _len, _results;
1124
+ _results = [];
1077
1125
  for (_i = 0, _len = items.length; _i < _len; _i++) {
1078
1126
  item = items[_i];
1079
- if (item.webkitGetAsEntry != null) {
1080
- entry = item.webkitGetAsEntry();
1127
+ if ((item.webkitGetAsEntry != null) && (entry = item.webkitGetAsEntry())) {
1081
1128
  if (entry.isFile) {
1082
- this.addFile(item.getAsFile());
1129
+ _results.push(this.addFile(item.getAsFile()));
1083
1130
  } else if (entry.isDirectory) {
1084
- this.addDirectory(entry, entry.name);
1131
+ _results.push(this._addFilesFromDirectory(entry, entry.name));
1132
+ } else {
1133
+ _results.push(void 0);
1134
+ }
1135
+ } else if (item.getAsFile != null) {
1136
+ if ((item.kind == null) || item.kind === "file") {
1137
+ _results.push(this.addFile(item.getAsFile()));
1138
+ } else {
1139
+ _results.push(void 0);
1085
1140
  }
1086
1141
  } else {
1087
- this.addFile(item.getAsFile());
1142
+ _results.push(void 0);
1088
1143
  }
1089
1144
  }
1145
+ return _results;
1146
+ };
1147
+
1148
+ Dropzone.prototype._addFilesFromDirectory = function(directory, path) {
1149
+ var dirReader, entriesReader,
1150
+ _this = this;
1151
+ dirReader = directory.createReader();
1152
+ entriesReader = function(entries) {
1153
+ var entry, _i, _len;
1154
+ for (_i = 0, _len = entries.length; _i < _len; _i++) {
1155
+ entry = entries[_i];
1156
+ if (entry.isFile) {
1157
+ entry.file(function(file) {
1158
+ if (_this.options.ignoreHiddenFiles && file.name.substring(0, 1) === '.') {
1159
+ return;
1160
+ }
1161
+ file.fullPath = "" + path + "/" + file.name;
1162
+ return _this.addFile(file);
1163
+ });
1164
+ } else if (entry.isDirectory) {
1165
+ _this._addFilesFromDirectory(entry, "" + path + "/" + entry.name);
1166
+ }
1167
+ }
1168
+ };
1169
+ return dirReader.readEntries(entriesReader, function(error) {
1170
+ return typeof console !== "undefined" && console !== null ? typeof console.log === "function" ? console.log(error) : void 0 : void 0;
1171
+ });
1090
1172
  };
1091
1173
 
1092
1174
  Dropzone.prototype.accept = function(file, done) {
@@ -1112,9 +1194,7 @@ require.register("dropzone/lib/dropzone.js", function(exports, require, module){
1112
1194
  this.files.push(file);
1113
1195
  file.status = Dropzone.ADDED;
1114
1196
  this.emit("addedfile", file);
1115
- if (this.options.createImageThumbnails && file.type.match(/image.*/) && file.size <= this.options.maxThumbnailFilesize * 1024 * 1024) {
1116
- this.createThumbnail(file);
1117
- }
1197
+ this._enqueueThumbnail(file);
1118
1198
  return this.accept(file, function(error) {
1119
1199
  if (error) {
1120
1200
  file.accepted = false;
@@ -1143,36 +1223,36 @@ require.register("dropzone/lib/dropzone.js", function(exports, require, module){
1143
1223
  if (this.options.autoProcessQueue) {
1144
1224
  return setTimeout((function() {
1145
1225
  return _this.processQueue();
1146
- }), 1);
1226
+ }), 0);
1147
1227
  }
1148
1228
  } else {
1149
1229
  throw new Error("This file can't be queued because it has already been processed or was rejected.");
1150
1230
  }
1151
1231
  };
1152
1232
 
1153
- Dropzone.prototype.addDirectory = function(entry, path) {
1154
- var dirReader, entriesReader,
1155
- _this = this;
1156
- dirReader = entry.createReader();
1157
- entriesReader = function(entries) {
1158
- var _i, _len;
1159
- for (_i = 0, _len = entries.length; _i < _len; _i++) {
1160
- entry = entries[_i];
1161
- if (entry.isFile) {
1162
- entry.file(function(file) {
1163
- if (_this.options.ignoreHiddenFiles && file.name.substring(0, 1) === '.') {
1164
- return;
1165
- }
1166
- file.fullPath = "" + path + "/" + file.name;
1167
- return _this.addFile(file);
1168
- });
1169
- } else if (entry.isDirectory) {
1170
- _this.addDirectory(entry, "" + path + "/" + entry.name);
1171
- }
1172
- }
1173
- };
1174
- return dirReader.readEntries(entriesReader, function(error) {
1175
- return typeof console !== "undefined" && console !== null ? typeof console.log === "function" ? console.log(error) : void 0 : void 0;
1233
+ Dropzone.prototype._thumbnailQueue = [];
1234
+
1235
+ Dropzone.prototype._processingThumbnail = false;
1236
+
1237
+ Dropzone.prototype._enqueueThumbnail = function(file) {
1238
+ var _this = this;
1239
+ if (this.options.createImageThumbnails && file.type.match(/image.*/) && file.size <= this.options.maxThumbnailFilesize * 1024 * 1024) {
1240
+ this._thumbnailQueue.push(file);
1241
+ return setTimeout((function() {
1242
+ return _this._processThumbnailQueue();
1243
+ }), 0);
1244
+ }
1245
+ };
1246
+
1247
+ Dropzone.prototype._processThumbnailQueue = function() {
1248
+ var _this = this;
1249
+ if (this._processingThumbnail || this._thumbnailQueue.length === 0) {
1250
+ return;
1251
+ }
1252
+ this._processingThumbnail = true;
1253
+ return this.createThumbnail(this._thumbnailQueue.shift(), function() {
1254
+ _this._processingThumbnail = false;
1255
+ return _this._processThumbnailQueue();
1176
1256
  });
1177
1257
  };
1178
1258
 
@@ -1202,7 +1282,7 @@ require.register("dropzone/lib/dropzone.js", function(exports, require, module){
1202
1282
  return null;
1203
1283
  };
1204
1284
 
1205
- Dropzone.prototype.createThumbnail = function(file) {
1285
+ Dropzone.prototype.createThumbnail = function(file, callback) {
1206
1286
  var fileReader,
1207
1287
  _this = this;
1208
1288
  fileReader = new FileReader;
@@ -1224,9 +1304,12 @@ require.register("dropzone/lib/dropzone.js", function(exports, require, module){
1224
1304
  ctx = canvas.getContext("2d");
1225
1305
  canvas.width = resizeInfo.trgWidth;
1226
1306
  canvas.height = resizeInfo.trgHeight;
1227
- ctx.drawImage(img, (_ref = resizeInfo.srcX) != null ? _ref : 0, (_ref1 = resizeInfo.srcY) != null ? _ref1 : 0, resizeInfo.srcWidth, resizeInfo.srcHeight, (_ref2 = resizeInfo.trgX) != null ? _ref2 : 0, (_ref3 = resizeInfo.trgY) != null ? _ref3 : 0, resizeInfo.trgWidth, resizeInfo.trgHeight);
1307
+ drawImageIOSFix(ctx, img, (_ref = resizeInfo.srcX) != null ? _ref : 0, (_ref1 = resizeInfo.srcY) != null ? _ref1 : 0, resizeInfo.srcWidth, resizeInfo.srcHeight, (_ref2 = resizeInfo.trgX) != null ? _ref2 : 0, (_ref3 = resizeInfo.trgY) != null ? _ref3 : 0, resizeInfo.trgWidth, resizeInfo.trgHeight);
1228
1308
  thumbnail = canvas.toDataURL("image/png");
1229
- return _this.emit("thumbnail", file, thumbnail);
1309
+ _this.emit("thumbnail", file, thumbnail);
1310
+ if (callback != null) {
1311
+ return callback();
1312
+ }
1230
1313
  };
1231
1314
  return img.src = fileReader.result;
1232
1315
  };
@@ -1501,7 +1584,7 @@ require.register("dropzone/lib/dropzone.js", function(exports, require, module){
1501
1584
 
1502
1585
  })(Em);
1503
1586
 
1504
- Dropzone.version = "3.7.4";
1587
+ Dropzone.version = "3.8.2";
1505
1588
 
1506
1589
  Dropzone.options = {};
1507
1590
 
@@ -1730,6 +1813,50 @@ require.register("dropzone/lib/dropzone.js", function(exports, require, module){
1730
1813
 
1731
1814
  Dropzone.SUCCESS = "success";
1732
1815
 
1816
+ /*
1817
+
1818
+ Bugfix for iOS 6 and 7
1819
+ Source: http://stackoverflow.com/questions/11929099/html5-canvas-drawimage-ratio-bug-ios
1820
+ based on the work of https://github.com/stomita/ios-imagefile-megapixel
1821
+ */
1822
+
1823
+
1824
+ detectVerticalSquash = function(img) {
1825
+ var alpha, canvas, ctx, data, ey, ih, iw, py, ratio, sy;
1826
+ iw = img.naturalWidth;
1827
+ ih = img.naturalHeight;
1828
+ canvas = document.createElement("canvas");
1829
+ canvas.width = 1;
1830
+ canvas.height = ih;
1831
+ ctx = canvas.getContext("2d");
1832
+ ctx.drawImage(img, 0, 0);
1833
+ data = ctx.getImageData(0, 0, 1, ih).data;
1834
+ sy = 0;
1835
+ ey = ih;
1836
+ py = ih;
1837
+ while (py > sy) {
1838
+ alpha = data[(py - 1) * 4 + 3];
1839
+ if (alpha === 0) {
1840
+ ey = py;
1841
+ } else {
1842
+ sy = py;
1843
+ }
1844
+ py = (ey + sy) >> 1;
1845
+ }
1846
+ ratio = py / ih;
1847
+ if (ratio === 0) {
1848
+ return 1;
1849
+ } else {
1850
+ return ratio;
1851
+ }
1852
+ };
1853
+
1854
+ drawImageIOSFix = function(ctx, img, sx, sy, sw, sh, dx, dy, dw, dh) {
1855
+ var vertSquashRatio;
1856
+ vertSquashRatio = detectVerticalSquash(img);
1857
+ return ctx.drawImage(img, sx, sy, sw, sh, dx, dy, dw, dh / vertSquashRatio);
1858
+ };
1859
+
1733
1860
  /*
1734
1861
  # contentloaded.js
1735
1862
  #
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dropzonejs-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.11
4
+ version: 0.4.12
5
5
  platform: ruby
6
6
  authors:
7
7
  - José Nahuel Cuesta Luengo
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-12-12 00:00:00.000000000 Z
11
+ date: 2013-12-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: octokit