underscore-rails 1.4.3 → 1.4.4
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.
- data/lib/underscore-rails/version.rb +1 -1
- data/lib/underscore-rails.rb +5 -5
- data/vendor/assets/javascripts/underscore.js +35 -19
- metadata +2 -2
data/lib/underscore-rails.rb
CHANGED
@@ -2,10 +2,10 @@ require "underscore-rails/version"
|
|
2
2
|
|
3
3
|
module Underscore
|
4
4
|
module Rails
|
5
|
-
if defined?(::Rails) and ::
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
5
|
+
if defined?(::Rails) and Gem::Requirement.new('>= 3.1').satisfied_by?(Gem::Version.new ::Rails.version)
|
6
|
+
class Rails::Engine < ::Rails::Engine
|
7
|
+
# this class enables the asset pipeline
|
8
|
+
end
|
9
|
+
end
|
10
10
|
end
|
11
11
|
end
|
@@ -1,6 +1,6 @@
|
|
1
|
-
// Underscore.js 1.4.
|
1
|
+
// Underscore.js 1.4.4
|
2
2
|
// http://underscorejs.org
|
3
|
-
// (c) 2009-
|
3
|
+
// (c) 2009-2013 Jeremy Ashkenas, DocumentCloud Inc.
|
4
4
|
// Underscore may be freely distributed under the MIT license.
|
5
5
|
|
6
6
|
(function() {
|
@@ -64,7 +64,7 @@
|
|
64
64
|
}
|
65
65
|
|
66
66
|
// Current version.
|
67
|
-
_.VERSION = '1.4.
|
67
|
+
_.VERSION = '1.4.4';
|
68
68
|
|
69
69
|
// Collection Functions
|
70
70
|
// --------------------
|
@@ -224,8 +224,9 @@
|
|
224
224
|
// Invoke a method (with arguments) on every item in a collection.
|
225
225
|
_.invoke = function(obj, method) {
|
226
226
|
var args = slice.call(arguments, 2);
|
227
|
+
var isFunc = _.isFunction(method);
|
227
228
|
return _.map(obj, function(value) {
|
228
|
-
return (
|
229
|
+
return (isFunc ? method : value[method]).apply(value, args);
|
229
230
|
});
|
230
231
|
};
|
231
232
|
|
@@ -235,10 +236,10 @@
|
|
235
236
|
};
|
236
237
|
|
237
238
|
// Convenience version of a common use case of `filter`: selecting only objects
|
238
|
-
//
|
239
|
-
_.where = function(obj, attrs) {
|
240
|
-
if (_.isEmpty(attrs)) return [];
|
241
|
-
return _
|
239
|
+
// containing specific `key:value` pairs.
|
240
|
+
_.where = function(obj, attrs, first) {
|
241
|
+
if (_.isEmpty(attrs)) return first ? void 0 : [];
|
242
|
+
return _[first ? 'find' : 'filter'](obj, function(value) {
|
242
243
|
for (var key in attrs) {
|
243
244
|
if (attrs[key] !== value[key]) return false;
|
244
245
|
}
|
@@ -246,6 +247,12 @@
|
|
246
247
|
});
|
247
248
|
};
|
248
249
|
|
250
|
+
// Convenience version of a common use case of `find`: getting the first object
|
251
|
+
// containing specific `key:value` pairs.
|
252
|
+
_.findWhere = function(obj, attrs) {
|
253
|
+
return _.where(obj, attrs, true);
|
254
|
+
};
|
255
|
+
|
249
256
|
// Return the maximum element or (element-based computation).
|
250
257
|
// Can't optimize arrays of integers longer than 65,535 elements.
|
251
258
|
// See: https://bugs.webkit.org/show_bug.cgi?id=80797
|
@@ -317,7 +324,7 @@
|
|
317
324
|
// An internal function used for aggregate "group by" operations.
|
318
325
|
var group = function(obj, value, context, behavior) {
|
319
326
|
var result = {};
|
320
|
-
var iterator = lookupIterator(value
|
327
|
+
var iterator = lookupIterator(value == null ? _.identity : value);
|
321
328
|
each(obj, function(value, index) {
|
322
329
|
var key = iterator.call(context, value, index, obj);
|
323
330
|
behavior(result, key, value);
|
@@ -571,9 +578,8 @@
|
|
571
578
|
var ctor = function(){};
|
572
579
|
|
573
580
|
// Create a function bound to a given object (assigning `this`, and arguments,
|
574
|
-
// optionally).
|
575
|
-
//
|
576
|
-
// We check for `func.bind` first, to fail fast when `func` is undefined.
|
581
|
+
// optionally). Delegates to **ECMAScript 5**'s native `Function.bind` if
|
582
|
+
// available.
|
577
583
|
_.bind = function(func, context) {
|
578
584
|
var args, bound;
|
579
585
|
if (func.bind === nativeBind && nativeBind) return nativeBind.apply(func, slice.call(arguments, 1));
|
@@ -590,11 +596,20 @@
|
|
590
596
|
};
|
591
597
|
};
|
592
598
|
|
599
|
+
// Partially apply a function by creating a version that has had some of its
|
600
|
+
// arguments pre-filled, without changing its dynamic `this` context.
|
601
|
+
_.partial = function(func) {
|
602
|
+
var args = slice.call(arguments, 1);
|
603
|
+
return function() {
|
604
|
+
return func.apply(this, args.concat(slice.call(arguments)));
|
605
|
+
};
|
606
|
+
};
|
607
|
+
|
593
608
|
// Bind all of an object's methods to that object. Useful for ensuring that
|
594
609
|
// all callbacks defined on an object belong to it.
|
595
610
|
_.bindAll = function(obj) {
|
596
611
|
var funcs = slice.call(arguments, 1);
|
597
|
-
if (funcs.length
|
612
|
+
if (funcs.length === 0) throw new Error("bindAll must be passed function names");
|
598
613
|
each(funcs, function(f) { obj[f] = _.bind(obj[f], obj); });
|
599
614
|
return obj;
|
600
615
|
};
|
@@ -796,7 +811,7 @@
|
|
796
811
|
each(slice.call(arguments, 1), function(source) {
|
797
812
|
if (source) {
|
798
813
|
for (var prop in source) {
|
799
|
-
if (obj[prop]
|
814
|
+
if (obj[prop] === void 0) obj[prop] = source[prop];
|
800
815
|
}
|
801
816
|
}
|
802
817
|
});
|
@@ -1019,7 +1034,7 @@
|
|
1019
1034
|
max = min;
|
1020
1035
|
min = 0;
|
1021
1036
|
}
|
1022
|
-
return min + (
|
1037
|
+
return min + Math.floor(Math.random() * (max - min + 1));
|
1023
1038
|
};
|
1024
1039
|
|
1025
1040
|
// List of HTML entities for escaping.
|
@@ -1054,7 +1069,7 @@
|
|
1054
1069
|
// If the value of the named property is a function then invoke it;
|
1055
1070
|
// otherwise, return it.
|
1056
1071
|
_.result = function(object, property) {
|
1057
|
-
if (object == null) return
|
1072
|
+
if (object == null) return void 0;
|
1058
1073
|
var value = object[property];
|
1059
1074
|
return _.isFunction(value) ? value.call(object) : value;
|
1060
1075
|
};
|
@@ -1075,7 +1090,7 @@
|
|
1075
1090
|
// Useful for temporary DOM ids.
|
1076
1091
|
var idCounter = 0;
|
1077
1092
|
_.uniqueId = function(prefix) {
|
1078
|
-
var id =
|
1093
|
+
var id = ++idCounter + '';
|
1079
1094
|
return prefix ? prefix + id : id;
|
1080
1095
|
};
|
1081
1096
|
|
@@ -1110,6 +1125,7 @@
|
|
1110
1125
|
// Underscore templating handles arbitrary delimiters, preserves whitespace,
|
1111
1126
|
// and correctly escapes quotes within interpolated code.
|
1112
1127
|
_.template = function(text, data, settings) {
|
1128
|
+
var render;
|
1113
1129
|
settings = _.defaults({}, settings, _.templateSettings);
|
1114
1130
|
|
1115
1131
|
// Combine delimiters into one regular expression via alternation.
|
@@ -1148,7 +1164,7 @@
|
|
1148
1164
|
source + "return __p;\n";
|
1149
1165
|
|
1150
1166
|
try {
|
1151
|
-
|
1167
|
+
render = new Function(settings.variable || 'obj', '_', source);
|
1152
1168
|
} catch (e) {
|
1153
1169
|
e.source = source;
|
1154
1170
|
throw e;
|
@@ -1218,4 +1234,4 @@
|
|
1218
1234
|
|
1219
1235
|
});
|
1220
1236
|
|
1221
|
-
}).call(this);
|
1237
|
+
}).call(this);
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: underscore-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.4.
|
4
|
+
version: 1.4.4
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2013-04-04 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
14
|
description:
|
15
15
|
email:
|