backbone-rails 0.5.3 → 0.5.3.1

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.
@@ -1,4 +1,4 @@
1
- // Underscore.js 1.1.7
1
+ // Underscore.js 1.2.2
2
2
  // (c) 2011 Jeremy Ashkenas, DocumentCloud Inc.
3
3
  // Underscore is freely distributable under the MIT license.
4
4
  // Portions of Underscore are inspired or borrowed from Prototype,
@@ -48,19 +48,26 @@
48
48
  // Create a safe reference to the Underscore object for use below.
49
49
  var _ = function(obj) { return new wrapper(obj); };
50
50
 
51
- // Export the Underscore object for **CommonJS**, with backwards-compatibility
52
- // for the old `require()` API. If we're not in CommonJS, add `_` to the
53
- // global object.
54
- if (typeof module !== 'undefined' && module.exports) {
55
- module.exports = _;
56
- _._ = _;
51
+ // Export the Underscore object for **Node.js** and **"CommonJS"**, with
52
+ // backwards-compatibility for the old `require()` API. If we're not in
53
+ // CommonJS, add `_` to the global object.
54
+ if (typeof exports !== 'undefined') {
55
+ if (typeof module !== 'undefined' && module.exports) {
56
+ exports = module.exports = _;
57
+ }
58
+ exports._ = _;
59
+ } else if (typeof define === 'function' && define.amd) {
60
+ // Register as a named module with AMD.
61
+ define('underscore', function() {
62
+ return _;
63
+ });
57
64
  } else {
58
65
  // Exported as a string, for Closure Compiler "advanced" mode.
59
66
  root['_'] = _;
60
67
  }
61
68
 
62
69
  // Current version.
63
- _.VERSION = '1.1.7';
70
+ _.VERSION = '1.2.2';
64
71
 
65
72
  // Collection Functions
66
73
  // --------------------
@@ -187,7 +194,7 @@
187
194
  if (obj == null) return result;
188
195
  if (nativeSome && obj.some === nativeSome) return obj.some(iterator, context);
189
196
  each(obj, function(value, index, list) {
190
- if (result |= iterator.call(context, value, index, list)) return breaker;
197
+ if (result || (result = iterator.call(context, value, index, list))) return breaker;
191
198
  });
192
199
  return !!result;
193
200
  };
@@ -198,8 +205,8 @@
198
205
  var found = false;
199
206
  if (obj == null) return found;
200
207
  if (nativeIndexOf && obj.indexOf === nativeIndexOf) return obj.indexOf(target) != -1;
