underscore_extensions 0.2.3 → 0.2.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/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
|