/
MemoryStore.js
87 lines (68 loc) · 2.42 KB
/
MemoryStore.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
'use strict';
const Bluebird = require('bluebird');
const debug = require('debug')('slambda:storage:Memory');
const constants = require('../constants');
const METHOD_TABLE = constants.METHOD_TABLE;
const CONTAINER_TABLE = constants.CONTAINER_TABLE;
const INDEX_SEPARATOR = constants.INDEX_SEPARATOR;
module.exports = class Memory {
constructor(options) {
debug('constructor');
this.store = {
[METHOD_TABLE]: {},
[CONTAINER_TABLE]: {},
};
}
buildCompoundIndex(containerId, methodId) {
return `${containerId}${INDEX_SEPARATOR}${methodId}`
}
getMethod(methodId, containerId) {
debug(`#getMethod() ${JSON.stringify(arguments)}`);
let id = this.buildCompoundIndex(containerId, methodId);
let item = this.store[METHOD_TABLE][id] || null;
return Bluebird.resolve(item);
}
listMethods(containerId) {
debug(`#listMethods() ${JSON.stringify(arguments)}`);
let methods = Object.keys(this.store[METHOD_TABLE])
.filter(key => key.startsWith(containerId))
.map(key => this.store[METHOD_TABLE][key]);
return Bluebird.resolve(methods);
}
putMethod(method) {
debug(`#putMethod() ${JSON.stringify(arguments)}`);
let id = this.buildCompoundIndex(method.container, method.id);
this.store[METHOD_TABLE][id] = method;
return Bluebird.resolve(method);
}
deleteMethod(methodId, containerId) {
debug(`#deleteMethod() ${JSON.stringify(arguments)}`);
let id = this.buildCompoundIndex(containerId, methodId);
delete this.store[METHOD_TABLE][id];
return Bluebird.resolve(id);
}
getContainer(containerId) {
debug(`#getContainer() ${JSON.stringify(arguments)}`);
return Bluebird.resolve(this.store[CONTAINER_TABLE][containerId]);
}
listContainers() {
debug(`#listContainers() ${JSON.stringify(arguments)}`);
return Bluebird.resolve(this.toList(this.store[CONTAINER_TABLE]));
}
putContainer(container) {
debug(`#putContainer() ${JSON.stringify(arguments)}`);
container.methods = container.methods || [];
this.store[CONTAINER_TABLE][container.id] = container;
return Bluebird.resolve(container);
}
deleteContainer(containerId) {
debug(`#deleteContainer() ${JSON.stringify(arguments)}`);
delete this.store[CONTAINER_TABLE][containerId];
return Bluebird.resolve(containerId);
}
toList(obj) {
debug(`#toList() ${JSON.stringify(arguments)}`);
return Object.keys(obj)
.map(key => obj[key]);
}
}