Skip to content

Commit 96c325a

Browse files
committed
Merge pull request #33 from quaertym/version-checker
Move version check logic into its own module
2 parents 582ae05 + c041620 commit 96c325a

File tree

3 files changed

+94
-25
lines changed

3 files changed

+94
-25
lines changed

lib/package.js

Lines changed: 2 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -15,31 +15,8 @@ Package.prototype.init = function(name, versionSpecified, versionInstalled) {
1515
};
1616

1717
Package.prototype.updateRequired = function() {
18-
if (!this.versionInstalled) {
19-
return true;
20-
}
21-
22-
var version = this.versionSpecified;
23-
var isGitRepo = require('./git-repo');
24-
var semver = require('semver');
25-
26-
if (version === '*') {
27-
return false;
28-
} else if (isGitRepo(version)) {
29-
var parts = version.split('#');
30-
if (parts.length === 2) {
31-
version = semver.valid(parts[1]);
32-
if (!version) {
33-
return false;
34-
}
35-
}
36-
}
37-
38-
if (!semver.validRange(version)) {
39-
return false;
40-
}
41-
42-
return !semver.satisfies(this.versionInstalled, version);
18+
var VersionChecker = require('./version-checker');
19+
return !VersionChecker.satisfies(this.versionSpecified, this.versionInstalled);
4320
};
4421

4522
module.exports = Package;

lib/version-checker.js

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
'use strict';
2+
3+
function VersionChecker() {
4+
}
5+
6+
VersionChecker.satisfies = function(versionSpecified, versionInstalled) {
7+
if (!versionInstalled) {
8+
return false;
9+
}
10+
11+
var version = versionSpecified;
12+
var isGitRepo = require('./git-repo');
13+
var semver = require('semver');
14+
15+
if (version === '*') {
16+
return true;
17+
} else if (isGitRepo(version)) {
18+
var parts = version.split('#');
19+
if (parts.length === 2) {
20+
version = semver.valid(parts[1]);
21+
if (!version) {
22+
return true;
23+
}
24+
}
25+
}
26+
27+
if (!semver.validRange(version)) {
28+
return true;
29+
}
30+
31+
return semver.satisfies(versionInstalled, version);
32+
};
33+
34+
module.exports = VersionChecker;

tests/unit/version-checker-test.js

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
'use strict';
2+
3+
var assert = require('chai').assert;
4+
var VersionChecker = require('../../lib/version-checker');
5+
6+
describe('VersionChecker', function() {
7+
describe('does satisfy version', function() {
8+
it('when the version specified is \'*\'', function() {
9+
assert.ok(VersionChecker.satisfies('*','1.2.0'));
10+
});
11+
12+
it('when the version installed is in the specified range', function() {
13+
assert.ok(VersionChecker.satisfies('>1.1.0','2.0.0'));
14+
assert.ok(VersionChecker.satisfies('~1.1.0','1.1.4'));
15+
assert.ok(VersionChecker.satisfies('^1.1.0','1.2.0'));
16+
assert.ok(VersionChecker.satisfies('1.x','1.2.0'));
17+
});
18+
19+
it('when the version installed matches the version specified', function() {
20+
assert.ok(VersionChecker.satisfies('1.2.0','1.2.0'));
21+
});
22+
23+
it('when the version specified is not a valid range', function() {
24+
assert.ok(VersionChecker.satisfies('a.b.c','1.2.0'));
25+
});
26+
27+
it('when the version specified is git-repo with a matched version', function() {
28+
assert.ok(VersionChecker.satisfies('git://github.com/stefanpenner/ember-cli.git#v0.1.0','0.1.0'));
29+
});
30+
31+
it('when the version specified is git-repo with a non-semver tag', function() {
32+
assert.ok(VersionChecker.satisfies('git://github.com/stefanpenner/ember-cli.git#master','0.1.0'));
33+
});
34+
});
35+
36+
describe('does not satisfy version', function() {
37+
it('when the version installed is empty', function() {
38+
assert.notOk(VersionChecker.satisfies('1.2.0',null));
39+
assert.notOk(VersionChecker.satisfies('1.2.0',undefined));
40+
assert.notOk(VersionChecker.satisfies('1.2.0',''));
41+
});
42+
43+
it('when the version installed is in the specified range', function() {
44+
assert.notOk(VersionChecker.satisfies('>1.1.0','0.1.0'));
45+
assert.notOk(VersionChecker.satisfies('~1.1.0','0.1.0'));
46+
assert.notOk(VersionChecker.satisfies('^1.1.0','0.1.0'));
47+
assert.notOk(VersionChecker.satisfies('1.x','0.1.0'));
48+
});
49+
50+
it('when the version installed does not match the version specified', function() {
51+
assert.notOk(VersionChecker.satisfies('1.3.0','1.2.0'));
52+
});
53+
54+
it('when the version specified is git-repo with a non-matched version', function() {
55+
assert.notOk(VersionChecker.satisfies('git://github.com/stefanpenner/ember-cli.git#v0.1.0','1.0.0'));
56+
});
57+
});
58+
});

0 commit comments

Comments
 (0)