Skip to content

Commit 8b67d36

Browse files
authored
lib: make setterByAttribute a Map (#154)
This commit changes the setterByAttribute to be a map and tries to reduce some code duplication and improve readability. Signed-off-by: Daniel Bevenius <[email protected]>
1 parent e43e660 commit 8b67d36

File tree

3 files changed

+81
-102
lines changed

3 files changed

+81
-102
lines changed

lib/bindings/http/receiver_structured.js

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,11 @@ function validateArgs(payload, attributes) {
2323

2424
function StructuredHTTPReceiver(
2525
parserByMime,
26-
setterByAttribute,
26+
parserMap,
2727
allowedContentTypes,
2828
Spec) {
2929
this.parserByMime = parserByMime;
30-
this.setterByAttribute = setterByAttribute;
30+
this.parserMap = parserMap;
3131
this.allowedContentTypes = allowedContentTypes;
3232
this.Spec = Spec;
3333
this.spec = new Spec();
@@ -63,18 +63,15 @@ StructuredHTTPReceiver.prototype.parse = function(payload, headers) {
6363
const processedAttributes = [];
6464
const cloudevent = new CloudEvent(this.Spec);
6565

66-
Array.from(Object.keys(this.setterByAttribute))
67-
.filter((attribute) => event[attribute])
68-
.forEach((attribute) => {
69-
const setterName = this.setterByAttribute[attribute].name;
70-
const parserFun = this.setterByAttribute[attribute].parser;
71-
66+
this.parserMap.forEach((value, key) => {
67+
if (event[key]) {
7268
// invoke the setter function
73-
cloudevent[setterName](parserFun(event[attribute]));
69+
cloudevent[value.name](value.parser(event[key]));
7470

7571
// to use ahead, for extensions processing
76-
processedAttributes.push(attribute);
77-
});
72+
processedAttributes.push(key);
73+
}
74+
});
7875

7976
// Every unprocessed attribute should be an extension
8077
Array.from(Object.keys(event))

lib/bindings/http/receiver_structured_0_3.js

Lines changed: 36 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,19 @@
1+
const {
2+
MIME_JSON,
3+
MIME_CE_JSON,
4+
STRUCTURED_ATTRS_03 : {
5+
TYPE,
6+
SPEC_VERSION,
7+
SOURCE,
8+
ID,
9+
TIME,
10+
SCHEMA_URL,
11+
CONTENT_ENCODING,
12+
CONTENT_TYPE,
13+
SUBJECT,
14+
DATA
15+
}
16+
} = require("./constants.js");
117
const Constants = require("./constants.js");
218
const Spec = require("../../specs/spec_0_3.js");
319
const JSONParser = require("../../formats/json/parser.js");
@@ -7,60 +23,35 @@ const StructuredHTTPReceiver = require("./receiver_structured.js");
723
const jsonParserSpec = new JSONParser();
824

925
const parserByMime = {};
10-
parserByMime[Constants.MIME_JSON] = jsonParserSpec;
11-
parserByMime[Constants.MIME_CE_JSON] = jsonParserSpec;
26+
parserByMime[MIME_JSON] = jsonParserSpec;
27+
parserByMime[MIME_CE_JSON] = jsonParserSpec;
1228

1329
const allowedContentTypes = [];
14-
allowedContentTypes.push(Constants.MIME_CE_JSON);
30+
allowedContentTypes.push(MIME_CE_JSON);
1531

16-
const setterByAttribute = {};
17-
setterByAttribute[Constants.STRUCTURED_ATTRS_03.TYPE] = {
18-
name: "type",
19-
parser: (v) => v
20-
};
21-
setterByAttribute[Constants.STRUCTURED_ATTRS_03.SPEC_VERSION] = {
22-
name: "specversion",
23-
parser: (v) => v
24-
};
25-
setterByAttribute[Constants.STRUCTURED_ATTRS_03.SOURCE] = {
26-
name: "source",
27-
parser: (v) => v
28-
};
29-
setterByAttribute[Constants.STRUCTURED_ATTRS_03.ID] = {
30-
name: "id",
31-
parser: (v) => v
32-
};
33-
setterByAttribute[Constants.STRUCTURED_ATTRS_03.TIME] = {
34-
name: "time",
35-
parser: (v) => new Date(Date.parse(v))
36-
};
37-
setterByAttribute[Constants.STRUCTURED_ATTRS_03.SCHEMA_URL] = {
38-
name: "schemaurl",
39-
parser: (v) => v
40-
};
41-
setterByAttribute[Constants.STRUCTURED_ATTRS_03.CONTENT_ENCONDING] = {
42-
name: "dataContentEncoding",
43-
parser: (v) => v
44-
};
45-
setterByAttribute[Constants.STRUCTURED_ATTRS_03.CONTENT_TYPE] = {
46-
name: "dataContentType",
47-
parser: (v) => v
48-
};
49-
setterByAttribute[Constants.STRUCTURED_ATTRS_03.SUBJECT] = {
50-
name: "subject",
51-
parser: (v) => v
52-
};
53-
setterByAttribute[Constants.STRUCTURED_ATTRS_03.DATA] = {
54-
name: "data",
55-
parser: (v) => v
56-
};
32+
function parser(name, parser = (v) => v) {
33+
return { name: name, parser: parser};
34+
}
35+
const passThroughParser = parser;
36+
37+
const parserMap = new Map();
38+
parserMap.set(TYPE, passThroughParser("type"));
39+
parserMap.set(SPEC_VERSION, passThroughParser("specversion"));
40+
parserMap.set(SOURCE, passThroughParser("source"));
41+
parserMap.set(ID, passThroughParser("id"));
42+
parserMap.set(TIME, parser("time", (v) => new Date(Date.parse(v))));
43+
parserMap.set(SCHEMA_URL, passThroughParser("schemaurl"));
44+
parserMap.set(CONTENT_ENCODING, passThroughParser("dataContentEncoding"));
45+
parserMap.set(CONTENT_TYPE, passThroughParser("dataContentType"));
46+
parserMap.set(SUBJECT, passThroughParser("subject"));
47+
parserMap.set(DATA, passThroughParser("data"));
5748

5849
// Leaving this in place for now. TODO: fixme
5950
// eslint-disable-next-line
6051
function Receiver(configuration) {
6152
this.receiver = new StructuredHTTPReceiver(
6253
parserByMime,
63-
setterByAttribute,
54+
parserMap,
6455
allowedContentTypes,
6556
Spec
6657
);

lib/bindings/http/receiver_structured_1.js

Lines changed: 37 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,20 @@
1-
const Constants = require("./constants.js");
1+
const {
2+
MIME_JSON,
3+
MIME_CE_JSON,
4+
STRUCTURED_ATTRS_1 : {
5+
TYPE,
6+
SPEC_VERSION,
7+
SOURCE,
8+
ID,
9+
TIME,
10+
DATA_SCHEMA,
11+
CONTENT_TYPE,
12+
SUBJECT,
13+
DATA,
14+
DATA_BASE64
15+
}
16+
} = require("./constants.js");
17+
218
const Spec = require("../../specs/spec_1.js");
319
const JSONParser = require("../../formats/json/parser.js");
420

@@ -7,60 +23,35 @@ const StructuredHTTPReceiver = require("./receiver_structured.js");
723
const jsonParserSpec = new JSONParser();
824

925
const parserByMime = {};
10-
parserByMime[Constants.MIME_JSON] = jsonParserSpec;
11-
parserByMime[Constants.MIME_CE_JSON] = jsonParserSpec;
26+
parserByMime[MIME_JSON] = jsonParserSpec;
27+
parserByMime[MIME_CE_JSON] = jsonParserSpec;
1228

1329
const allowedContentTypes = [];
14-
allowedContentTypes.push(Constants.MIME_CE_JSON);
30+
allowedContentTypes.push(MIME_CE_JSON);
1531

16-
const setterByAttribute = {};
17-
setterByAttribute[Constants.STRUCTURED_ATTRS_1.TYPE] = {
18-
name: "type",
19-
parser: (v) => v
20-
};
21-
setterByAttribute[Constants.STRUCTURED_ATTRS_1.SPEC_VERSION] = {
22-
name: "specversion",
23-
parser: (v) => v
24-
};
25-
setterByAttribute[Constants.STRUCTURED_ATTRS_1.SOURCE] = {
26-
name: "source",
27-
parser: (v) => v
28-
};
29-
setterByAttribute[Constants.STRUCTURED_ATTRS_1.ID] = {
30-
name: "id",
31-
parser: (v) => v
32-
};
33-
setterByAttribute[Constants.STRUCTURED_ATTRS_1.TIME] = {
34-
name: "time",
35-
parser: (v) => new Date(Date.parse(v))
36-
};
37-
setterByAttribute[Constants.STRUCTURED_ATTRS_1.DATA_SCHEMA] = {
38-
name: "dataschema",
39-
parser: (v) => v
40-
};
41-
setterByAttribute[Constants.STRUCTURED_ATTRS_1.CONTENT_TYPE] = {
42-
name: "dataContentType",
43-
parser: (v) => v
44-
};
45-
setterByAttribute[Constants.STRUCTURED_ATTRS_1.SUBJECT] = {
46-
name: "subject",
47-
parser: (v) => v
48-
};
49-
setterByAttribute[Constants.STRUCTURED_ATTRS_1.DATA] = {
50-
name: "data",
51-
parser: (v) => v
52-
};
53-
setterByAttribute[Constants.STRUCTURED_ATTRS_1.DATA_BASE64] = {
54-
name: "data",
55-
parser: (v) => v
56-
};
32+
function parser(name, parser = (v) => v) {
33+
return { name: name, parser: parser};
34+
}
35+
const passThroughParser = parser;
36+
37+
const parserMap = new Map();
38+
parserMap.set(TYPE, passThroughParser("type"));
39+
parserMap.set(SPEC_VERSION, passThroughParser("specversion"));
40+
parserMap.set(SOURCE, passThroughParser("source"));
41+
parserMap.set(ID, passThroughParser("id"));
42+
parserMap.set(TIME, parser("time", (v) => new Date(Date.parse(v))));
43+
parserMap.set(DATA_SCHEMA, passThroughParser("dataschema"));
44+
parserMap.set(CONTENT_TYPE, passThroughParser("dataContentType"))
45+
parserMap.set(SUBJECT, passThroughParser("subject"));
46+
parserMap.set(DATA, passThroughParser("data"));
47+
parserMap.set(DATA_BASE64, passThroughParser("data"));
5748

5849
// Leaving this in place for now. TODO: fixme
5950
// eslint-disable-next-line
6051
function Receiver(configuration) {
6152
this.receiver = new StructuredHTTPReceiver(
6253
parserByMime,
63-
setterByAttribute,
54+
parserMap,
6455
allowedContentTypes,
6556
Spec
6657
);

0 commit comments

Comments
 (0)