Coverage

100%
60
60
0

/Users/tobi/Development/GitHub/grunt-voguesy/tasks/semver/index.js

100%
60
60
0
LineHitsSource
11'use strict';
2
31var _ = require('lodash');
4
51function Semver(tolerance) {
619 this._tolerance = tolerance;
7}
8
91Semver.prototype.setComparison = function(base, comparator) {
1026 this._base = this.parse(base);
1126 this._comparator = this.parse(comparator);
12
1326 return this;
14};
15
161Semver.prototype.allMajor = function(status, comparator) {
172 var _comparator = comparator || 'latest';
182 var _outdated = {};
192 var self = this;
20
212 _.forEach(status, function(version, packageName) {
224 self.setComparison(version.current, version.latest);
23
244 if (!self.major().ahead(self._tolerance.major)) {
252 _outdated[packageName] = version;
26 }
27 });
28
292 return {
30 passing: Object.keys(_outdated).length <= 0,
31 outdated: _outdated
32 };
33};
34
351Semver.prototype.allMinor = function(status, comparator) {
362 var _comparator = comparator || 'latest';
372 var _outdated = {};
382 var self = this;
39
402 _.forEach(status, function(version, packageName) {
414 self.setComparison(version.current, version.latest);
42
434 if (!self.minor().ahead(self._tolerance.minor)) {
441 _outdated[packageName] = version;
45 }
46 });
47
482 return {
49 passing: Object.keys(_outdated).length <= 0,
50 outdated: _outdated
51 };
52};
53
541Semver.prototype.allPatch = function(status, comparator) {
552 var _comparator = comparator || 'latest';
562 var _outdated = {};
572 var self = this;
58
592 _.forEach(status, function(version, packageName) {
604 self.setComparison(version.current, version.latest);
61
624 if (!self.patch().ahead(self._tolerance.patch)) {
632 _outdated[packageName] = version;
64 }
65 });
66
672 return {
68 passing: Object.keys(_outdated).length <= 0,
69 outdated: _outdated
70 };
71};
72
731Semver.prototype.generate = function(part) {
7430 var api = {
75 get: function() {
763 return this._base[part];
77 },
78 is: function(minor) {
793 return minor === this._base[part];
80 },
81 behind: function(range) {
826 var _tolerance = this._comparator[part] - range;
83
846 return this._base[part] >= _tolerance;
85 },
86 ahead: function(range) {
8718 var _tolerance = this._base[part] + range;
88
8918 return _tolerance >= this._comparator[part];
90 }
91 };
92
9330 return {
94 get: api.get.bind(this),
95 is: api.is.bind(this),
96 behind: api.behind.bind(this),
97 ahead: api.ahead.bind(this)
98 };
99};
100
1011Semver.prototype.parse = function(version) {
10254 if (typeof version !== 'string') { return false; }
103
10450 var _split = version.split('.');
10550 var _parsed;
106
10753 if (_split.length !== 3) { return false; }
108
10947 _parsed = {
110 major: parseInt(_split[0]),
111 minor: parseInt(_split[1]),
112 patch: parseInt(_split[2])
113 };
114
11547 return (
116 isNaN(_parsed.major) ||
117 isNaN(_parsed.minor) ||
118 isNaN(_parsed.patch)
119 ) ? false : _parsed;
120};
121
1221Semver.prototype.valid = function() {
1234 return (
124 this._base !== false &&
125 this._comparator !== false
126 );
127};
128
1291Semver.prototype.major = function() {
13010 return this.generate('major');
131};
132
1331Semver.prototype.minor = function() {
13410 return this.generate('minor');
135};
136
1371Semver.prototype.patch = function() {
13810 return this.generate('patch');
139};
140
1411module.exports = Semver;
142