underscore_extensions 0.2.1 → 0.2.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.
- data/.gitignore +1 -2
- data/.rvmrc +1 -1
- data/Rakefile +3 -3
- data/config/jshint.yml +13 -27
- data/lib/assets/javascripts/underscore.extensions.js +1 -1
- data/lib/underscore_extensions/version.rb +2 -2
- data/spec/javascripts/underscore.extensions_spec.js +0 -6
- data/underscore_extensions.gemspec +1 -1
- data/vendor/assets/javascripts/underscore.js +73 -52
- metadata +34 -34
data/.gitignore
CHANGED
data/.rvmrc
CHANGED
@@ -1 +1 @@
|
|
1
|
-
rvm 1.9.3
|
1
|
+
rvm 1.9.3@underscore_extensions --create
|
data/Rakefile
CHANGED
@@ -3,7 +3,7 @@ ENV['JASMINE_SPEC_FORMAT'] = 'Fuubar'
|
|
3
3
|
# ENV['JASMINE_BROWSER'] = 'chrome'
|
4
4
|
|
5
5
|
require 'bundler/gem_tasks'
|
6
|
-
require '
|
6
|
+
require 'jslint/tasks'
|
7
7
|
|
8
8
|
begin
|
9
9
|
require 'jasmine'
|
@@ -14,6 +14,6 @@ rescue LoadError
|
|
14
14
|
end
|
15
15
|
end
|
16
16
|
|
17
|
-
|
17
|
+
JSLint.config_path = 'config/jshint.yml'
|
18
18
|
|
19
|
-
task :default => [:
|
19
|
+
task :default => [:jslint, :'jasmine:ci']
|
data/config/jshint.yml
CHANGED
@@ -1,27 +1,26 @@
|
|
1
1
|
# ------------ rake task options ------------
|
2
2
|
|
3
|
-
# JS files to check by default, if no parameters are passed to rake
|
3
|
+
# JS files to check by default, if no parameters are passed to rake jslint
|
4
4
|
# (you may want to limit this only to your own scripts and exclude any external scripts and frameworks)
|
5
5
|
|
6
6
|
# this can be overridden by adding 'paths' and 'exclude_paths' parameter to rake command:
|
7
|
-
# rake
|
7
|
+
# rake jslint paths=path1,path2,... exclude_paths=library1,library2,...
|
8
8
|
|
9
9
|
paths:
|
10
10
|
- lib/assets/javascripts/**/*.js
|
11
11
|
|
12
12
|
exclude_paths:
|
13
|
-
- vendor/assets/javascripts/**/*.js
|
14
13
|
|
15
14
|
|
16
|
-
# ------------
|
17
|
-
#
|
15
|
+
# ------------ jslint options ------------
|
16
|
+
# see http://www.jslint.com/lint.html#options for more detailed explanations
|
18
17
|
|
19
18
|
# "enforce" type options (true means potentially more warnings)
|
20
19
|
|
21
20
|
adsafe: false # true if ADsafe rules should be enforced. See http://www.ADsafe.org/
|
22
21
|
bitwise: true # true if bitwise operators should not be allowed
|
23
22
|
newcap: true # true if Initial Caps must be used with constructor functions
|
24
|
-
eqeqeq:
|
23
|
+
eqeqeq: false # true if === should be required (for ALL equality comparisons)
|
25
24
|
immed: false # true if immediate function invocations must be wrapped in parens
|
26
25
|
nomen: false # true if initial or trailing underscore in identifiers should be forbidden
|
27
26
|
onevar: false # true if only one var statement per function should be allowed
|
@@ -29,51 +28,38 @@ plusplus: false # true if ++ and -- should not be allowed
|
|
29
28
|
regexp: false # true if . and [^...] should not be allowed in RegExp literals
|
30
29
|
safe: false # true if the safe subset rules are enforced (used by ADsafe)
|
31
30
|
strict: false # true if the ES5 "use strict"; pragma is required
|
32
|
-
undef:
|
31
|
+
undef: false # true if variables must be declared before used
|
33
32
|
white: false # true if strict whitespace rules apply (see also 'indent' option)
|
34
33
|
|
35
34
|
# "allow" type options (false means potentially more warnings)
|
36
35
|
|
37
36
|
cap: false # true if upper case HTML should be allowed
|
38
|
-
css:
|
37
|
+
css: true # true if CSS workarounds should be tolerated
|
39
38
|
debug: false # true if debugger statements should be allowed (set to false before going into production)
|
40
39
|
es5: false # true if ECMAScript 5 syntax should be allowed
|
41
40
|
evil: false # true if eval should be allowed
|
42
|
-
forin:
|
43
|
-
fragment:
|
41
|
+
forin: true # true if unfiltered 'for in' statements should be allowed
|
42
|
+
fragment: true # true if HTML fragments should be allowed
|
44
43
|
laxbreak: false # true if statement breaks should not be checked
|
45
44
|
on: false # true if HTML event handlers (e.g. onclick="...") should be allowed
|
46
45
|
sub: false # true if subscript notation may be used for expressions better expressed in dot notation
|
47
46
|
|
48
47
|
# other options
|
49
48
|
|
50
|
-
maxlen:
|
49
|
+
maxlen: 120 # Maximum line length
|
51
50
|
indent: 2 # Number of spaces that should be used for indentation - used only if 'white' option is set
|
52
51
|
maxerr: 50 # The maximum number of warnings reported (per file)
|
53
52
|
passfail: false # true if the scan should stop on first error (per file)
|
54
53
|
# following are relevant only if undef = true
|
55
|
-
predef:
|
56
|
-
- _
|
57
|
-
- InflectionJS
|
54
|
+
predef: '' # Names of predefined global variables - comma-separated string or a YAML array
|
58
55
|
browser: true # true if the standard browser globals should be predefined
|
59
56
|
rhino: false # true if the Rhino environment globals should be predefined
|
60
57
|
windows: false # true if Windows-specific globals should be predefined
|
61
58
|
widget: false # true if the Yahoo Widgets globals should be predefined
|
62
|
-
devel:
|
59
|
+
devel: true # true if functions like alert, confirm, console, prompt etc. are predefined
|
63
60
|
|
64
|
-
# jshint options
|
65
|
-
loopfunc: true # true if functions should be allowed to be defined within loops
|
66
|
-
asi: true # true if automatic semicolon insertion should be tolerated
|
67
|
-
boss: true # true if advanced usage of assignments and == should be allowed
|
68
|
-
couch: true # true if CouchDB globals should be predefined
|
69
|
-
curly: false # true if curly braces around blocks should be required (even in if/for/while)
|
70
|
-
noarg: true # true if arguments.caller and arguments.callee should be disallowed
|
71
|
-
node: true # true if the Node.js environment globals should be predefined
|
72
|
-
noempty: true # true if empty blocks should be disallowed
|
73
|
-
nonew: true # true if using `new` for side-effects should be disallowed
|
74
61
|
|
75
|
-
|
76
|
-
# ------------ jshint_on_rails custom lint options (switch to true to disable some annoying warnings) ------------
|
62
|
+
# ------------ jslint_on_rails custom lint options (switch to true to disable some annoying warnings) ------------
|
77
63
|
|
78
64
|
# ignores "missing semicolon" warning at the end of a function; this lets you write one-liners
|
79
65
|
# like: x.map(function(i) { return i + 1 }); without having to put a second semicolon inside the function
|
@@ -1,10 +1,4 @@
|
|
1
1
|
describe('_', function() {
|
2
|
-
describe('#classify', function() {
|
3
|
-
it('should return a string camelized with capital letters', function() {
|
4
|
-
expect(_('the_quick_brown_fox').classify()).toEqual('TheQuickBrownFox');
|
5
|
-
});
|
6
|
-
});
|
7
|
-
|
8
2
|
describe('#namespace', function() {
|
9
3
|
describe('when the namespace is passed as a single parameter with period separator', function() {
|
10
4
|
it('should create the namespace', function() {
|
@@ -20,7 +20,7 @@ Gem::Specification.new do |s|
|
|
20
20
|
|
21
21
|
s.add_development_dependency 'fuubar'
|
22
22
|
s.add_development_dependency 'jasmine', ">= 1.2.1"
|
23
|
-
s.add_development_dependency '
|
23
|
+
s.add_development_dependency 'jslint_on_rails'
|
24
24
|
s.add_development_dependency 'thin'
|
25
25
|
s.add_runtime_dependency 'rails', '>= 3.1'
|
26
26
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
// Underscore.js 1.4.
|
1
|
+
// Underscore.js 1.4.3
|
2
2
|
// http://underscorejs.org
|
3
3
|
// (c) 2009-2012 Jeremy Ashkenas, DocumentCloud Inc.
|
4
4
|
// Underscore may be freely distributed under the MIT license.
|
@@ -24,7 +24,6 @@
|
|
24
24
|
var push = ArrayProto.push,
|
25
25
|
slice = ArrayProto.slice,
|
26
26
|
concat = ArrayProto.concat,
|
27
|
-
unshift = ArrayProto.unshift,
|
28
27
|
toString = ObjProto.toString,
|
29
28
|
hasOwnProperty = ObjProto.hasOwnProperty;
|
30
29
|
|
@@ -61,11 +60,11 @@
|
|
61
60
|
}
|
62
61
|
exports._ = _;
|
63
62
|
} else {
|
64
|
-
root
|
63
|
+
root._ = _;
|
65
64
|
}
|
66
65
|
|
67
66
|
// Current version.
|
68
|
-
_.VERSION = '1.4.
|
67
|
+
_.VERSION = '1.4.3';
|
69
68
|
|
70
69
|
// Collection Functions
|
71
70
|
// --------------------
|
@@ -102,6 +101,8 @@
|
|
102
101
|
return results;
|
103
102
|
};
|
104
103
|
|
104
|
+
var reduceError = 'Reduce of empty array with no initial value';
|
105
|
+
|
105
106
|
// **Reduce** builds up a single result from a list of values, aka `inject`,
|
106
107
|
// or `foldl`. Delegates to **ECMAScript 5**'s native `reduce` if available.
|
107
108
|
_.reduce = _.foldl = _.inject = function(obj, iterator, memo, context) {
|
@@ -119,7 +120,7 @@
|
|
119
120
|
memo = iterator.call(context, memo, value, index, list);
|
120
121
|
}
|
121
122
|
});
|
122
|
-
if (!initial) throw new TypeError(
|
123
|
+
if (!initial) throw new TypeError(reduceError);
|
123
124
|
return memo;
|
124
125
|
};
|
125
126
|
|
@@ -130,7 +131,7 @@
|
|
130
131
|
if (obj == null) obj = [];
|
131
132
|
if (nativeReduceRight && obj.reduceRight === nativeReduceRight) {
|
132
133
|
if (context) iterator = _.bind(iterator, context);
|
133
|
-
return
|
134
|
+
return initial ? obj.reduceRight(iterator, memo) : obj.reduceRight(iterator);
|
134
135
|
}
|
135
136
|
var length = obj.length;
|
136
137
|
if (length !== +length) {
|
@@ -146,7 +147,7 @@
|
|
146
147
|
memo = iterator.call(context, memo, obj[index], index, list);
|
147
148
|
}
|
148
149
|
});
|
149
|
-
if (!initial) throw new TypeError(
|
150
|
+
if (!initial) throw new TypeError(reduceError);
|
150
151
|
return memo;
|
151
152
|
};
|
152
153
|
|
@@ -177,12 +178,9 @@
|
|
177
178
|
|
178
179
|
// Return all the elements for which a truth test fails.
|
179
180
|
_.reject = function(obj, iterator, context) {
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
if (!iterator.call(context, value, index, list)) results[results.length] = value;
|
184
|
-
});
|
185
|
-
return results;
|
181
|
+
return _.filter(obj, function(value, index, list) {
|
182
|
+
return !iterator.call(context, value, index, list);
|
183
|
+
}, context);
|
186
184
|
};
|
187
185
|
|
188
186
|
// Determine whether all of the elements match a truth test.
|
@@ -216,13 +214,11 @@
|
|
216
214
|
// Determine if the array or object contains a given value (using `===`).
|
217
215
|
// Aliased as `include`.
|
218
216
|
_.contains = _.include = function(obj, target) {
|
219
|
-
|
220
|
-
if (obj == null) return found;
|
217
|
+
if (obj == null) return false;
|
221
218
|
if (nativeIndexOf && obj.indexOf === nativeIndexOf) return obj.indexOf(target) != -1;
|
222
|
-
|
219
|
+
return any(obj, function(value) {
|
223
220
|
return value === target;
|
224
221
|
});
|
225
|
-
return found;
|
226
222
|
};
|
227
223
|
|
228
224
|
// Invoke a method (with arguments) on every item in a collection.
|
@@ -258,7 +254,7 @@
|
|
258
254
|
return Math.max.apply(Math, obj);
|
259
255
|
}
|
260
256
|
if (!iterator && _.isEmpty(obj)) return -Infinity;
|
261
|
-
var result = {computed : -Infinity};
|
257
|
+
var result = {computed : -Infinity, value: -Infinity};
|
262
258
|
each(obj, function(value, index, list) {
|
263
259
|
var computed = iterator ? iterator.call(context, value, index, list) : value;
|
264
260
|
computed >= result.computed && (result = {value : value, computed : computed});
|
@@ -272,7 +268,7 @@
|
|
272
268
|
return Math.min.apply(Math, obj);
|
273
269
|
}
|
274
270
|
if (!iterator && _.isEmpty(obj)) return Infinity;
|
275
|
-
var result = {computed : Infinity};
|
271
|
+
var result = {computed : Infinity, value: Infinity};
|
276
272
|
each(obj, function(value, index, list) {
|
277
273
|
var computed = iterator ? iterator.call(context, value, index, list) : value;
|
278
274
|
computed < result.computed && (result = {value : value, computed : computed});
|
@@ -321,7 +317,7 @@
|
|
321
317
|
// An internal function used for aggregate "group by" operations.
|
322
318
|
var group = function(obj, value, context, behavior) {
|
323
319
|
var result = {};
|
324
|
-
var iterator = lookupIterator(value);
|
320
|
+
var iterator = lookupIterator(value || _.identity);
|
325
321
|
each(obj, function(value, index) {
|
326
322
|
var key = iterator.call(context, value, index, obj);
|
327
323
|
behavior(result, key, value);
|
@@ -341,7 +337,7 @@
|
|
341
337
|
// either a string attribute to count by, or a function that returns the
|
342
338
|
// criterion.
|
343
339
|
_.countBy = function(obj, value, context) {
|
344
|
-
return group(obj, value, context, function(result, key
|
340
|
+
return group(obj, value, context, function(result, key) {
|
345
341
|
if (!_.has(result, key)) result[key] = 0;
|
346
342
|
result[key]++;
|
347
343
|
});
|
@@ -363,12 +359,14 @@
|
|
363
359
|
// Safely convert anything iterable into a real, live array.
|
364
360
|
_.toArray = function(obj) {
|
365
361
|
if (!obj) return [];
|
366
|
-
if (
|
362
|
+
if (_.isArray(obj)) return slice.call(obj);
|
363
|
+
if (obj.length === +obj.length) return _.map(obj, _.identity);
|
367
364
|
return _.values(obj);
|
368
365
|
};
|
369
366
|
|
370
367
|
// Return the number of elements in an object.
|
371
368
|
_.size = function(obj) {
|
369
|
+
if (obj == null) return 0;
|
372
370
|
return (obj.length === +obj.length) ? obj.length : _.keys(obj).length;
|
373
371
|
};
|
374
372
|
|
@@ -379,6 +377,7 @@
|
|
379
377
|
// values in the array. Aliased as `head` and `take`. The **guard** check
|
380
378
|
// allows it to work with `_.map`.
|
381
379
|
_.first = _.head = _.take = function(array, n, guard) {
|
380
|
+
if (array == null) return void 0;
|
382
381
|
return (n != null) && !guard ? slice.call(array, 0, n) : array[0];
|
383
382
|
};
|
384
383
|
|
@@ -393,6 +392,7 @@
|
|
393
392
|
// Get the last element of an array. Passing **n** will return the last N
|
394
393
|
// values in the array. The **guard** check allows it to work with `_.map`.
|
395
394
|
_.last = function(array, n, guard) {
|
395
|
+
if (array == null) return void 0;
|
396
396
|
if ((n != null) && !guard) {
|
397
397
|
return slice.call(array, Math.max(array.length - n, 0));
|
398
398
|
} else {
|
@@ -410,7 +410,7 @@
|
|
410
410
|
|
411
411
|
// Trim out all falsy values from an array.
|
412
412
|
_.compact = function(array) {
|
413
|
-
return _.filter(array,
|
413
|
+
return _.filter(array, _.identity);
|
414
414
|
};
|
415
415
|
|
416
416
|
// Internal implementation of a recursive `flatten` function.
|
@@ -439,6 +439,11 @@
|
|
439
439
|
// been sorted, you have the option of using a faster algorithm.
|
440
440
|
// Aliased as `unique`.
|
441
441
|
_.uniq = _.unique = function(array, isSorted, iterator, context) {
|
442
|
+
if (_.isFunction(isSorted)) {
|
443
|
+
context = iterator;
|
444
|
+
iterator = isSorted;
|
445
|
+
isSorted = false;
|
446
|
+
}
|
442
447
|
var initial = iterator ? _.map(array, iterator, context) : array;
|
443
448
|
var results = [];
|
444
449
|
var seen = [];
|
@@ -491,6 +496,7 @@
|
|
491
496
|
// pairs, or two parallel arrays of the same length -- one of keys, and one of
|
492
497
|
// the corresponding values.
|
493
498
|
_.object = function(list, values) {
|
499
|
+
if (list == null) return {};
|
494
500
|
var result = {};
|
495
501
|
for (var i = 0, l = list.length; i < l; i++) {
|
496
502
|
if (values) {
|
@@ -568,8 +574,8 @@
|
|
568
574
|
// optionally). Binding with arguments is also known as `curry`.
|
569
575
|
// Delegates to **ECMAScript 5**'s native `Function.bind` if available.
|
570
576
|
// We check for `func.bind` first, to fail fast when `func` is undefined.
|
571
|
-
_.bind = function
|
572
|
-
var
|
577
|
+
_.bind = function(func, context) {
|
578
|
+
var args, bound;
|
573
579
|
if (func.bind === nativeBind && nativeBind) return nativeBind.apply(func, slice.call(arguments, 1));
|
574
580
|
if (!_.isFunction(func)) throw new TypeError;
|
575
581
|
args = slice.call(arguments, 2);
|
@@ -577,6 +583,7 @@
|
|
577
583
|
if (!(this instanceof bound)) return func.apply(context, args.concat(slice.call(arguments)));
|
578
584
|
ctor.prototype = func.prototype;
|
579
585
|
var self = new ctor;
|
586
|
+
ctor.prototype = null;
|
580
587
|
var result = func.apply(self, args.concat(slice.call(arguments)));
|
581
588
|
if (Object(result) === result) return result;
|
582
589
|
return self;
|
@@ -618,25 +625,26 @@
|
|
618
625
|
// Returns a function, that, when invoked, will only be triggered at most once
|
619
626
|
// during a given window of time.
|
620
627
|
_.throttle = function(func, wait) {
|
621
|
-
var context, args, timeout,
|
622
|
-
var
|
628
|
+
var context, args, timeout, result;
|
629
|
+
var previous = 0;
|
630
|
+
var later = function() {
|
631
|
+
previous = new Date;
|
632
|
+
timeout = null;
|
633
|
+
result = func.apply(context, args);
|
634
|
+
};
|
623
635
|
return function() {
|
624
|
-
|
625
|
-
var
|
636
|
+
var now = new Date;
|
637
|
+
var remaining = wait - (now - previous);
|
638
|
+
context = this;
|
639
|
+
args = arguments;
|
640
|
+
if (remaining <= 0) {
|
641
|
+
clearTimeout(timeout);
|
626
642
|
timeout = null;
|
627
|
-
|
628
|
-
result = func.apply(context, args);
|
629
|
-
}
|
630
|
-
whenDone();
|
631
|
-
};
|
632
|
-
if (!timeout) timeout = setTimeout(later, wait);
|
633
|
-
if (throttling) {
|
634
|
-
more = true;
|
635
|
-
} else {
|
636
|
-
throttling = true;
|
643
|
+
previous = now;
|
637
644
|
result = func.apply(context, args);
|
645
|
+
} else if (!timeout) {
|
646
|
+
timeout = setTimeout(later, remaining);
|
638
647
|
}
|
639
|
-
whenDone();
|
640
648
|
return result;
|
641
649
|
};
|
642
650
|
};
|
@@ -754,8 +762,10 @@
|
|
754
762
|
// Extend a given object with all the properties in passed-in object(s).
|
755
763
|
_.extend = function(obj) {
|
756
764
|
each(slice.call(arguments, 1), function(source) {
|
757
|
-
|
758
|
-
|
765
|
+
if (source) {
|
766
|
+
for (var prop in source) {
|
767
|
+
obj[prop] = source[prop];
|
768
|
+
}
|
759
769
|
}
|
760
770
|
});
|
761
771
|
return obj;
|
@@ -784,8 +794,10 @@
|
|
784
794
|
// Fill in a given object with default properties.
|
785
795
|
_.defaults = function(obj) {
|
786
796
|
each(slice.call(arguments, 1), function(source) {
|
787
|
-
|
788
|
-
|
797
|
+
if (source) {
|
798
|
+
for (var prop in source) {
|
799
|
+
if (obj[prop] == null) obj[prop] = source[prop];
|
800
|
+
}
|
789
801
|
}
|
790
802
|
});
|
791
803
|
return obj;
|
@@ -950,7 +962,7 @@
|
|
950
962
|
|
951
963
|
// Is a given object a finite number?
|
952
964
|
_.isFinite = function(obj) {
|
953
|
-
return
|
965
|
+
return isFinite(obj) && !isNaN(parseFloat(obj));
|
954
966
|
};
|
955
967
|
|
956
968
|
// Is the given value `NaN`? (NaN is the only number which does not equal itself).
|
@@ -996,7 +1008,9 @@
|
|
996
1008
|
|
997
1009
|
// Run a function **n** times.
|
998
1010
|
_.times = function(n, iterator, context) {
|
999
|
-
|
1011
|
+
var accum = Array(n);
|
1012
|
+
for (var i = 0; i < n; i++) accum[i] = iterator.call(context, i);
|
1013
|
+
return accum;
|
1000
1014
|
};
|
1001
1015
|
|
1002
1016
|
// Return a random integer between min and max (inclusive).
|
@@ -1061,7 +1075,7 @@
|
|
1061
1075
|
// Useful for temporary DOM ids.
|
1062
1076
|
var idCounter = 0;
|
1063
1077
|
_.uniqueId = function(prefix) {
|
1064
|
-
var id = idCounter
|
1078
|
+
var id = '' + ++idCounter;
|
1065
1079
|
return prefix ? prefix + id : id;
|
1066
1080
|
};
|
1067
1081
|
|
@@ -1111,11 +1125,18 @@
|
|
1111
1125
|
text.replace(matcher, function(match, escape, interpolate, evaluate, offset) {
|
1112
1126
|
source += text.slice(index, offset)
|
1113
1127
|
.replace(escaper, function(match) { return '\\' + escapes[match]; });
|
1114
|
-
|
1115
|
-
|
1116
|
-
|
1117
|
-
|
1128
|
+
|
1129
|
+
if (escape) {
|
1130
|
+
source += "'+\n((__t=(" + escape + "))==null?'':_.escape(__t))+\n'";
|
1131
|
+
}
|
1132
|
+
if (interpolate) {
|
1133
|
+
source += "'+\n((__t=(" + interpolate + "))==null?'':__t)+\n'";
|
1134
|
+
}
|
1135
|
+
if (evaluate) {
|
1136
|
+
source += "';\n" + evaluate + "\n__p+='";
|
1137
|
+
}
|
1118
1138
|
index = offset + match.length;
|
1139
|
+
return match;
|
1119
1140
|
});
|
1120
1141
|
source += "';\n";
|
1121
1142
|
|
@@ -1197,4 +1218,4 @@
|
|
1197
1218
|
|
1198
1219
|
});
|
1199
1220
|
|
1200
|
-
}).call(this);
|
1221
|
+
}).call(this);
|
metadata
CHANGED
@@ -1,96 +1,96 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: underscore_extensions
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.2.2
|
4
5
|
prerelease:
|
5
|
-
version: 0.2.1
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Ryan Dy
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2013-01-12 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
|
-
version_requirements: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - ! '>='
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: '0'
|
20
|
-
none: false
|
21
|
-
prerelease: false
|
22
15
|
name: fuubar
|
23
16
|
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
24
18
|
requirements:
|
25
19
|
- - ! '>='
|
26
20
|
- !ruby/object:Gem::Version
|
27
21
|
version: '0'
|
28
|
-
none: false
|
29
22
|
type: :development
|
30
|
-
|
23
|
+
prerelease: false
|
31
24
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
32
26
|
requirements:
|
33
27
|
- - ! '>='
|
34
28
|
- !ruby/object:Gem::Version
|
35
|
-
version:
|
36
|
-
|
37
|
-
prerelease: false
|
29
|
+
version: '0'
|
30
|
+
- !ruby/object:Gem::Dependency
|
38
31
|
name: jasmine
|
39
32
|
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
40
34
|
requirements:
|
41
35
|
- - ! '>='
|
42
36
|
- !ruby/object:Gem::Version
|
43
37
|
version: 1.2.1
|
44
|
-
none: false
|
45
38
|
type: :development
|
46
|
-
|
39
|
+
prerelease: false
|
47
40
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
48
42
|
requirements:
|
49
43
|
- - ! '>='
|
50
44
|
- !ruby/object:Gem::Version
|
51
|
-
version:
|
52
|
-
|
53
|
-
|
54
|
-
name: jshint_on_rails
|
45
|
+
version: 1.2.1
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: jslint_on_rails
|
55
48
|
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
56
50
|
requirements:
|
57
51
|
- - ! '>='
|
58
52
|
- !ruby/object:Gem::Version
|
59
53
|
version: '0'
|
60
|
-
none: false
|
61
54
|
type: :development
|
62
|
-
|
55
|
+
prerelease: false
|
63
56
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
64
58
|
requirements:
|
65
59
|
- - ! '>='
|
66
60
|
- !ruby/object:Gem::Version
|
67
61
|
version: '0'
|
68
|
-
|
69
|
-
prerelease: false
|
62
|
+
- !ruby/object:Gem::Dependency
|
70
63
|
name: thin
|
71
64
|
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
72
66
|
requirements:
|
73
67
|
- - ! '>='
|
74
68
|
- !ruby/object:Gem::Version
|
75
69
|
version: '0'
|
76
|
-
none: false
|
77
70
|
type: :development
|
78
|
-
|
71
|
+
prerelease: false
|
79
72
|
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
80
74
|
requirements:
|
81
75
|
- - ! '>='
|
82
76
|
- !ruby/object:Gem::Version
|
83
|
-
version: '
|
84
|
-
|
85
|
-
prerelease: false
|
77
|
+
version: '0'
|
78
|
+
- !ruby/object:Gem::Dependency
|
86
79
|
name: rails
|
87
80
|
requirement: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
88
82
|
requirements:
|
89
83
|
- - ! '>='
|
90
84
|
- !ruby/object:Gem::Version
|
91
85
|
version: '3.1'
|
92
|
-
none: false
|
93
86
|
type: :runtime
|
87
|
+
prerelease: false
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ! '>='
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '3.1'
|
94
94
|
description: Adds extensions to the underscore javascript library. It adds the javascript
|
95
95
|
as a rails engine to be included in to a Rails 3+ project. To use it make sure require
|
96
96
|
underscore, underscore.string and underscore.extensions.
|
@@ -124,23 +124,23 @@ rdoc_options: []
|
|
124
124
|
require_paths:
|
125
125
|
- lib
|
126
126
|
required_ruby_version: !ruby/object:Gem::Requirement
|
127
|
+
none: false
|
127
128
|
requirements:
|
128
129
|
- - ! '>='
|
129
130
|
- !ruby/object:Gem::Version
|
130
131
|
version: '0'
|
131
132
|
segments:
|
132
133
|
- 0
|
133
|
-
hash:
|
134
|
-
none: false
|
134
|
+
hash: 1602788331734609951
|
135
135
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
136
|
+
none: false
|
136
137
|
requirements:
|
137
138
|
- - ! '>='
|
138
139
|
- !ruby/object:Gem::Version
|
139
140
|
version: '0'
|
140
141
|
segments:
|
141
142
|
- 0
|
142
|
-
hash:
|
143
|
-
none: false
|
143
|
+
hash: 1602788331734609951
|
144
144
|
requirements: []
|
145
145
|
rubyforge_project: underscore_extensions
|
146
146
|
rubygems_version: 1.8.24
|