Skip to content

Commit 78718c8

Browse files
committed
feat: Add support for cli options for adapters
1 parent eafa365 commit 78718c8

File tree

9 files changed

+77
-15
lines changed

9 files changed

+77
-15
lines changed

src/db.js

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
const promise = require('promise')
22

3-
function initDbAdapter(adapterName) {
3+
function initDbAdapter(options) {
44
let adapter
55
const repeatCharacter = (char, n) => `${Array(n + 1).join(char)}`
6+
const adapterName = options.adapter
67

78
try {
89
adapter = require(`micro-analytics-adapter-${adapterName}`)
@@ -17,14 +18,17 @@ function initDbAdapter(adapterName) {
1718
}
1819

1920

20-
module.exports.get = adapter.get;
21-
module.exports.getAll = adapter.getAll;
22-
module.exports.put = adapter.put;
23-
module.exports.has = adapter.has;
24-
module.exports.keys = adapter.keys;
25-
module.exports.subscribe = adapter.subscribe;
26-
module.exports.hasFeature = (feature) => typeof adapter[feature] === "function";
21+
module.exports.get = adapter.get
22+
module.exports.getAll = adapter.getAll
23+
module.exports.put = adapter.put
24+
module.exports.has = adapter.has
25+
module.exports.keys = adapter.keys
26+
module.exports.subscribe = adapter.subscribe
27+
module.exports.hasFeature = (feature) => typeof adapter[feature] === "function"
2728

29+
if (module.exports.hasFeature('init')) {
30+
adapter.init(options)
31+
}
2832
}
2933

3034
module.exports = {

src/index.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ const db = require('./db');
55

66
const flags = parseArgs(process.argv)
77

8-
db.initDbAdapter(flags.adapter)
8+
db.initDbAdapter(flags)
99

1010
const handler = require('./handler')
1111
const server = micro(handler)

src/parseArgs.js

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,38 @@
1-
21
const args = require('args');
32

3+
function adapterNameFromArgs(argv) {
4+
for (let i = 0; i < argv.length; i++) {
5+
const arg = argv[i]
6+
if (arg === '-a' || arg === '--adapter') {
7+
return argv[i + 1]
8+
}
9+
if (/--adapter=/.test(arg)) {
10+
return arg.split('=')[1]
11+
}
12+
}
13+
14+
return process.env.DB_ADAPTER || 'flat-file-db'
15+
}
16+
417
module.exports = function parseArgs(argv) {
18+
const adapterName = adapterNameFromArgs(argv);
19+
let options = []
20+
21+
try {
22+
const adapter = require(`micro-analytics-adapter-${adapterName}`)
23+
if (adapter.options) {
24+
options = adapter.options
25+
}
26+
} catch (error) {
27+
if (error.code !== "MODULE_NOT_FOUND") {
28+
throw error;
29+
}
30+
}
31+
532
return args
633
.option(['p', 'port'], 'Port to listen on', process.env.PORT || 3000, Number)
734
.option(['H', 'host'], 'Host to listen on', process.env.HOST ||'0.0.0.0')
835
.option(['a', 'adapter'], 'Database adapter used', process.env.DB_ADAPTER || 'flat-file-db')
36+
.options(options)
937
.parse(argv, { name: 'micro-analytics' })
1038
}

tests/__snapshots__/parseArgs.test.js.snap

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ Object {
55
"H": "0.0.0.0",
66
"a": "flat-file-db",
77
"adapter": "flat-file-db",
8+
"d": "views.db",
9+
"dbName": "views.db",
810
"host": "0.0.0.0",
911
"p": 3000,
1012
"port": 3000,

tests/atomicity.test.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@ const db = require('../src/db')
66
const service = require('../src/handler')
77
let url
88

9-
db.initDbAdapter('flat-file-db');
9+
beforeAll(() => {
10+
db.initDbAdapter({ adapter: 'flat-file-db' });
11+
})
1012

1113
beforeEach(async () => {
1214
url = await listen(service)

tests/errors.test.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,9 @@ const service = require('../src/handler')
55
const db = require('../src/db')
66
let url
77

8-
db.initDbAdapter('flat-file-db');
8+
beforeAll(() => {
9+
db.initDbAdapter({ adapter: 'flat-file-db' });
10+
})
911

1012
beforeEach(async () => {
1113
url = await listen(service)

tests/items.test.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@ const db = require('../src/db')
66
const service = require('../src/handler')
77
let url
88

9-
db.initDbAdapter('flat-file-db');
9+
beforeAll(() => {
10+
db.initDbAdapter({ adapter: 'flat-file-db' });
11+
})
1012

1113
beforeEach(async () => {
1214
mockDb._reset()

tests/parseArgs.test.js

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
jest.mock('pkginfo', () => () => ({version: '1.0.0'}))
22
const parseArgs = require('../src/parseArgs')
33

4-
54
describe('parseArgs', () => {
65
it("should have correct defaults", () => {
76
expect(parseArgs(['node', 'micro-analytics'])).toMatchSnapshot();
@@ -24,4 +23,25 @@ describe('parseArgs', () => {
2423
expect(parseArgs(['node', 'micro-analytics']).host).toEqual('localhost');
2524
delete process.env.HOST
2625
})
26+
27+
it('should use get adapter option when using -a', () => {
28+
process.env.DB_ADAPTER = 'redis'
29+
const args = ['node', 'micro-analytics', '-a', 'flat-file-db']
30+
expect(Object.keys(parseArgs(args))).toContain('dbName');
31+
delete process.env.DB_ADAPTER
32+
});
33+
34+
it('should use get adapter option when using --adapter', () => {
35+
process.env.DB_ADAPTER = 'redis'
36+
const args = ['node', 'micro-analytics', '--adapter', 'flat-file-db']
37+
expect(Object.keys(parseArgs(args))).toContain('dbName');
38+
delete process.env.DB_ADAPTER
39+
});
40+
41+
it('should use get adapter option when using --adapter=', () => {
42+
process.env.DB_ADAPTER = 'redis'
43+
const args = ['node', 'micro-analytics', '--adapter=flat-file-db']
44+
expect(Object.keys(parseArgs(args))).toContain('dbName');
45+
delete process.env.DB_ADAPTER
46+
});
2747
})

tests/sse.test.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@ const db = require('../src/db')
44
const sseHandler = require('../src/sse')
55
let url
66

7-
db.initDbAdapter('flat-file-db');
7+
beforeAll(() => {
8+
db.initDbAdapter({ adapter: 'flat-file-db' });
9+
})
810

911
beforeEach(() => {
1012
mockDb._reset()

0 commit comments

Comments
 (0)