Skip to content

Commit 9bb4c66

Browse files
author
Carlos Rodriguez
committed
initial code
1 parent aea68fc commit 9bb4c66

File tree

5 files changed

+106
-0
lines changed

5 files changed

+106
-0
lines changed

.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
node_modules

Makefile

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
test:
2+
@./node_modules/.bin/mocha \
3+
--reporter spec
4+
5+
.PHONY: test

index.js

+38
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
var idgen = require('idgen');
2+
3+
function Spec(set) {
4+
if (set) {
5+
if (typeof set === 'string') {
6+
set = {service: set};
7+
}
8+
// Parse a version out of service
9+
if (set.service && set.service.indexOf('@') !== -1) {
10+
var parts = set.service.split('@');
11+
this.service = parts[0];
12+
this.version = parts[1];
13+
delete set.service;
14+
}
15+
var self = this;
16+
Object.keys(set).forEach(function (k) {
17+
self[k] = set[k];
18+
});
19+
}
20+
if (!this.id) {
21+
this.id = idgen();
22+
}
23+
}
24+
25+
Spec.prototype.toString = function() {
26+
if (this.version) {
27+
return this.service + '[v' + this.version + ']@' + this.host + ':' + this.port;
28+
}
29+
else if (this.service) {
30+
return this.service + '@' + this.host + ':' + this.port;
31+
}
32+
else if (this.host && this.port) {
33+
return this.host + ':' + this.port;
34+
}
35+
return this.id;
36+
};
37+
38+
module.exports = Spec;

package.json

+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
{
2+
"name": "amino-spec",
3+
"version": "0.0.0",
4+
"description": "Simple class for representing an amino service",
5+
"main": "index.js",
6+
"scripts": {
7+
"test": "make test"
8+
},
9+
"repository": {
10+
"type": "git",
11+
"url": "git://github.com/amino/amino-spec.git"
12+
},
13+
"author": "Carlos Rodriguez",
14+
"license": "MIT",
15+
"dependencies": {
16+
"idgen": "~1.1.1"
17+
},
18+
"devDependencies": {
19+
"mocha": "*"
20+
}
21+
}

test/basic.js

+41
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
var Spec = require('../')
2+
, assert = require('assert')
3+
4+
describe('basic test', function () {
5+
it('can create a spec (service as arg)', function () {
6+
var s = new Spec('my-service');
7+
assert.equal(s.service, 'my-service');
8+
assert.equal(s.version, undefined);
9+
assert.equal(typeof s.id, 'string');
10+
});
11+
it('can create a versioned spec (service as arg)', function () {
12+
var s = new Spec('[email protected]');
13+
assert.equal(s.service, 'my-service');
14+
assert.equal(s.version, '0.1.0');
15+
assert.equal(typeof s.id, 'string');
16+
});
17+
it('can create a spec (object as arg)', function () {
18+
var s = new Spec({service: 'my-service', host: '127.0.0.1', port: 12345, version: '0.1.0'});
19+
assert.equal(s.service, 'my-service');
20+
assert.equal(s.version, '0.1.0');
21+
assert.equal(s.host, '127.0.0.1');
22+
assert.equal(s.port, 12345);
23+
assert.equal(typeof s.id, 'string');
24+
});
25+
it('can create a versioned spec (object as arg)', function () {
26+
var s = new Spec({service: '[email protected]', host: '127.0.0.1', port: 12345});
27+
assert.equal(s.service, 'my-service');
28+
assert.equal(s.version, '0.1.0');
29+
assert.equal(s.host, '127.0.0.1');
30+
assert.equal(s.port, 12345);
31+
assert.equal(typeof s.id, 'string');
32+
});
33+
it('translates to expected string', function () {
34+
var s = new Spec({service: '[email protected]', host: '127.0.0.1', port: 12345});
35+
assert.equal(s + '', 'my-service[v' + s.version + ']@' + s.host + ':' + s.port);
36+
delete s.version;
37+
assert.equal(s + '', 'my-service@' + s.host + ':' + s.port);
38+
delete s.service;
39+
assert.equal(s + '', s.host + ':' + s.port);
40+
});
41+
});

0 commit comments

Comments
 (0)