async-rails 0.9.2 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 84a0b44242d773115b71ca9efda654e051c93ceb
4
- data.tar.gz: 0d0827df05b8edcce202a088e60d146d80114a5a
3
+ metadata.gz: 8f2f0d5008e172bd87a7dcea946cd29a2e0e9235
4
+ data.tar.gz: b52c5f238f50edd12bde0e5c1612b332bae398db
5
5
  SHA512:
6
- metadata.gz: 9c2b3a70e8c5486071623d9eb55851033459f2e0dc1bbb24c0afbbfb8f517df246b1064fb87ef60de693399b052ca002b2d27eef040593d9100dc8bb018b64cd
7
- data.tar.gz: 284547879ee97b6ce987bbba519d805a3d3c15e53129d1e9fc0b36a5e6c56a8f9c37a5294c44569ee66aa9267102f0655192607e583bbd202a259ac4441406c2
6
+ metadata.gz: e99ba2afc03e64eec2378082145aefcd585e56b92d4118788f1c7541df60b0eb0b8605ce7ae62ca55a114934776a785d46cecb9645ba4168d9ea3211854fc475
7
+ data.tar.gz: 1b13b2f9dc0b83fe726162441e26d4d00491ca67c93d2298dc5df9d40278579477522032b3171ce020ba9a56d120bc34418c6a383fe439e318038f49a6c0cf07
@@ -1,5 +1,5 @@
1
1
  module Async
2
2
  module Rails
3
- VERSION = "0.9.2"
3
+ VERSION = "1.0.2"
4
4
  end
5
5
  end
@@ -5,16 +5,24 @@
5
5
  * Copyright 2010-2014 Caolan McMahon
6
6
  * Released under the MIT license
7
7
  */
8
- /*jshint onevar: false, indent:4 */
9
- /*global setImmediate: false, setTimeout: false, console: false */
10
8
  (function () {
11
9
 
12
10
  var async = {};
11
+ var noop = function () {};
13
12
 
14
13
  // global on the server, window in the browser
15
14
  var root, previous_async;
16
15
 
17
- root = this;
16
+ if (typeof window == 'object' && this === window) {
17
+ root = window;
18
+ }
19
+ else if (typeof global == 'object' && this === global) {
20
+ root = global;
21
+ }
22
+ else {
23
+ root = this;
24
+ }
25
+
18
26
  if (root != null) {
19
27
  previous_async = root.async;
20
28
  }
@@ -30,7 +38,7 @@
30
38
  if (called) throw new Error("Callback was already called.");
31
39
  called = true;
32
40
  fn.apply(root, arguments);
33
- }
41
+ };
34
42
  }
35
43
 
36
44
  //// cross-browser compatiblity functions ////
@@ -42,36 +50,39 @@
42
50
  };
43
51
 
44
52
  var _each = function (arr, iterator) {
45
- for (var i = 0; i < arr.length; i += 1) {
46
- iterator(arr[i], i, arr);
47
- }
53
+ var index = -1,
54
+ length = arr.length;
55
+
56
+ while (++index < length) {
57
+ iterator(arr[index], index, arr);
58
+ }
48
59
  };
49
60
 
50
61
  var _map = function (arr, iterator) {
51
- if (arr.map) {
52
- return arr.map(iterator);
53
- }
54
- var results = [];
55
- _each(arr, function (x, i, a) {
56
- results.push(iterator(x, i, a));
57
- });
58
- return results;
62
+ var index = -1,
63
+ length = arr.length,
64
+ result = Array(length);
65
+
66
+ while (++index < length) {
67
+ result[index] = iterator(arr[index], index, arr);
68
+ }
69
+ return result;
59
70
  };
60
71
 
61
72
  var _reduce = function (arr, iterator, memo) {
62
- if (arr.reduce) {
63
- return arr.reduce(iterator, memo);
64
- }
65
73
  _each(arr, function (x, i, a) {
66
74
  memo = iterator(memo, x, i, a);
67
75
  });
68
76
  return memo;
69
77
  };