201
- any(obj, function(value) {
202
- if (found = value === target) return true;
208
+ found = any(obj, function(value) {
209
+ return value === target;
203
210
  });
204
211
  return found;
205
212
  };
@@ -220,6 +227,7 @@
220
227
  // Return the maximum element or (element-based computation).
221
228
  _.max = function(obj, iterator, context) {
222
229
  if (!iterator && _.isArray(obj)) return Math.max.apply(Math, obj);
230
+ if (!iterator && _.isEmpty(obj)) return -Infinity;
223
231
  var result = {computed : -Infinity};
224
232
  each(obj, function(value, index, list) {
225
233
  var computed = iterator ? iterator.call(context, value, index, list) : value;
@@ -231,6 +239,7 @@
231
239
  // Return the minimum element (or element-based computation).
232
240
  _.min = function(obj, iterator, context) {
233
241
  if (!iterator && _.isArray(obj)) return Math.min.apply(Math, obj);
242
+ if (!iterator && _.isEmpty(obj)) return Infinity;
234
243
  var result = {computed : Infinity};
235
244
  each(obj, function(value, index, list) {
236
245
  var computed = iterator ? iterator.call(context, value, index, list) : value;
@@ -239,6 +248,21 @@
239
248
  return result.value;
240
249
  };
241
250
 
251
+ // Shuffle an array.
252
+ _.shuffle = function(obj) {
253
+ var shuffled = [], rand;
254
+ each(obj, function(value, index, list) {
255
+ if (index == 0) {
256
+ shuffled[0] = value;
257
+ } else {
258
+ rand = Math.floor(Math.random() * (index + 1));
259
+ shuffled[index] = shuffled[rand];
260
+ shuffled[rand] = value;
261
+ }
262
+ });
263
+ return shuffled;
264
+ };
265
+
242
266
  // Sort the object's values by a criterion produced by an iterator.
243
267
  _.sortBy = function(obj, iterator, context) {
244
268
  return _.pluck(_.map(obj, function(value, index, list) {
@@ -252,9 +276,11 @@
252
276
  }), 'value');
253
277
  };
254
278
 
255
- // Groups the object's values by a criterion produced by an iterator
256
- _.groupBy = function(obj, iterator) {
279
+ // Groups the object's values by a criterion. Pass either a string attribute
280
+ // to group by, or a function that returns the criterion.
281
+ _.groupBy = function(obj, val) {
257
282
  var result = {};
283
+ var iterator = _.isFunction(val) ? val : function(obj) { return obj[val]; };
258
284
  each(obj, function(value, index) {
259
285
  var key = iterator(value, index);
260
286
  (result[key] || (result[key] = [])).push(value);
@@ -298,6 +324,24 @@
298
324
  return (n != null) && !guard ? slice.call(array, 0, n) : array[0];
299
325
  };
300
326
 
327
+ // Returns everything but the last entry of the array. Especcialy useful on
328
+ // the arguments object. Passing **n** will return all the values in
329
+ // the array, excluding the last N. The **guard** check allows it to work with
330
+ // `_.map`.
331
+ _.initial = function(array, n, guard) {
332
+ return slice.call(array, 0, array.length - ((n == null) || guard ? 1 : n));
333
+ };
334
+
335
+ // Get the last element of an array. Passing **n** will return the last N
336
+ // values in the array. The **guard** check allows it to work with `_.map`.
337
+ _.last = function(array, n, guard) {
338
+ if ((n != null) && !guard) {
339
+ return slice.call(array, Math.max(array.length - n, 0));
340
+ } else {
341
+ return array[array.length - 1];
342
+ }
343
+ };
344
+
301
345
  // Returns everything but the first entry of the array. Aliased as `tail`.
302
346
  // Especially useful on the arguments object. Passing an **index** will return
303
347
  // the rest of the values in the array from that index onward. The **guard**
@@ -306,20 +350,15 @@
306
350
  return slice.call(array, (index == null) || guard ? 1 : index);
307
351
  };
308
352
 
309
- // Get the last element of an array.
310
- _.last = function(array) {
311
- return array[array.length - 1];
312
- };
313
-
314
353
  // Trim out all falsy values from an array.
315
354
  _.compact = function(array) {
316
355
  return _.filter(array, function(value){ return !!value; });
317
356
  };
318
357
 
319
358
  // Return a completely flattened version of an array.
320
- _.flatten = function(array) {
359
+ _.flatten = function(array, shallow) {
321
360
  return _.reduce(array, function(memo, value) {
322
- if (_.isArray(value)) return memo.concat(_.flatten(value));
361
+ if (_.isArray(value)) return memo.concat(shallow ? value : _.flatten(value));
323
362
  memo[memo.length] = value;
324
363
  return memo;
325
364
  }, []);
@@ -333,17 +372,23 @@
333
372
  // Produce a duplicate-free version of the array. If the array has already
334
373
  // been sorted, you have the option of using a faster algorithm.
335
374
  // Aliased as `unique`.
336
- _.uniq = _.unique = function(array, isSorted) {
337
- return _.reduce(array, function(memo, el, i) {
338
- if (0 == i || (isSorted === true ? _.last(memo) != el : !_.include(memo, el))) memo[memo.length] = el;
375
+ _.uniq = _.unique = function(array, isSorted, iterator) {
376
+ var initial = iterator ? _.map(array, iterator) : array;
377
+ var result = [];
378
+ _.reduce(initial, function(memo, el, i) {
379
+ if (0 == i || (isSorted === true ? _.last(memo) != el : !_.include(memo, el))) {
380
+ memo[memo.length] = el;
381
+ result[result.length] = array[i];
382
+ }
339
383
  return memo;
340
384
  }, []);
385
+ return result;
341
386
  };
342
387
 
343
388
  // Produce an array that contains the union: each distinct element from all of
344
389
  // the passed-in arrays.
345
390
  _.union = function() {
346
- return _.uniq(_.flatten(arguments));
391
+ return _.uniq(_.flatten(arguments, true));
347
392
  };
348
393
 
349
394
  // Produce an array that contains every item shared between all the
@@ -391,7 +436,6 @@
391
436
  return -1;
392
437
  };
393
438
 
394
-
395
439
  // Delegates to **ECMAScript 5**'s native `lastIndexOf` if available.
396
440
  _.lastIndexOf = function(array, item) {
397
441
  if (array == null) return -1;
@@ -426,15 +470,25 @@
426
470
  // Function (ahem) Functions
427
471
  // ------------------
428
472
 
473
+ // Reusable constructor function for prototype setting.
474
+ var ctor = function(){};
475
+
429
476
  // Create a function bound to a given object (assigning `this`, and arguments,
430
477
  // optionally). Binding with arguments is also known as `curry`.
431
478
  // Delegates to **ECMAScript 5**'s native `Function.bind` if available.
432
479
  // We check for `func.bind` first, to fail fast when `func` is undefined.
433
- _.bind = function(func, obj) {
480
+ _.bind = function bind(func, context) {
481
+ var bound, args;
434
482
  if (func.bind === nativeBind && nativeBind) return nativeBind.apply(func, slice.call(arguments, 1));
435
- var args = slice.call(arguments, 2);
436
- return function() {
437
- return func.apply(obj, args.concat(slice.call(arguments)));
483
+ if (!_.isFunction(func)) throw new TypeError;
484
+ args = slice.call(arguments, 2);
485
+ return bound = function() {
486
+ if (!(this instanceof bound)) return func.apply(context, args.concat(slice.call(arguments)));
487
+ ctor.prototype = func.prototype;
488
+ var self = new ctor;
489
+ var result = func.apply(self, args.concat(slice.call(arguments)));
490
+ if (Object(result) === result) return result;
491
+ return self;
438
492
  };
439
493
  };
440
494
 
@@ -470,31 +524,43 @@
470
524
  return _.delay.apply(_, [func, 1].concat(slice.call(arguments, 1)));
471
525
  };
472
526
 
473
- // Internal function used to implement `_.throttle` and `_.debounce`.
474
- var limit = function(func, wait, debounce) {
475
- var timeout;
527
+ // Returns a function, that, when invoked, will only be triggered at most once
528
+ // during a given window of time.
529
+ _.throttle = function(func, wait) {
530
+ var context, args, timeout, throttling, more;
531
+ var whenDone = _.debounce(function(){ more = throttling = false; }, wait);
476
532
  return function() {
477
- var context = this, args = arguments;
478
- var throttler = function() {
533
+ context = this; args = arguments;
534
+ var later = function() {
479
535
  timeout = null;
480
- func.apply(context, args);
536
+ if (more) func.apply(context, args);
537
+ whenDone();
481
538
  };
482
- if (debounce) clearTimeout(timeout);
483
- if (debounce || !timeout) timeout = setTimeout(throttler, wait);
539
+ if (!timeout) timeout = setTimeout(later, wait);
540
+ if (throttling) {
541
+ more = true;
542
+ } else {
543
+ func.apply(context, args);
544
+ }
545
+ whenDone();
546
+ throttling = true;
484
547
  };
485
548
  };
486
549
 
487
- // Returns a function, that, when invoked, will only be triggered at most once
488
- // during a given window of time.
489
- _.throttle = function(func, wait) {
490
- return limit(func, wait, false);
491
- };
492
-
493
550
  // Returns a function, that, as long as it continues to be invoked, will not
494
551
  // be triggered. The function will be called after it stops being called for
495
552
  // N milliseconds.
496
553
  _.debounce = function(func, wait) {
497
- return limit(func, wait, true);
554
+ var timeout;
555
+ return function() {
556
+ var context = this, args = arguments;
557
+ var later = function() {
558
+ timeout = null;
559
+ func.apply(context, args);
560
+ };
561
+ clearTimeout(timeout);
562
+ timeout = setTimeout(later, wait);
563
+ };
498
564
  };
499
565
 
500
566
  // Returns a function that will be executed at most one time, no matter how
@@ -533,12 +599,12 @@
533
599
 
534
600
  // Returns a function that will only be executed after being called N times.
535
601
  _.after = function(times, func) {
602
+ if (times <= 0) return func();
536
603
  return function() {
537
604
  if (--times < 1) { return func.apply(this, arguments); }
538
605
  };
539
606
  };
540
607
 
541
-
542
608
  // Object Functions
543
609
  // ----------------
544
610
 
@@ -588,6 +654,7 @@
588
654
 
589
655
  // Create a (shallow-cloned) duplicate of an object.
590
656
  _.clone = function(obj) {
657
+ if (!_.isObject(obj)) return obj;
591
658
  return _.isArray(obj) ? obj.slice() : _.extend({}, obj);
592
659
  };
593
660
 
@@ -599,47 +666,103 @@
599
666
  return obj;
600
667
  };
601
668
 
602
- // Perform a deep comparison to check if two objects are equal.
603
- _.isEqual = function(a, b) {
604
- // Check object identity.
605
- if (a === b) return true;
606
- // Different types?
607
- var atype = typeof(a), btype = typeof(b);
608
- if (atype != btype) return false;
609
- // Basic equality test (watch out for coercions).
610
- if (a == b) return true;
611
- // One is falsy and the other truthy.
612
- if ((!a && b) || (a && !b)) return false;
669
+ // Internal recursive comparison function.
670
+ function eq(a, b, stack) {
671
+ // Identical objects are equal. `0 === -0`, but they aren't identical.
672
+ // See the Harmony `egal` proposal: http://wiki.ecmascript.org/doku.php?id=harmony:egal.
673
+ if (a === b) return a !== 0 || 1 / a == 1 / b;
674
+ // A strict comparison is necessary because `null == undefined`.
675
+ if (a == null || b == null) return a === b;
613
676
  // Unwrap any wrapped objects.
614
677
  if (a._chain) a = a._wrapped;
615
678
  if (b._chain) b = b._wrapped;
616
- // One of them implements an isEqual()?
617
- if (a.isEqual) return a.isEqual(b);
618
- if (b.isEqual) return b.isEqual(a);
619
- // Check dates' integer values.
620
- if (_.isDate(a) && _.isDate(b)) return a.getTime() === b.getTime();
621
- // Both are NaN?
622
- if (_.isNaN(a) && _.isNaN(b)) return false;
623
- // Compare regular expressions.
624
- if (_.isRegExp(a) && _.isRegExp(b))
625
- return a.source === b.source &&
626
- a.global === b.global &&
627
- a.ignoreCase === b.ignoreCase &&
628
- a.multiline === b.multiline;
629
- // If a is not an object by this point, we can't handle it.
630
- if (atype !== 'object') return false;
631
- // Check for different array lengths before comparing contents.
632
- if (a.length && (a.length !== b.length)) return false;
633
- // Nothing else worked, deep compare the contents.
634
- var aKeys = _.keys(a), bKeys = _.keys(b);
635
- // Different object sizes?
636
- if (aKeys.length != bKeys.length) return false;
637
- // Recursive comparison of contents.
638
- for (var key in a) if (!(key in b) || !_.isEqual(a[key], b[key])) return false;
639
- return true;
679
+ // Invoke a custom `isEqual` method if one is provided.
680
+ if (_.isFunction(a.isEqual)) return a.isEqual(b);
681
+ if (_.isFunction(b.isEqual)) return b.isEqual(a);
682
+ // Compare `[[Class]]` names.
683
+ var className = toString.call(a);
684
+ if (className != toString.call(b)) return false;
685
+ switch (className) {
686
+ // Strings, numbers, dates, and booleans are compared by value.
687
+ case '[object String]':
688
+ // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is
689
+ // equivalent to `new String("5")`.
690
+ return String(a) == String(b);
691
+ case '[object Number]':
692
+ a = +a;
693
+ b = +b;
694
+ // `NaN`s are equivalent, but non-reflexive. An `egal` comparison is performed for
695
+ // other numeric values.
696
+ return a != a ? b != b : (a == 0 ? 1 / a == 1 / b : a == b);
697
+ case '[object Date]':
698
+ case '[object Boolean]':
699
+ // Coerce dates and booleans to numeric primitive values. Dates are compared by their
700
+ // millisecond representations. Note that invalid dates with millisecond representations
701
+ // of `NaN` are not equivalent.
702
+ return +a == +b;
703
+ // RegExps are compared by their source patterns and flags.
704
+ case '[object RegExp]':
705
+ return a.source == b.source &&
706
+ a.global == b.global &&
707
+ a.multiline == b.multiline &&
708
+ a.ignoreCase == b.ignoreCase;
709
+ }
710
+ if (typeof a != 'object' || typeof b != 'object') return false;
711
+ // Assume equality for cyclic structures. The algorithm for detecting cyclic
712
+ // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.
713
+ var length = stack.length;
714
+ while (length--) {
715
+ // Linear search. Performance is inversely proportional to the number of
716
+ // unique nested structures.
717
+ if (stack[length] == a) return true;
718
+ }
719
+ // Add the first object to the stack of traversed objects.
720
+ stack.push(a);
721
+ var size = 0, result = true;
722
+ // Recursively compare objects and arrays.
723
+ if (className == '[object Array]') {
724
+ // Compare array lengths to determine if a deep comparison is necessary.
725
+ size = a.length;
726
+ result = size == b.length;
727
+ if (result) {
728
+ // Deep compare the contents, ignoring non-numeric properties.
729
+ while (size--) {
730
+ // Ensure commutative equality for sparse arrays.
731
+ if (!(result = size in a == size in b && eq(a[size], b[size], stack))) break;
732
+ }
733
+ }
734
+ } else {
735
+ // Objects with different constructors are not equivalent.
736
+ if ("constructor" in a != "constructor" in b || a.constructor != b.constructor) return false;
737
+ // Deep compare objects.
738
+ for (var key in a) {
739
+ if (hasOwnProperty.call(a, key)) {
740
+ // Count the expected number of properties.
741
+ size++;
742
+ // Deep compare each member.
743
+ if (!(result = hasOwnProperty.call(b, key) && eq(a[key], b[key], stack))) break;
744
+ }
745
+ }
746
+ // Ensure that both objects contain the same number of properties.
747
+ if (result) {
748
+ for (key in b) {
749
+ if (hasOwnProperty.call(b, key) && !(size--)) break;
750
+ }
751
+ result = !size;
752
+ }
753
+ }
754
+ // Remove the first object from the stack of traversed objects.
755
+ stack.pop();
756
+ return result;
757
+ }
758
+
759
+ // Perform a deep comparison to check if two objects are equal.
760
+ _.isEqual = function(a, b) {
761
+ return eq(a, b, []);
640
762
  };
641
763
 
642
- // Is a given array or object empty?
764
+ // Is a given array, string, or object empty?
765
+ // An "empty" object has no enumerable own-properties.
643
766
  _.isEmpty = function(obj) {
644
767
  if (_.isArray(obj) || _.isString(obj)) return obj.length === 0;
645
768
  for (var key in obj) if (hasOwnProperty.call(obj, key)) return false;
@@ -654,7 +777,7 @@
654
777
  // Is a given value an array?
655
778
  // Delegates to ECMA5's native Array.isArray
656
779
  _.isArray = nativeIsArray || function(obj) {
657
- return toString.call(obj) === '[object Array]';
780
+ return toString.call(obj) == '[object Array]';
658
781
  };
659
782
 
660
783
  // Is a given variable an object?
@@ -663,44 +786,50 @@
663
786
  };
664
787
 
665
788
  // Is a given variable an arguments object?
666
- _.isArguments = function(obj) {
667
- return !!(obj && hasOwnProperty.call(obj, 'callee'));
668
- };
789
+ if (toString.call(arguments) == '[object Arguments]') {
790
+ _.isArguments = function(obj) {
791
+ return toString.call(obj) == '[object Arguments]';
792
+ };
793
+ } else {
794
+ _.isArguments = function(obj) {
795
+ return !!(obj && hasOwnProperty.call(obj, 'callee'));
796
+ };
797
+ }
669
798
 
670
799
  // Is a given value a function?
671
800
  _.isFunction = function(obj) {
672
- return !!(obj && obj.constructor && obj.call && obj.apply);
801
+ return toString.call(obj) == '[object Function]';
673
802
  };
674
803
 
675
804
  // Is a given value a string?
676
805
  _.isString = function(obj) {
677
- return !!(obj === '' || (obj && obj.charCodeAt && obj.substr));
806
+ return toString.call(obj) == '[object String]';
678
807
  };
679
808
 
680
809
  // Is a given value a number?
681
810
  _.isNumber = function(obj) {
682
- return !!(obj === 0 || (obj && obj.toExponential && obj.toFixed));
811
+ return toString.call(obj) == '[object Number]';
683
812
  };
684
813
 
685
- // Is the given value `NaN`? `NaN` happens to be the only value in JavaScript
686
- // that does not equal itself.
814
+ // Is the given value `NaN`?
687
815
  _.isNaN = function(obj) {
816
+ // `NaN` is the only value for which `===` is not reflexive.
688
817
  return obj !== obj;
689
818
  };
690
819
 
691
820
  // Is a given value a boolean?
692
821
  _.isBoolean = function(obj) {
693
- return obj === true || obj === false;
822
+ return obj === true || obj === false || toString.call(obj) == '[object Boolean]';
694
823
  };
695
824
 
696
825
  // Is a given value a date?
697
826
  _.isDate = function(obj) {
698
- return !!(obj && obj.getTimezoneOffset && obj.setUTCFullYear);
827
+ return toString.call(obj) == '[object Date]';
699
828
  };
700
829
 
701
830
  // Is the given value a regular expression?
702
831
  _.isRegExp = function(obj) {
703
- return !!(obj && obj.test && obj.exec && (obj.ignoreCase || obj.ignoreCase === false));
832
+ return toString.call(obj) == '[object RegExp]';
704
833
  };
705
834
 
706
835
  // Is a given value equal to null?
@@ -733,6 +862,11 @@
733
862
  for (var i = 0; i < n; i++) iterator.call(context, i);
734
863
  };
735
864
 
865
+ // Escape a string for HTML interpolation.
866
+ _.escape = function(string) {
867
+ return (''+string).replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, '&quot;').replace(/'/g, '&#x27;').replace(/\//g,'&#x2F;');
868
+ };
869
+
736
870
  // Add your own custom functions to the Underscore object, ensuring that
737
871
  // they're correctly added to the OOP wrapper as well.
738
872
  _.mixin = function(obj) {
@@ -753,7 +887,8 @@
753
887
  // following template settings to use alternative delimiters.
754
888
  _.templateSettings = {
755
889
  evaluate : /<%([\s\S]+?)%>/g,
756
- interpolate : /<%=([\s\S]+?)%>/g
890
+ interpolate : /<%=([\s\S]+?)%>/g,
891
+ escape : /<%-([\s\S]+?)%>/g
757
892
  };
758
893
 
759
894
  // JavaScript micro-templating, similar to John Resig's implementation.
@@ -765,19 +900,22 @@
765
900
  'with(obj||{}){__p.push(\'' +
766
901
  str.replace(/\\/g, '\\\\')
767
902
  .replace(/'/g, "\\'")
903
+ .replace(c.escape, function(match, code) {
904
+ return "',_.escape(" + code.replace(/\\'/g, "'") + "),'";
905
+ })
768
906
  .replace(c.interpolate, function(match, code) {
769
907
  return "'," + code.replace(/\\'/g, "'") + ",'";
770
908
  })
771
909
  .replace(c.evaluate || null, function(match, code) {
772
910
  return "');" + code.replace(/\\'/g, "'")
773
- .replace(/[\r\n\t]/g, ' ') + "__p.push('";
911
+ .replace(/[\r\n\t]/g, ' ') + ";__p.push('";
774
912
  })
775
913
  .replace(/\r/g, '\\r')
776
914
  .replace(/\n/g, '\\n')
777
915
  .replace(/\t/g, '\\t')
778
916
  + "');}return __p.join('');";
779
- var func = new Function('obj', tmpl);
780
- return data ? func(data) : func;
917
+ var func = new Function('obj', '_', tmpl);
918
+ return data ? func(data, _) : function(data) { return func(data, _) };
781
919
  };
782
920
 
783
921
  // The OOP Wrapper
@@ -836,4 +974,4 @@
836
974
  return this._wrapped;
837
975
  };
838
976
 
839
- })();
977
+ }).call(this);
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: backbone-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.3
4
+ version: 0.5.3.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-11-02 00:00:00.000000000Z
12
+ date: 2011-11-22 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails
16
- requirement: &2153430460 !ruby/object:Gem::Requirement
16
+ requirement: &2153699680 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,7 +21,7 @@ dependencies:
21
21
  version: 3.0.0
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *2153430460
24
+ version_requirements: *2153699680
25
25
  description: Ships backbone and underscore to your Rails 3.1 application through the
26
26
  new asset pipeline. Rails 3.0 is supported via generators.
27
27
  email: