underscore-rails 1.5.1 → 1.5.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 +4 -4
- data/LICENSE.md +21 -0
- data/Readme.md +6 -7
- data/lib/underscore-rails/version.rb +1 -1
- data/underscore-rails.gemspec +2 -1
- data/vendor/assets/javascripts/underscore.js +89 -58
- metadata +5 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 121c2f4878563957cac04e83f26f8f007b3a3152
|
4
|
+
data.tar.gz: 0c1082f042569bf4d16f3813894bd41bce82dc88
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0f217295aec0b04bc1d6df709a13a4864530d778febc168b96bd9ac23658977efd0c47d7eaeea68a12aa6fdd6fc1a60c9d637d9a206cd647a91096e6a26717fb
|
7
|
+
data.tar.gz: 5ec01cbf3d18fa12addb51e516ed25f9d329518997bc9cfdbbce11d82e4128b8224cfbe4e87a779be99535343b75d54132b6d62da58e414067b4b2171c62e2e9
|
data/LICENSE.md
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
The MIT License (MIT)
|
2
|
+
|
3
|
+
Copyright (c) 2013 Robin Wenglewski, Travis Jeffery
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in
|
13
|
+
all copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
21
|
+
THE SOFTWARE.
|
data/Readme.md
CHANGED
@@ -1,16 +1,15 @@
|
|
1
1
|
Rails 3.1 asset-pipeline gem to provide underscore.js
|
2
2
|
|
3
|
-
#
|
4
|
-
|
5
|
-
gem 'underscore-rails'
|
3
|
+
# Setup
|
6
4
|
|
5
|
+
Have in your Gemfile:
|
7
6
|
|
8
|
-
|
7
|
+
gem 'underscore-rails'
|
9
8
|
|
10
|
-
|
9
|
+
And, have in your application.js manifest:
|
11
10
|
|
12
11
|
//= require underscore
|
13
12
|
|
14
|
-
|
13
|
+
(also directly available under `/assets/underscore.js`)
|
15
14
|
|
16
|
-
Easy as pie.
|
15
|
+
Easy as pie.
|
data/underscore-rails.gemspec
CHANGED
@@ -9,7 +9,8 @@ Gem::Specification.new do |s|
|
|
9
9
|
s.email = ["robin@wenglewski.de"]
|
10
10
|
s.homepage = "https://github.com/rweng/underscore-rails"
|
11
11
|
s.summary = %q{underscore.js asset pipeline provider/wrapper}
|
12
|
-
|
12
|
+
s.license = "MIT"
|
13
|
+
|
13
14
|
s.rubyforge_project = "underscore-rails"
|
14
15
|
|
15
16
|
s.files = `git ls-files`.split("\n")
|
@@ -1,4 +1,4 @@
|
|
1
|
-
// Underscore.js 1.5.
|
1
|
+
// Underscore.js 1.5.2
|
2
2
|
// http://underscorejs.org
|
3
3
|
// (c) 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
|
4
4
|
// Underscore may be freely distributed under the MIT license.
|
@@ -8,7 +8,7 @@
|
|
8
8
|
// Baseline setup
|
9
9
|
// --------------
|
10
10
|
|
11
|
-
// Establish the root object, `window` in the browser, or `
|
11
|
+
// Establish the root object, `window` in the browser, or `exports` on the server.
|
12
12
|
var root = this;
|
13
13
|
|
14
14
|
// Save the previous value of the `_` variable.
|
@@ -65,7 +65,7 @@
|
|
65
65
|
}
|
66
66
|
|
67
67
|
// Current version.
|
68
|
-
_.VERSION = '1.5.
|
68
|
+
_.VERSION = '1.5.2';
|
69
69
|
|
70
70
|
// Collection Functions
|
71
71
|
// --------------------
|
@@ -78,14 +78,13 @@
|
|
78
78
|
if (nativeForEach && obj.forEach === nativeForEach) {
|
79
79
|
obj.forEach(iterator, context);
|
80
80
|
} else if (obj.length === +obj.length) {
|
81
|
-
for (var i = 0,
|
81
|
+
for (var i = 0, length = obj.length; i < length; i++) {
|
82
82
|
if (iterator.call(context, obj[i], i, obj) === breaker) return;
|
83
83
|
}
|
84
84
|
} else {
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
}
|
85
|
+
var keys = _.keys(obj);
|
86
|
+
for (var i = 0, length = keys.length; i < length; i++) {
|
87
|
+
if (iterator.call(context, obj[keys[i]], keys[i], obj) === breaker) return;
|
89
88
|
}
|
90
89
|
}
|
91
90
|
};
|
@@ -284,7 +283,8 @@
|
|
284
283
|
return result.value;
|
285
284
|
};
|
286
285
|
|
287
|
-
// Shuffle an array
|
286
|
+
// Shuffle an array, using the modern version of the
|
287
|
+
// [Fisher-Yates shuffle](http://en.wikipedia.org/wiki/Fisher–Yates_shuffle).
|
288
288
|
_.shuffle = function(obj) {
|
289
289
|
var rand;
|
290
290
|
var index = 0;
|
@@ -297,6 +297,16 @@
|
|
297
297
|
return shuffled;
|
298
298
|
};
|
299
299
|
|
300
|
+
// Sample **n** random values from an array.
|
301
|
+
// If **n** is not specified, returns a single random element from the array.
|
302
|
+
// The internal `guard` argument allows it to work with `map`.
|
303
|
+
_.sample = function(obj, n, guard) {
|
304
|
+
if (arguments.length < 2 || guard) {
|
305
|
+
return obj[_.random(obj.length - 1)];
|
306
|
+
}
|
307
|
+
return _.shuffle(obj).slice(0, Math.max(0, n));
|
308
|
+
};
|
309
|
+
|
300
310
|
// An internal function to generate lookup iterators.
|
301
311
|
var lookupIterator = function(value) {
|
302
312
|
return _.isFunction(value) ? value : function(obj){ return obj[value]; };
|
@@ -307,9 +317,9 @@
|
|
307
317
|
var iterator = lookupIterator(value);
|
308
318
|
return _.pluck(_.map(obj, function(value, index, list) {
|
309
319
|
return {
|
310
|
-
value
|
311
|
-
index
|
312
|
-
criteria
|
320
|
+
value: value,
|
321
|
+
index: index,
|
322
|
+
criteria: iterator.call(context, value, index, list)
|
313
323
|
};
|
314
324
|
}).sort(function(left, right) {
|
315
325
|
var a = left.criteria;
|
@@ -318,38 +328,41 @@
|
|
318
328
|
if (a > b || a === void 0) return 1;
|
319
329
|
if (a < b || b === void 0) return -1;
|
320
330
|
}
|
321
|
-
return left.index
|
331
|
+
return left.index - right.index;
|
322
332
|
}), 'value');
|
323
333
|
};
|
324
334
|
|
325
335
|
// An internal function used for aggregate "group by" operations.
|
326
|
-
var group = function(
|
327
|
-
|
328
|
-
|
329
|
-
|
330
|
-
|
331
|
-
|
332
|
-
|
333
|
-
|
336
|
+
var group = function(behavior) {
|
337
|
+
return function(obj, value, context) {
|
338
|
+
var result = {};
|
339
|
+
var iterator = value == null ? _.identity : lookupIterator(value);
|
340
|
+
each(obj, function(value, index) {
|
341
|
+
var key = iterator.call(context, value, index, obj);
|
342
|
+
behavior(result, key, value);
|
343
|
+
});
|
344
|
+
return result;
|
345
|
+
};
|
334
346
|
};
|
335
347
|
|
336
348
|
// Groups the object's values by a criterion. Pass either a string attribute
|
337
349
|
// to group by, or a function that returns the criterion.
|
338
|
-
_.groupBy = function(
|
339
|
-
|
340
|
-
|
341
|
-
|
342
|
-
|
350
|
+
_.groupBy = group(function(result, key, value) {
|
351
|
+
(_.has(result, key) ? result[key] : (result[key] = [])).push(value);
|
352
|
+
});
|
353
|
+
|
354
|
+
// Indexes the object's values by a criterion, similar to `groupBy`, but for
|
355
|
+
// when you know that your index values will be unique.
|
356
|
+
_.indexBy = group(function(result, key, value) {
|
357
|
+
result[key] = value;
|
358
|
+
});
|
343
359
|
|
344
360
|
// Counts instances of an object that group by a certain criterion. Pass
|
345
361
|
// either a string attribute to count by, or a function that returns the
|
346
362
|
// criterion.
|
347
|
-
_.countBy = function(
|
348
|
-
|
349
|
-
|
350
|
-
result[key]++;
|
351
|
-
});
|
352
|
-
};
|
363
|
+
_.countBy = group(function(result, key) {
|
364
|
+
_.has(result, key) ? result[key]++ : result[key] = 1;
|
365
|
+
});
|
353
366
|
|
354
367
|
// Use a comparator function to figure out the smallest index at which
|
355
368
|
// an object should be inserted so as to maintain order. Uses binary search.
|
@@ -386,7 +399,7 @@
|
|
386
399
|
// allows it to work with `_.map`.
|
387
400
|
_.first = _.head = _.take = function(array, n, guard) {
|
388
401
|
if (array == null) return void 0;
|
389
|
-
return (n
|
402
|
+
return (n == null) || guard ? array[0] : slice.call(array, 0, n);
|
390
403
|
};
|
391
404
|
|
392
405
|
// Returns everything but the last entry of the array. Especially useful on
|
@@ -401,10 +414,10 @@
|
|
401
414
|
// values in the array. The **guard** check allows it to work with `_.map`.
|
402
415
|
_.last = function(array, n, guard) {
|
403
416
|
if (array == null) return void 0;
|
404
|
-
if ((n
|
405
|
-
return slice.call(array, Math.max(array.length - n, 0));
|
406
|
-
} else {
|
417
|
+
if ((n == null) || guard) {
|
407
418
|
return array[array.length - 1];
|
419
|
+
} else {
|
420
|
+
return slice.call(array, Math.max(array.length - n, 0));
|
408
421
|
}
|
409
422
|
};
|
410
423
|
|
@@ -436,7 +449,7 @@
|
|
436
449
|
return output;
|
437
450
|
};
|
438
451
|
|
439
|
-
//
|
452
|
+
// Flatten out an array, either recursively (by default), or just one level.
|
440
453
|
_.flatten = function(array, shallow) {
|
441
454
|
return flatten(array, shallow, []);
|
442
455
|
};
|
@@ -508,7 +521,7 @@
|
|
508
521
|
_.object = function(list, values) {
|
509
522
|
if (list == null) return {};
|
510
523
|
var result = {};
|
511
|
-
for (var i = 0,
|
524
|
+
for (var i = 0, length = list.length; i < length; i++) {
|
512
525
|
if (values) {
|
513
526
|
result[list[i]] = values[i];
|
514
527
|
} else {
|
@@ -526,17 +539,17 @@
|
|
526
539
|
// for **isSorted** to use binary search.
|
527
540
|
_.indexOf = function(array, item, isSorted) {
|
528
541
|
if (array == null) return -1;
|
529
|
-
var i = 0,
|
542
|
+
var i = 0, length = array.length;
|
530
543
|
if (isSorted) {
|
531
544
|
if (typeof isSorted == 'number') {
|
532
|
-
i = (isSorted < 0 ? Math.max(0,
|
545
|
+
i = (isSorted < 0 ? Math.max(0, length + isSorted) : isSorted);
|
533
546
|
} else {
|
534
547
|
i = _.sortedIndex(array, item);
|
535
548
|
return array[i] === item ? i : -1;
|
536
549
|
}
|
537
550
|
}
|
538
551
|
if (nativeIndexOf && array.indexOf === nativeIndexOf) return array.indexOf(item, isSorted);
|
539
|
-
for (; i <
|
552
|
+
for (; i < length; i++) if (array[i] === item) return i;
|
540
553
|
return -1;
|
541
554
|
};
|
542
555
|
|
@@ -562,11 +575,11 @@
|
|
562
575
|
}
|
563
576
|
step = arguments[2] || 1;
|
564
577
|
|
565
|
-
var
|
578
|
+
var length = Math.max(Math.ceil((stop - start) / step), 0);
|
566
579
|
var idx = 0;
|
567
|
-
var range = new Array(
|
580
|
+
var range = new Array(length);
|
568
581
|
|
569
|
-
while(idx <
|
582
|
+
while(idx < length) {
|
570
583
|
range[idx++] = start;
|
571
584
|
start += step;
|
572
585
|
}
|
@@ -678,17 +691,24 @@
|
|
678
691
|
// N milliseconds. If `immediate` is passed, trigger the function on the
|
679
692
|
// leading edge, instead of the trailing.
|
680
693
|
_.debounce = function(func, wait, immediate) {
|
681
|
-
var result;
|
682
|
-
var timeout = null;
|
694
|
+
var timeout, args, context, timestamp, result;
|
683
695
|
return function() {
|
684
|
-
|
696
|
+
context = this;
|
697
|
+
args = arguments;
|
698
|
+
timestamp = new Date();
|
685
699
|
var later = function() {
|
686
|
-
|
687
|
-
if (
|
700
|
+
var last = (new Date()) - timestamp;
|
701
|
+
if (last < wait) {
|
702
|
+
timeout = setTimeout(later, wait - last);
|
703
|
+
} else {
|
704
|
+
timeout = null;
|
705
|
+
if (!immediate) result = func.apply(context, args);
|
706
|
+
}
|
688
707
|
};
|
689
708
|
var callNow = immediate && !timeout;
|
690
|
-
|
691
|
-
|
709
|
+
if (!timeout) {
|
710
|
+
timeout = setTimeout(later, wait);
|
711
|
+
}
|
692
712
|
if (callNow) result = func.apply(context, args);
|
693
713
|
return result;
|
694
714
|
};
|
@@ -754,22 +774,33 @@
|
|
754
774
|
|
755
775
|
// Retrieve the values of an object's properties.
|
756
776
|
_.values = function(obj) {
|
757
|
-
var
|
758
|
-
|
777
|
+
var keys = _.keys(obj);
|
778
|
+
var length = keys.length;
|
779
|
+
var values = new Array(length);
|
780
|
+
for (var i = 0; i < length; i++) {
|
781
|
+
values[i] = obj[keys[i]];
|
782
|
+
}
|
759
783
|
return values;
|
760
784
|
};
|
761
785
|
|
762
786
|
// Convert an object into a list of `[key, value]` pairs.
|
763
787
|
_.pairs = function(obj) {
|
764
|
-
var
|
765
|
-
|
788
|
+
var keys = _.keys(obj);
|
789
|
+
var length = keys.length;
|
790
|
+
var pairs = new Array(length);
|
791
|
+
for (var i = 0; i < length; i++) {
|
792
|
+
pairs[i] = [keys[i], obj[keys[i]]];
|
793
|
+
}
|
766
794
|
return pairs;
|
767
795
|
};
|
768
796
|
|
769
797
|
// Invert the keys and values of an object. The values must be serializable.
|
770
798
|
_.invert = function(obj) {
|
771
799
|
var result = {};
|
772
|
-
|
800
|
+
var keys = _.keys(obj);
|
801
|
+
for (var i = 0, length = keys.length; i < length; i++) {
|
802
|
+
result[obj[keys[i]]] = keys[i];
|
803
|
+
}
|
773
804
|
return result;
|
774
805
|
};
|
775
806
|
|
@@ -1084,7 +1115,7 @@
|
|
1084
1115
|
|
1085
1116
|
// Add your own custom functions to the Underscore object.
|
1086
1117
|
_.mixin = function(obj) {
|
1087
|
-
each(_.functions(obj), function(name){
|
1118
|
+
each(_.functions(obj), function(name) {
|
1088
1119
|
var func = _[name] = obj[name];
|
1089
1120
|
_.prototype[name] = function() {
|
1090
1121
|
var args = [this._wrapped];
|
@@ -1242,4 +1273,4 @@
|
|
1242
1273
|
|
1243
1274
|
});
|
1244
1275
|
|
1245
|
-
}).call(this);
|
1276
|
+
}).call(this);
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: underscore-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.5.
|
4
|
+
version: 1.5.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Robin Wenglewski
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-
|
11
|
+
date: 2013-10-04 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description:
|
14
14
|
email:
|
@@ -19,6 +19,7 @@ extra_rdoc_files: []
|
|
19
19
|
files:
|
20
20
|
- .gitignore
|
21
21
|
- Gemfile
|
22
|
+
- LICENSE.md
|
22
23
|
- Rakefile
|
23
24
|
- Readme.md
|
24
25
|
- lib/underscore-rails.rb
|
@@ -26,7 +27,8 @@ files:
|
|
26
27
|
- underscore-rails.gemspec
|
27
28
|
- vendor/assets/javascripts/underscore.js
|
28
29
|
homepage: https://github.com/rweng/underscore-rails
|
29
|
-
licenses:
|
30
|
+
licenses:
|
31
|
+
- MIT
|
30
32
|
metadata: {}
|
31
33
|
post_install_message:
|
32
34
|
rdoc_options: []
|