underscore_extensions 0.2.3 → 0.2.4
Sign up to get free protection for your applications and to get access to all the features.
- data/Rakefile +3 -3
- data/config/{jslint.yml → jshint.yml} +3 -2
- data/lib/assets/javascripts/underscore.extensions.js +11 -8
- data/lib/underscore_extensions/version.rb +2 -2
- data/spec/javascripts/underscore.extensions_spec.js +23 -23
- data/underscore_extensions.gemspec +2 -2
- data/vendor/assets/javascripts/underscore.js +68 -62
- metadata +8 -8
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 'jshint/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
|
+
JSHint.config_path = 'config/jshint.yml'
|
18
18
|
|
19
|
-
task :default => [:
|
19
|
+
task :default => [:jshint, :'jasmine:ci']
|
@@ -51,13 +51,14 @@ indent: 2 # Number of spaces that should be used for indentation - use
|
|
51
51
|
maxerr: 50 # The maximum number of warnings reported (per file)
|
52
52
|
passfail: false # true if the scan should stop on first error (per file)
|
53
53
|
# following are relevant only if undef = true
|
54
|
-
predef:
|
54
|
+
predef: # Names of predefined global variables - comma-separated string or a YAML array
|
55
|
+
- InflectionJS
|
55
56
|
browser: true # true if the standard browser globals should be predefined
|
56
57
|
rhino: false # true if the Rhino environment globals should be predefined
|
57
58
|
windows: false # true if Windows-specific globals should be predefined
|
58
59
|
widget: false # true if the Yahoo Widgets globals should be predefined
|
59
60
|
devel: true # true if functions like alert, confirm, console, prompt etc. are predefined
|
60
|
-
|
61
|
+
validthis: true
|
61
62
|
|
62
63
|
# ------------ jslint_on_rails custom lint options (switch to true to disable some annoying warnings) ------------
|
63
64
|
|
@@ -1,4 +1,7 @@
|
|
1
|
-
(function(
|
1
|
+
(function() {
|
2
|
+
'use strict';
|
3
|
+
var exports = this, _ = exports._;
|
4
|
+
|
2
5
|
if (_.str && _.str.exports) {
|
3
6
|
_.mixin(_.str.exports());
|
4
7
|
}
|
@@ -12,11 +15,11 @@
|
|
12
15
|
else if (argLength === 2 && (result = obj && hasProperty.call(obj, key))) {
|
13
16
|
return result;
|
14
17
|
}
|
15
|
-
return (result = obj && hasProperty.call(obj, key)) && has.apply(this, [obj[key]].concat(_
|
18
|
+
return (result = obj && hasProperty.call(obj, key)) && has.apply(this, [obj[key]].concat(_.rest(arguments, 2)));
|
16
19
|
}
|
17
20
|
|
18
21
|
function namespace(obj, ns) {
|
19
|
-
return _(ns
|
22
|
+
return _.reduce(ns, function(base, n) {
|
20
23
|
var _baseN = _(base[n]);
|
21
24
|
if (_baseN.isUndefined() || _baseN.isNull()) {
|
22
25
|
base[n] = {};
|
@@ -27,7 +30,7 @@
|
|
27
30
|
|
28
31
|
_.mixin({
|
29
32
|
has: function(obj, key) {
|
30
|
-
var isArray = _
|
33
|
+
var isArray = _.isArray(key);
|
31
34
|
if (arguments.length === 2 && !isArray) {
|
32
35
|
return hasProperty.call(obj, key);
|
33
36
|
} else {
|
@@ -36,7 +39,7 @@
|
|
36
39
|
},
|
37
40
|
namespace: function(obj, ns) {
|
38
41
|
if (arguments.length === 2) {
|
39
|
-
if (_
|
42
|
+
if (_.isArray(ns)) {
|
40
43
|
return namespace(obj, ns);
|
41
44
|
} else {
|
42
45
|
return namespace(obj, ns.split('.'));
|
@@ -47,10 +50,10 @@
|
|
47
50
|
}
|
48
51
|
});
|
49
52
|
|
50
|
-
if (
|
53
|
+
if (exports.InflectionJS) {
|
51
54
|
_.mixin({
|
52
55
|
pluralize: function(obj, number, options) {
|
53
|
-
if (!_
|
56
|
+
if (!_.isNumber(number)) {
|
54
57
|
options = number;
|
55
58
|
number = 0;
|
56
59
|
}
|
@@ -68,4 +71,4 @@
|
|
68
71
|
}
|
69
72
|
});
|
70
73
|
}
|
71
|
-
}).call(this
|
74
|
+
}).call(this);
|
@@ -3,7 +3,7 @@ describe('_', function() {
|
|
3
3
|
describe('when the namespace is passed as a single parameter with period separator', function() {
|
4
4
|
it('should create the namespace', function() {
|
5
5
|
var result = {};
|
6
|
-
baz = _
|
6
|
+
baz = _.namespace(result, 'foo.bar.baz');
|
7
7
|
baz.property = 'property';
|
8
8
|
expect(result.foo.bar.baz).toBeDefined();
|
9
9
|
expect(result.foo.bar.baz.property).toBeDefined();
|
@@ -11,7 +11,7 @@ describe('_', function() {
|
|
11
11
|
|
12
12
|
it('should not overwrite existing namespaces', function() {
|
13
13
|
var result = { foo: {a: 'b'}};
|
14
|
-
baz = _
|
14
|
+
baz = _.namespace(result, 'foo.bar.baz');
|
15
15
|
expect(result.foo.bar.baz).toBeDefined();
|
16
16
|
expect(result.foo.a).toEqual('b');
|
17
17
|
});
|
@@ -20,7 +20,7 @@ describe('_', function() {
|
|
20
20
|
describe('when the namespace is passed as multiple parameters', function() {
|
21
21
|
it('should create the namespace', function() {
|
22
22
|
var result = {};
|
23
|
-
baz = _
|
23
|
+
baz = _.namespace(result, 'foo', 'bar', 'baz');
|
24
24
|
baz.property = 'property';
|
25
25
|
expect(result.foo.bar.baz).toBeDefined();
|
26
26
|
expect(result.foo.bar.baz.property).toBeDefined();
|
@@ -28,7 +28,7 @@ describe('_', function() {
|
|
28
28
|
|
29
29
|
it('should not overwrite existing namespaces', function() {
|
30
30
|
var result = { foo: {a: 'b'}};
|
31
|
-
baz = _
|
31
|
+
baz = _.namespace(result, 'foo', 'bar', 'baz');
|
32
32
|
expect(result.foo.bar.baz).toBeDefined();
|
33
33
|
expect(result.foo.a).toEqual('b');
|
34
34
|
});
|
@@ -37,7 +37,7 @@ describe('_', function() {
|
|
37
37
|
describe('when the namespace is passed as an array', function() {
|
38
38
|
it('should create the namespace', function() {
|
39
39
|
var result = {};
|
40
|
-
baz = _
|
40
|
+
baz = _.namespace(result, ['foo', 'bar', 'baz']);
|
41
41
|
baz.property = 'property';
|
42
42
|
expect(result.foo.bar.baz).toBeDefined();
|
43
43
|
expect(result.foo.bar.baz.property).toBeDefined();
|
@@ -45,7 +45,7 @@ describe('_', function() {
|
|
45
45
|
|
46
46
|
it('should not overwrite existing namespaces', function() {
|
47
47
|
var result = { foo: {a: 'b'}};
|
48
|
-
baz = _
|
48
|
+
baz = _.namespace(result, ['foo', 'bar', 'baz']);
|
49
49
|
expect(result.foo.bar.baz).toBeDefined();
|
50
50
|
expect(result.foo.a).toEqual('b');
|
51
51
|
});
|
@@ -55,51 +55,51 @@ describe('_', function() {
|
|
55
55
|
describe('#has', function() {
|
56
56
|
it('should check each property on the object', function() {
|
57
57
|
var obj = {foo: {bar: {baz: true}}};
|
58
|
-
expect(_
|
59
|
-
expect(_
|
60
|
-
expect(_
|
58
|
+
expect(_.has(obj, 'foo', 'fizz')).toBe(false);
|
59
|
+
expect(_.has(obj, 'foo', 'bar', 'baz')).toBe(true);
|
60
|
+
expect(_.has(obj, 'foo', 'bar', 'baz', 'buzz')).toBe(false);
|
61
61
|
});
|
62
62
|
|
63
63
|
it('should check array arguments on the object', function() {
|
64
64
|
var obj = {foo: {bar: {baz: true}}};
|
65
|
-
expect(_
|
66
|
-
expect(_
|
67
|
-
expect(_
|
65
|
+
expect(_.has(obj, ['foo', 'fizz'])).toBe(false);
|
66
|
+
expect(_.has(obj, ['foo', 'bar', 'baz'])).toBe(true);
|
67
|
+
expect(_.has(obj, ['foo', 'bar', 'baz', 'buzz'])).toBe(false);
|
68
68
|
});
|
69
69
|
});
|
70
70
|
|
71
71
|
describe('#pluralize', function() {
|
72
72
|
it("should pluralize a model name", function() {
|
73
|
-
expect(_('point')
|
74
|
-
expect(_('story')
|
73
|
+
expect(_.pluralize('point')).toEqual('points');
|
74
|
+
expect(_.pluralize('story')).toEqual('stories');
|
75
75
|
});
|
76
76
|
|
77
77
|
it('should pass the skip option', function() {
|
78
|
-
expect(_('foo'
|
78
|
+
expect(_.pluralize('foo', {skip: 'foo'})).toEqual('foo');
|
79
79
|
});
|
80
80
|
|
81
81
|
describe('when a number is provided', function() {
|
82
82
|
it('should not pluralize when the number is 1', function() {
|
83
|
-
expect(_('foo'
|
84
|
-
expect(_('foo'
|
85
|
-
expect(_('foo'
|
83
|
+
expect(_.pluralize('foo', 0)).toEqual('foos');
|
84
|
+
expect(_.pluralize('foo', 1)).toEqual('foo');
|
85
|
+
expect(_.pluralize('foo', 2)).toEqual('foos');
|
86
86
|
});
|
87
87
|
|
88
88
|
it('should pass the skip option', function() {
|
89
|
-
expect(_('foo'
|
90
|
-
expect(_('foo'
|
89
|
+
expect(_.pluralize('foo', 2, {skip: 'bar'})).toEqual('foos');
|
90
|
+
expect(_.pluralize('foo', 2, {skip: 'foo'})).toEqual('foo');
|
91
91
|
});
|
92
92
|
});
|
93
93
|
});
|
94
94
|
|
95
95
|
describe('#singularize', function() {
|
96
96
|
it('should singularize a model name', function() {
|
97
|
-
expect(_('octopi')
|
98
|
-
expect(_('stories')
|
97
|
+
expect(_.singularize('octopi')).toEqual('octopus');
|
98
|
+
expect(_.singularize('stories')).toEqual('story');
|
99
99
|
});
|
100
100
|
|
101
101
|
it('should pass the skip option', function() {
|
102
|
-
expect(_('foos'
|
102
|
+
expect(_.singularize('foos', {skip: 'foos'})).toEqual('foos');
|
103
103
|
});
|
104
104
|
});
|
105
105
|
});
|
@@ -19,8 +19,8 @@ Gem::Specification.new do |s|
|
|
19
19
|
s.require_paths = ["lib"]
|
20
20
|
|
21
21
|
s.add_development_dependency 'fuubar'
|
22
|
-
s.add_development_dependency 'jasmine',
|
23
|
-
s.add_development_dependency '
|
22
|
+
s.add_development_dependency 'jasmine', '>= 1.3.2'
|
23
|
+
s.add_development_dependency 'jshint_on_rails'
|
24
24
|
s.add_development_dependency 'thin'
|
25
25
|
s.add_runtime_dependency 'rails', '>= 3.1'
|
26
26
|
end
|
@@ -1,12 +1,13 @@
|
|
1
|
-
//
|
2
|
-
//
|
3
|
-
// (c) 2009-2012 Jeremy Ashkenas, DocumentCloud Inc.
|
4
|
-
// Underscore may be freely distributed under the MIT license.
|
1
|
+
// Underscore.js 1.4.4
|
2
|
+
// ===================
|
5
3
|
|
6
|
-
|
4
|
+
// > http://underscorejs.org
|
5
|
+
// > (c) 2009-2013 Jeremy Ashkenas, DocumentCloud Inc.
|
6
|
+
// > Underscore may be freely distributed under the MIT license.
|
7
7
|
|
8
|
-
|
9
|
-
|
8
|
+
// Baseline setup
|
9
|
+
// --------------
|
10
|
+
(function() {
|
10
11
|
|
11
12
|
// Establish the root object, `window` in the browser, or `global` on the server.
|
12
13
|
var root = this;
|
@@ -30,18 +31,18 @@
|
|
30
31
|
// All **ECMAScript 5** native function implementations that we hope to use
|
31
32
|
// are declared here.
|
32
33
|
var
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
34
|
+
nativeForEach = ArrayProto.forEach,
|
35
|
+
nativeMap = ArrayProto.map,
|
36
|
+
nativeReduce = ArrayProto.reduce,
|
37
|
+
nativeReduceRight = ArrayProto.reduceRight,
|
38
|
+
nativeFilter = ArrayProto.filter,
|
39
|
+
nativeEvery = ArrayProto.every,
|
40
|
+
nativeSome = ArrayProto.some,
|
41
|
+
nativeIndexOf = ArrayProto.indexOf,
|
42
|
+
nativeLastIndexOf = ArrayProto.lastIndexOf,
|
43
|
+
nativeIsArray = Array.isArray,
|
44
|
+
nativeKeys = Object.keys,
|
45
|
+
nativeBind = FuncProto.bind;
|
45
46
|
|
46
47
|
// Create a safe reference to the Underscore object for use below.
|
47
48
|
var _ = function(obj) {
|
@@ -64,7 +65,7 @@
|
|
64
65
|
}
|
65
66
|
|
66
67
|
// Current version.
|
67
|
-
_.VERSION = '1.4.
|
68
|
+
_.VERSION = '1.4.4';
|
68
69
|
|
69
70
|
// Collection Functions
|
70
71
|
// --------------------
|
@@ -224,8 +225,9 @@
|
|
224
225
|
// Invoke a method (with arguments) on every item in a collection.
|
225
226
|
_.invoke = function(obj, method) {
|
226
227
|
var args = slice.call(arguments, 2);
|
228
|
+
var isFunc = _.isFunction(method);
|
227
229
|
return _.map(obj, function(value) {
|
228
|
-
return (
|
230
|
+
return (isFunc ? method : value[method]).apply(value, args);
|
229
231
|
});
|
230
232
|
};
|
231
233
|
|
@@ -235,10 +237,10 @@
|
|
235
237
|
};
|
236
238
|
|
237
239
|
// 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 _
|
240
|
+
// containing specific `key:value` pairs.
|
241
|
+
_.where = function(obj, attrs, first) {
|
242
|
+
if (_.isEmpty(attrs)) return first ? null : [];
|
243
|
+
return _[first ? 'find' : 'filter'](obj, function(value) {
|
242
244
|
for (var key in attrs) {
|
243
245
|
if (attrs[key] !== value[key]) return false;
|
244
246
|
}
|
@@ -246,6 +248,12 @@
|
|
246
248
|
});
|
247
249
|
};
|
248
250
|
|
251
|
+
// Convenience version of a common use case of `find`: getting the first object
|
252
|
+
// containing specific `key:value` pairs.
|
253
|
+
_.findWhere = function(obj, attrs) {
|
254
|
+
return _.where(obj, attrs, true);
|
255
|
+
};
|
256
|
+
|
249
257
|
// Return the maximum element or (element-based computation).
|
250
258
|
// Can't optimize arrays of integers longer than 65,535 elements.
|
251
259
|
// See: https://bugs.webkit.org/show_bug.cgi?id=80797
|
@@ -304,14 +312,14 @@
|
|
304
312
|
criteria : iterator.call(context, value, index, list)
|
305
313
|
};
|
306
314
|
}).sort(function(left, right) {
|
307
|
-
|
308
|
-
|
309
|
-
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
|
314
|
-
|
315
|
+
var a = left.criteria;
|
316
|
+
var b = right.criteria;
|
317
|
+
if (a !== b) {
|
318
|
+
if (a > b || a === void 0) return 1;
|
319
|
+
if (a < b || b === void 0) return -1;
|
320
|
+
}
|
321
|
+
return left.index < right.index ? -1 : 1;
|
322
|
+
}), 'value');
|
315
323
|
};
|
316
324
|
|
317
325
|
// An internal function used for aggregate "group by" operations.
|
@@ -567,26 +575,23 @@
|
|
567
575
|
// Function (ahem) Functions
|
568
576
|
// ------------------
|
569
577
|
|
570
|
-
// Reusable constructor function for prototype setting.
|
571
|
-
var ctor = function(){};
|
572
|
-
|
573
578
|
// 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.
|
579
|
+
// optionally). Delegates to **ECMAScript 5**'s native `Function.bind` if
|
580
|
+
// available.
|
577
581
|
_.bind = function(func, context) {
|
578
|
-
var args, bound;
|
579
582
|
if (func.bind === nativeBind && nativeBind) return nativeBind.apply(func, slice.call(arguments, 1));
|
580
|
-
|
581
|
-
|
582
|
-
|
583
|
-
|
584
|
-
|
585
|
-
|
586
|
-
|
587
|
-
|
588
|
-
|
589
|
-
|
583
|
+
var args = slice.call(arguments, 2);
|
584
|
+
return function() {
|
585
|
+
return func.apply(context, args.concat(slice.call(arguments)));
|
586
|
+
};
|
587
|
+
};
|
588
|
+
|
589
|
+
// Partially apply a function by creating a version that has had some of its
|
590
|
+
// arguments pre-filled, without changing its dynamic `this` context.
|
591
|
+
_.partial = function(func) {
|
592
|
+
var args = slice.call(arguments, 1);
|
593
|
+
return function() {
|
594
|
+
return func.apply(this, args.concat(slice.call(arguments)));
|
590
595
|
};
|
591
596
|
};
|
592
597
|
|
@@ -594,7 +599,7 @@
|
|
594
599
|
// all callbacks defined on an object belong to it.
|
595
600
|
_.bindAll = function(obj) {
|
596
601
|
var funcs = slice.call(arguments, 1);
|
597
|
-
if (funcs.length
|
602
|
+
if (funcs.length === 0) funcs = _.functions(obj);
|
598
603
|
each(funcs, function(f) { obj[f] = _.bind(obj[f], obj); });
|
599
604
|
return obj;
|
600
605
|
};
|
@@ -781,7 +786,7 @@
|
|
781
786
|
return copy;
|
782
787
|
};
|
783
788
|
|
784
|
-
|
789
|
+
// Return a copy of the object without the blacklisted properties.
|
785
790
|
_.omit = function(obj) {
|
786
791
|
var copy = {};
|
787
792
|
var keys = concat.apply(ArrayProto, slice.call(arguments, 1));
|
@@ -849,9 +854,9 @@
|
|
849
854
|
// RegExps are compared by their source patterns and flags.
|
850
855
|
case '[object RegExp]':
|
851
856
|
return a.source == b.source &&
|
852
|
-
|
853
|
-
|
854
|
-
|
857
|
+
a.global == b.global &&
|
858
|
+
a.multiline == b.multiline &&
|
859
|
+
a.ignoreCase == b.ignoreCase;
|
855
860
|
}
|
856
861
|
if (typeof a != 'object' || typeof b != 'object') return false;
|
857
862
|
// Assume equality for cyclic structures. The algorithm for detecting cyclic
|
@@ -882,7 +887,7 @@
|
|
882
887
|
// from different frames are.
|
883
888
|
var aCtor = a.constructor, bCtor = b.constructor;
|
884
889
|
if (aCtor !== bCtor && !(_.isFunction(aCtor) && (aCtor instanceof aCtor) &&
|
885
|
-
|
890
|
+
_.isFunction(bCtor) && (bCtor instanceof bCtor))) {
|
886
891
|
return false;
|
887
892
|
}
|
888
893
|
// Deep compare objects.
|
@@ -1019,7 +1024,7 @@
|
|
1019
1024
|
max = min;
|
1020
1025
|
min = 0;
|
1021
1026
|
}
|
1022
|
-
return min + (
|
1027
|
+
return min + Math.floor(Math.random() * (max - min + 1));
|
1023
1028
|
};
|
1024
1029
|
|
1025
1030
|
// List of HTML entities for escaping.
|
@@ -1075,7 +1080,7 @@
|
|
1075
1080
|
// Useful for temporary DOM ids.
|
1076
1081
|
var idCounter = 0;
|
1077
1082
|
_.uniqueId = function(prefix) {
|
1078
|
-
var id =
|
1083
|
+
var id = ++idCounter + '';
|
1079
1084
|
return prefix ? prefix + id : id;
|
1080
1085
|
};
|
1081
1086
|
|
@@ -1110,6 +1115,7 @@
|
|
1110
1115
|
// Underscore templating handles arbitrary delimiters, preserves whitespace,
|
1111
1116
|
// and correctly escapes quotes within interpolated code.
|
1112
1117
|
_.template = function(text, data, settings) {
|
1118
|
+
var render;
|
1113
1119
|
settings = _.defaults({}, settings, _.templateSettings);
|
1114
1120
|
|
1115
1121
|
// Combine delimiters into one regular expression via alternation.
|
@@ -1124,7 +1130,7 @@
|
|
1124
1130
|
var source = "__p+='";
|
1125
1131
|
text.replace(matcher, function(match, escape, interpolate, evaluate, offset) {
|
1126
1132
|
source += text.slice(index, offset)
|
1127
|
-
|
1133
|
+
.replace(escaper, function(match) { return '\\' + escapes[match]; });
|
1128
1134
|
|
1129
1135
|
if (escape) {
|
1130
1136
|
source += "'+\n((__t=(" + escape + "))==null?'':_.escape(__t))+\n'";
|
@@ -1144,11 +1150,11 @@
|
|
1144
1150
|
if (!settings.variable) source = 'with(obj||{}){\n' + source + '}\n';
|
1145
1151
|
|
1146
1152
|
source = "var __t,__p='',__j=Array.prototype.join," +
|
1147
|
-
|
1148
|
-
|
1153
|
+
"print=function(){__p+=__j.call(arguments,'');};\n" +
|
1154
|
+
source + "return __p;\n";
|
1149
1155
|
|
1150
1156
|
try {
|
1151
|
-
|
1157
|
+
render = new Function(settings.variable || 'obj', '_', source);
|
1152
1158
|
} catch (e) {
|
1153
1159
|
e.source = source;
|
1154
1160
|
throw e;
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: underscore_extensions
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.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: 2013-
|
12
|
+
date: 2013-03-29 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: fuubar
|
@@ -34,7 +34,7 @@ dependencies:
|
|
34
34
|
requirements:
|
35
35
|
- - ! '>='
|
36
36
|
- !ruby/object:Gem::Version
|
37
|
-
version: 1.2
|
37
|
+
version: 1.3.2
|
38
38
|
type: :development
|
39
39
|
prerelease: false
|
40
40
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -42,9 +42,9 @@ dependencies:
|
|
42
42
|
requirements:
|
43
43
|
- - ! '>='
|
44
44
|
- !ruby/object:Gem::Version
|
45
|
-
version: 1.2
|
45
|
+
version: 1.3.2
|
46
46
|
- !ruby/object:Gem::Dependency
|
47
|
-
name:
|
47
|
+
name: jshint_on_rails
|
48
48
|
requirement: !ruby/object:Gem::Requirement
|
49
49
|
none: false
|
50
50
|
requirements:
|
@@ -106,7 +106,7 @@ files:
|
|
106
106
|
- Gemfile
|
107
107
|
- README.markdown
|
108
108
|
- Rakefile
|
109
|
-
- config/
|
109
|
+
- config/jshint.yml
|
110
110
|
- lib/assets/javascripts/underscore.extensions.js
|
111
111
|
- lib/underscore_extensions.rb
|
112
112
|
- lib/underscore_extensions/version.rb
|
@@ -131,7 +131,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
131
131
|
version: '0'
|
132
132
|
segments:
|
133
133
|
- 0
|
134
|
-
hash:
|
134
|
+
hash: 1293456751333068915
|
135
135
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
136
136
|
none: false
|
137
137
|
requirements:
|
@@ -140,7 +140,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
140
140
|
version: '0'
|
141
141
|
segments:
|
142
142
|
- 0
|
143
|
-
hash:
|
143
|
+
hash: 1293456751333068915
|
144
144
|
requirements: []
|
145
145
|
rubyforge_project: underscore_extensions
|
146
146
|
rubygems_version: 1.8.24
|