70
78
 
71
- var _keys = function (obj) {
72
- if (Object.keys) {
73
- return Object.keys(obj);
74
- }
79
+ var _forEachOf = function (object, iterator) {
80
+ _each(_keys(object), function (key) {
81
+ iterator(object[key], key);
82
+ });
83
+ };
84
+
85
+ var _keys = Object.keys || function (obj) {
75
86
  var keys = [];
76
87
  for (var k in obj) {
77
88
  if (obj.hasOwnProperty(k)) {
@@ -81,14 +92,38 @@
81
92
  return keys;
82
93
  };
83
94
 
95
+ var _baseSlice = function (arr, start) {
96
+ start = start || 0;
97
+ var index = -1;
98
+ var length = arr.length;
99
+
100
+ if (start) {
101
+ length -= start;
102
+ length = length < 0 ? 0 : length;
103
+ }
104
+ var result = Array(length);
105
+
106
+ while (++index < length) {
107
+ result[index] = arr[index + start];
108
+ }
109
+ return result;
110
+ };
111
+
84
112
  //// exported async module functions ////
85
113
 
86
114
  //// nextTick implementation with browser-compatible fallback ////
115
+
116
+ // capture the global reference to guard against fakeTimer mocks
117
+ var _setImmediate;
118
+ if (typeof setImmediate === 'function') {
119
+ _setImmediate = setImmediate;
120
+ }
121
+
87
122
  if (typeof process === 'undefined' || !(process.nextTick)) {
88
- if (typeof setImmediate === 'function') {
123
+ if (_setImmediate) {
89
124
  async.nextTick = function (fn) {
90
125
  // not a direct alias for IE10 compatibility
91
- setImmediate(fn);
126
+ _setImmediate(fn);
92
127
  };
93
128
  async.setImmediate = async.nextTick;
94
129
  }
@@ -101,10 +136,10 @@
101
136
  }
102
137
  else {
103
138
  async.nextTick = process.nextTick;
104
- if (typeof setImmediate !== 'undefined') {
139
+ if (_setImmediate) {
105
140
  async.setImmediate = function (fn) {
106
141
  // not a direct alias for IE10 compatibility
107
- setImmediate(fn);
142
+ _setImmediate(fn);
108
143
  };
109
144
  }
110
145
  else {
@@ -113,9 +148,9 @@
113
148
  }
114
149
 
115
150
  async.each = function (arr, iterator, callback) {
116
- callback = callback || function () {};
151
+ callback = callback || noop;
117
152
  if (!arr.length) {
118
- return callback();
153
+ return callback(null);
119
154
  }
120
155
  var completed = 0;
121
156
  _each(arr, function (x) {
@@ -124,12 +159,12 @@
124
159
  function done(err) {
125
160
  if (err) {
126
161
  callback(err);
127
- callback = function () {};
162
+ callback = noop;
128
163
  }
129
164
  else {
130
165
  completed += 1;
131
166
  if (completed >= arr.length) {
132
- callback();
167
+ callback(null);
133
168
  }
134
169
  }
135
170
  }
@@ -137,21 +172,21 @@
137
172
  async.forEach = async.each;
138
173
 
139
174
  async.eachSeries = function (arr, iterator, callback) {
140
- callback = callback || function () {};
175
+ callback = callback || noop;
141
176
  if (!arr.length) {
142
- return callback();
177
+ return callback(null);
143
178
  }
144
179
  var completed = 0;
145
180
  var iterate = function () {
146
181
  iterator(arr[completed], function (err) {
147
182
  if (err) {
148
183
  callback(err);
149
- callback = function () {};
184
+ callback = noop;
150
185
  }
151
186
  else {
152
187
  completed += 1;
153
188
  if (completed >= arr.length) {
154
- callback();
189
+ callback(null);
155
190
  }
156
191
  else {
157
192
  iterate();
@@ -163,6 +198,7 @@
163
198
  };
164
199
  async.forEachSeries = async.eachSeries;
165
200
 
201
+
166
202
  async.eachLimit = function (arr, limit, iterator, callback) {
167
203
  var fn = _eachLimit(limit);
168
204
  fn.apply(null, [arr, iterator, callback]);
@@ -172,32 +208,143 @@
172
208
  var _eachLimit = function (limit) {
173
209
 
174
210
  return function (arr, iterator, callback) {
175
- callback = callback || function () {};
211
+ callback = callback || noop;
176
212
  if (!arr.length || limit <= 0) {
177
- return callback();
213
+ return callback(null);
178
214
  }
179
215
  var completed = 0;
180
216
  var started = 0;
181
217
  var running = 0;
218
+ var errored = false;
182
219
 
183
220
  (function replenish () {
184
221
  if (completed >= arr.length) {
185
- return callback();
222
+ return callback(null);
186
223
  }
187
224
 
188
- while (running < limit && started < arr.length) {
225
+ while (running < limit && started < arr.length && !errored) {
189
226
  started += 1;
190
227
  running += 1;
191
228
  iterator(arr[started - 1], function (err) {
192
229
  if (err) {
193
230
  callback(err);
194
- callback = function () {};
231
+ errored = true;
232
+ callback = noop;
195
233
  }
196
234
  else {
197
235
  completed += 1;
198
236
  running -= 1;
199
237
  if (completed >= arr.length) {
200
- callback();
238
+ callback(null);
239
+ }
240
+ else {
241
+ replenish();
242
+ }
243
+ }
244
+ });
245
+ }
246
+ })();
247
+ };
248
+ };
249
+
250
+
251
+
252
+ async.forEachOf = async.eachOf = function (object, iterator, callback) {
253
+ callback = callback || function () {};
254
+ var size = object.length || _keys(object).length;
255
+ var completed = 0;
256
+ if (!size) {
257
+ return callback(null);
258
+ }
259
+ _forEachOf(object, function (value, key) {
260
+ iterator(object[key], key, function (err) {
261
+ if (err) {
262
+ callback(err);
263
+ callback = function () {};
264
+ } else {
265
+ completed += 1;
266
+ if (completed === size) {
267
+ callback(null);
268
+ }
269
+ }
270
+ });
271
+ });
272
+ };
273
+
274
+ async.forEachOfSeries = async.eachOfSeries = function (obj, iterator, callback) {
275
+ callback = callback || function () {};
276
+ var keys = _keys(obj);
277
+ var size = keys.length;
278
+ if (!size) {
279
+ return callback();
280
+ }
281
+ var completed = 0;
282
+ var iterate = function () {
283
+ var sync = true;
284
+ var key = keys[completed];
285
+ iterator(obj[key], key, function (err) {
286
+ if (err) {
287
+ callback(err);
288
+ callback = function () {};
289
+ }
290
+ else {
291
+ completed += 1;
292
+ if (completed >= size) {
293
+ callback(null);
294
+ }
295
+ else {
296
+ if (sync) {
297
+ async.nextTick(iterate);
298
+ }
299
+ else {
300
+ iterate();
301
+ }
302
+ }
303
+ }
304
+ });
305
+ sync = false;
306
+ };
307
+ iterate();
308
+ };
309
+
310
+
311
+
312
+ async.forEachOfLimit = async.eachOfLimit = function (obj, limit, iterator, callback) {
313
+ _forEachOfLimit(limit)(obj, iterator, callback);
314
+ };
315
+
316
+ var _forEachOfLimit = function (limit) {
317
+
318
+ return function (obj, iterator, callback) {
319
+ callback = callback || function () {};
320
+ var keys = _keys(obj);
321
+ var size = keys.length;
322
+ if (!size || limit <= 0) {
323
+ return callback(null);
324
+ }
325
+ var completed = 0;
326
+ var started = 0;
327
+ var running = 0;
328
+
329
+ (function replenish () {
330
+ if (completed >= size) {
331
+ return callback();
332
+ }
333
+
334
+ while (running < limit && started < size) {
335
+ started += 1;
336
+ running += 1;
337
+ var key = keys[started - 1];
338
+ iterator(obj[key], key, function (err) {
339
+ if (err) {
340
+ callback(err);
341
+ callback = function () {};
342
+ }
343
+ else {
344
+ completed += 1;
345
+ running -= 1;
346
+ if (completed >= size) {
347
+ callback(null);
201
348
  }
202
349
  else {
203
350
  replenish();
@@ -212,19 +359,19 @@
212
359
 
213
360
  var doParallel = function (fn) {
214
361
  return function () {
215
- var args = Array.prototype.slice.call(arguments);
362
+ var args = _baseSlice(arguments);
216
363
  return fn.apply(null, [async.each].concat(args));
217
364
  };
218
365
  };
219
366
  var doParallelLimit = function(limit, fn) {
220
367
  return function () {
221
- var args = Array.prototype.slice.call(arguments);
368
+ var args = _baseSlice(arguments);
222
369
  return fn.apply(null, [_eachLimit(limit)].concat(args));
223
370
  };
224
371
  };
225
372
  var doSeries = function (fn) {
226
373
  return function () {
227
- var args = Array.prototype.slice.call(arguments);
374
+ var args = _baseSlice(arguments);
228
375
  return fn.apply(null, [async.eachSeries].concat(args));
229
376
  };
230
377
  };
@@ -271,7 +418,7 @@
271
418
  callback(err);
272
419
  });
273
420
  }, function (err) {
274
- callback(err, memo);
421
+ callback(err || null, memo);
275
422
  });
276
423
  };
277
424
  // inject alias
@@ -342,7 +489,7 @@
342
489
  iterator(x, function (result) {
343
490
  if (result) {
344
491
  main_callback(x);
345
- main_callback = function () {};
492
+ main_callback = noop;
346
493
  }
347
494
  else {
348
495
  callback();
@@ -360,7 +507,7 @@
360
507
  iterator(x, function (v) {
361
508
  if (v) {
362
509
  main_callback(true);
363
- main_callback = function () {};
510
+ main_callback = noop;
364
511
  }
365
512
  callback();
366
513
  });
@@ -376,7 +523,7 @@
376
523
  iterator(x, function (v) {
377
524
  if (!v) {
378
525
  main_callback(false);
379
- main_callback = function () {};
526
+ main_callback = noop;
380
527
  }
381
528
  callback();
382
529
  });
@@ -414,11 +561,11 @@
414
561
  };
415
562
 
416
563
  async.auto = function (tasks, callback) {
417
- callback = callback || function () {};
564
+ callback = callback || noop;
418
565
  var keys = _keys(tasks);
419
- var remainingTasks = keys.length
566
+ var remainingTasks = keys.length;
420
567
  if (!remainingTasks) {
421
- return callback();
568
+ return callback(null);
422
569
  }
423
570
 
424
571
  var results = {};
@@ -436,7 +583,7 @@
436
583
  }
437
584
  };
438
585
  var taskComplete = function () {
439
- remainingTasks--
586
+ remainingTasks--;
440
587
  _each(listeners.slice(0), function (fn) {
441
588
  fn();
442
589
  });
@@ -446,7 +593,7 @@
446
593
  if (!remainingTasks) {
447
594
  var theCallback = callback;
448
595
  // prevent final callback from calling itself if it errors
449
- callback = function () {};
596
+ callback = noop;
450
597
 
451
598
  theCallback(null, results);
452
599
  }
@@ -455,7 +602,7 @@
455
602
  _each(keys, function (k) {
456
603
  var task = _isArray(tasks[k]) ? tasks[k]: [tasks[k]];
457
604
  var taskCallback = function (err) {
458
- var args = Array.prototype.slice.call(arguments, 1);
605
+ var args = _baseSlice(arguments, 1);
459
606
  if (args.length <= 1) {
460
607
  args = args[0];
461
608
  }
@@ -467,7 +614,7 @@
467
614
  safeResults[k] = args;
468
615
  callback(err, safeResults);
469
616
  // stop subsequent errors hitting callback multiple times
470
- callback = function () {};
617
+ callback = noop;
471
618
  }
472
619
  else {
473
620
  results[k] = args;
@@ -475,6 +622,17 @@
475
622
  }
476
623
  };
477
624
  var requires = task.slice(0, Math.abs(task.length - 1)) || [];
625
+ // prevent dead-locks
626
+ var len = requires.length;
627
+ var dep;
628
+ while (len--) {
629
+ if (!(dep = tasks[requires[len]])) {
630
+ throw new Error('Has inexistant dependency');
631
+ }
632
+ if (_isArray(dep) && !!~dep.indexOf(k)) {
633
+ throw new Error('Has cyclic dependencies');
634
+ }
635
+ }
478
636
  var ready = function () {
479
637
  return _reduce(requires, function (a, x) {
480
638
  return (a && results.hasOwnProperty(x));
@@ -521,13 +679,13 @@
521
679
  data = data[data.length - 1];
522
680
  (wrappedCallback || callback)(data.err, data.result);
523
681
  });
524
- }
682
+ };
525
683
  // If a callback is passed, run this as a controll flow
526
- return callback ? wrappedTask() : wrappedTask
684
+ return callback ? wrappedTask() : wrappedTask;
527
685
  };
528
686
 
529
687
  async.waterfall = function (tasks, callback) {
530
- callback = callback || function () {};
688
+ callback = callback || noop;
531
689
  if (!_isArray(tasks)) {
532
690
  var err = new Error('First argument to waterfall must be an array of functions');
533
691
  return callback(err);
@@ -539,10 +697,10 @@
539
697
  return function (err) {
540
698
  if (err) {
541
699
  callback.apply(null, arguments);
542
- callback = function () {};
700
+ callback = noop;
543
701
  }
544
702
  else {
545
- var args = Array.prototype.slice.call(arguments, 1);
703
+ var args = _baseSlice(arguments, 1);
546
704
  var next = iterator.next();
547
705
  if (next) {
548
706
  args.push(wrapIterator(next));
@@ -560,12 +718,12 @@
560
718
  };
561
719
 
562
720
  var _parallel = function(eachfn, tasks, callback) {
563
- callback = callback || function () {};
721
+ callback = callback || noop;
564
722
  if (_isArray(tasks)) {
565
723
  eachfn.map(tasks, function (fn, callback) {
566
724
  if (fn) {
567
725
  fn(function (err) {
568
- var args = Array.prototype.slice.call(arguments, 1);
726
+ var args = _baseSlice(arguments, 1);
569
727
  if (args.length <= 1) {
570
728
  args = args[0];
571
729
  }
@@ -578,7 +736,7 @@
578
736
  var results = {};
579
737
  eachfn.each(_keys(tasks), function (k, callback) {
580
738
  tasks[k](function (err) {
581
- var args = Array.prototype.slice.call(arguments, 1);
739
+ var args = _baseSlice(arguments, 1);
582
740
  if (args.length <= 1) {
583
741
  args = args[0];
584
742
  }
@@ -600,12 +758,12 @@
600
758
  };
601
759
 
602
760
  async.series = function (tasks, callback) {
603
- callback = callback || function () {};
761
+ callback = callback || noop;
604
762
  if (_isArray(tasks)) {
605
763
  async.mapSeries(tasks, function (fn, callback) {
606
764
  if (fn) {
607
765
  fn(function (err) {
608
- var args = Array.prototype.slice.call(arguments, 1);
766
+ var args = _baseSlice(arguments, 1);
609
767
  if (args.length <= 1) {
610
768
  args = args[0];
611
769
  }
@@ -618,7 +776,7 @@
618
776
  var results = {};
619
777
  async.eachSeries(_keys(tasks), function (k, callback) {
620
778
  tasks[k](function (err) {
621
- var args = Array.prototype.slice.call(arguments, 1);
779
+ var args = _baseSlice(arguments, 1);
622
780
  if (args.length <= 1) {
623
781
  args = args[0];
624
782
  }
@@ -648,10 +806,10 @@
648
806
  };
649
807
 
650
808
  async.apply = function (fn) {
651
- var args = Array.prototype.slice.call(arguments, 1);
809
+ var args = _baseSlice(arguments, 1);
652
810
  return function () {
653
811
  return fn.apply(
654
- null, args.concat(Array.prototype.slice.call(arguments))
812
+ null, args.concat(_baseSlice(arguments))
655
813
  );
656
814
  };
657
815
  };
@@ -680,7 +838,7 @@
680
838
  });
681
839
  }
682
840
  else {
683
- callback();
841
+ callback(null);
684
842
  }
685
843
  };
686
844
 
@@ -689,12 +847,12 @@
689
847
  if (err) {
690
848
  return callback(err);
691
849
  }
692
- var args = Array.prototype.slice.call(arguments, 1);
850
+ var args = _baseSlice(arguments, 1);
693
851
  if (test.apply(null, args)) {
694
852
  async.doWhilst(iterator, test, callback);
695
853
  }
696
854
  else {
697
- callback();
855
+ callback(null);
698
856
  }
699
857
  });
700
858
  };
@@ -709,7 +867,7 @@
709
867
  });
710
868
  }
711
869
  else {
712
- callback();
870
+ callback(null);
713
871
  }
714
872
  };
715
873
 
@@ -718,12 +876,12 @@
718
876
  if (err) {
719
877
  return callback(err);
720
878
  }
721
- var args = Array.prototype.slice.call(arguments, 1);
879
+ var args = _baseSlice(arguments, 1);
722
880
  if (!test.apply(null, args)) {
723
881
  async.doUntil(iterator, test, callback);
724
882
  }
725
883
  else {
726
- callback();
884
+ callback(null);
727
885
  }
728
886
  });
729
887
  };
@@ -732,6 +890,9 @@
732
890
  if (concurrency === undefined) {
733
891
  concurrency = 1;
734
892
  }
893
+ else if(concurrency === 0) {
894
+ throw new Error('Concurrency must not be zero');
895
+ }
735
896
  function _insert(q, data, pos, callback) {
736
897
  if (!q.started){
737
898
  q.started = true;
@@ -739,7 +900,7 @@
739
900
  if (!_isArray(data)) {
740
901
  data = [data];
741
902
  }
742
- if(data.length == 0) {
903
+ if(data.length === 0) {
743
904
  // call drain immediately if there are no tasks
744
905
  return async.setImmediate(function() {
745
906
  if (q.drain) {
@@ -822,9 +983,10 @@
822
983
  resume: function () {
823
984
  if (q.paused === false) { return; }
824
985
  q.paused = false;
986
+ var resumeCount = Math.min(q.concurrency, q.tasks.length);
825
987
  // Need to call q.process once per concurrent
826
988
  // worker to preserve full concurrency after pause
827
- for (var w = 1; w <= q.concurrency; w++) {
989
+ for (var w = 1; w <= resumeCount; w++) {
828
990
  async.setImmediate(q.process);
829
991
  }
830
992
  }
@@ -836,7 +998,7 @@
836
998
 
837
999
  function _compareTasks(a, b){
838
1000
  return a.priority - b.priority;
839
- };
1001
+ }
840
1002
 
841
1003
  function _binarySearch(sequence, item, compare) {
842
1004
  var beg = -1,
@@ -859,7 +1021,7 @@
859
1021
  if (!_isArray(data)) {
860
1022
  data = [data];
861
1023
  }
862
- if(data.length == 0) {
1024
+ if(data.length === 0) {
863
1025
  // call drain immediately if there are no tasks
864
1026
  return async.setImmediate(function() {
865
1027
  if (q.drain) {
@@ -932,9 +1094,9 @@
932
1094
  return;
933
1095
  }
934
1096
 
935
- var ts = typeof payload === 'number'
936
- ? tasks.splice(0, payload)
937
- : tasks.splice(0, tasks.length);
1097
+ var ts = typeof payload === 'number' ?
1098
+ tasks.splice(0, payload) :
1099
+ tasks.splice(0, tasks.length);
938
1100
 
939
1101
  var ds = _map(ts, function (task) {
940
1102
  return task.data;
@@ -967,9 +1129,9 @@
967
1129
 
968
1130
  var _console_fn = function (name) {
969
1131
  return function (fn) {
970
- var args = Array.prototype.slice.call(arguments, 1);
1132
+ var args = _baseSlice(arguments, 1);
971
1133
  fn.apply(null, args.concat([function (err) {
972
- var args = Array.prototype.slice.call(arguments, 1);
1134
+ var args = _baseSlice(arguments, 1);
973
1135
  if (typeof console !== 'undefined') {
974
1136
  if (err) {
975
1137
  if (console.error) {
@@ -998,7 +1160,7 @@
998
1160
  return x;
999
1161
  };
1000
1162
  var memoized = function () {
1001
- var args = Array.prototype.slice.call(arguments);
1163
+ var args = _baseSlice(arguments);
1002
1164
  var callback = args.pop();
1003
1165
  var key = hasher.apply(null, args);
1004
1166
  if (key in memo) {
@@ -1012,7 +1174,7 @@
1012
1174
  else {
1013
1175
  queues[key] = [callback];
1014
1176
  fn.apply(null, args.concat([function () {
1015
- memo[key] = arguments;
1177
+ memo[key] = _baseSlice(arguments);
1016
1178
  var q = queues[key];
1017
1179
  delete queues[key];
1018
1180
  for (var i = 0, l = q.length; i < l; i++) {
@@ -1052,14 +1214,14 @@
1052
1214
  var fns = arguments;
1053
1215
  return function () {
1054
1216
  var that = this;
1055
- var args = Array.prototype.slice.call(arguments);
1217
+ var args = _baseSlice(arguments);
1056
1218
  var callback = args.pop();
1057
1219
  async.reduce(fns, args, function (newargs, fn, cb) {
1058
1220
  fn.apply(that, newargs.concat([function () {
1059
1221
  var err = arguments[0];
1060
- var nextargs = Array.prototype.slice.call(arguments, 1);
1222
+ var nextargs = _baseSlice(arguments, 1);
1061
1223
  cb(err, nextargs);
1062
- }]))
1224
+ }]));
1063
1225
  },
1064
1226
  function (err, results) {
1065
1227
  callback.apply(that, [err].concat(results));
@@ -1074,7 +1236,7 @@
1074
1236
  var _applyEach = function (eachfn, fns /*args...*/) {
1075
1237
  var go = function () {
1076
1238
  var that = this;
1077
- var args = Array.prototype.slice.call(arguments);
1239
+ var args = _baseSlice(arguments);
1078
1240
  var callback = args.pop();
1079
1241
  return eachfn(fns, function (fn, cb) {
1080
1242
  fn.apply(that, args.concat([cb]));
@@ -1082,7 +1244,7 @@
1082
1244
  callback);
1083
1245
  };
1084
1246
  if (arguments.length > 2) {
1085
- var args = Array.prototype.slice.call(arguments, 2);
1247
+ var args = _baseSlice(arguments, 2);
1086
1248
  return go.apply(this, args);
1087
1249
  }
1088
1250
  else {
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: async-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.2
4
+ version: 1.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jason Chen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-03-14 00:00:00.000000000 Z
11
+ date: 2015-05-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: railties