Coverage

100%
53
53
0

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

100%
53
53
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
18 _comparator = comparator || 'latest',
19 _outdated = {};
20
212 _.each(status, function(version, packageName) {
224 this.setComparison(version.current, version.latest);
23
244 if (!this.major().ahead(this._tolerance.major)) {
252 _outdated[packageName] = version;
26 }
27 }, this);
28
292 return {
30 passing: Object.keys(_outdated).length <= 0,
31 outdated: _outdated
32 };
33};
34
351Semver.prototype.allMinor = function(status, comparator) {
362 var
37 _comparator = comparator || 'latest',
38 _outdated = {};
39
402 _.each(status, function(version, packageName) {
414 this.setComparison(version.current, version.latest);
42
434 if (!this.minor().ahead(this._tolerance.minor)) {
441 _outdated[packageName] = version;
45 }
46 }, this);
47
482 return {
49 passing: Object.keys(_outdated).length <= 0,
50 outdated: _outdated
51 };
52};
53
541Semver.prototype.allPatch = function(status, comparator) {
552 var
56 _comparator = comparator || 'latest',
57 _outdated = {};
58
592 _.each(status, function(version, packageName) {
604 this.setComparison(version.current, version.latest);
61
624 if (!this.patch().ahead(this._tolerance.patch)) {
632 _outdated[packageName] = version;
64 }
65 }, this);
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('.'),
105 _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