From f355a3ccbaf1698ef222d27d91a86de10147b512 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabio=20Jos=C3=A9?= Date: Mon, 29 Jul 2019 14:14:55 -0300 Subject: [PATCH] A generic binary http emitter for reusable purposes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fabio José --- lib/bindings/http/emitter_binary.js | 55 +++++++++++++++++++++++++ lib/bindings/http/emitter_binary_0_2.js | 47 ++++----------------- 2 files changed, 63 insertions(+), 39 deletions(-) create mode 100644 lib/bindings/http/emitter_binary.js diff --git a/lib/bindings/http/emitter_binary.js b/lib/bindings/http/emitter_binary.js new file mode 100644 index 0000000..290f11d --- /dev/null +++ b/lib/bindings/http/emitter_binary.js @@ -0,0 +1,55 @@ +var axios = require("axios"); +var empty = require("is-empty"); + +const Constants = require("./constants.js"); + +function BinaryHTTPEmitter(config, headerByGetter, extensionPrefix){ + this.config = JSON.parse(JSON.stringify(config)); + this.headerByGetter = headerByGetter; + this.extensionPrefix = extensionPrefix; + + this.config[Constants.HEADERS] = + (!this.config[Constants.HEADERS] + ? {} + : this.config[Constants.HEADERS]); + + // default is json + if(!this.config[Constants.HEADERS][Constants.HEADER_CONTENT_TYPE]){ + this.config[Constants.HEADERS][Constants.HEADER_CONTENT_TYPE] = + Constants.DEFAULT_CONTENT_TYPE; + } +} + +BinaryHTTPEmitter.prototype.emit = function(cloudevent) { + // Create new request object + var _config = JSON.parse(JSON.stringify(this.config)); + + // Always set stuff in _config + var _headers = _config[Constants.HEADERS]; + + Object.keys(this.headerByGetter) + .filter((getter) => cloudevent[getter]()) + .forEach((getter) => { + let header = this.headerByGetter[getter]; + _headers[header.name] = + header.parser( + cloudevent[getter]() + ); + }); + + // Set the cloudevent payload + _config[Constants.DATA_ATTRIBUTE] = cloudevent.format().data; + + // Have extensions? + var exts = cloudevent.getExtensions(); + Object.keys(exts) + .filter((ext) => Object.hasOwnProperty.call(exts, ext)) + .forEach((ext) => { + _headers[this.extensionPrefix + ext] = exts[ext]; + }); + + // Return the Promise + return axios.request(_config); +}; + +module.exports = BinaryHTTPEmitter; diff --git a/lib/bindings/http/emitter_binary_0_2.js b/lib/bindings/http/emitter_binary_0_2.js index a63e2e8..4e33d44 100644 --- a/lib/bindings/http/emitter_binary_0_2.js +++ b/lib/bindings/http/emitter_binary_0_2.js @@ -1,6 +1,8 @@ var axios = require("axios"); var empty = require("is-empty"); +const BinaryHTTPEmitter = require("./emitter_binary.js"); + const Constants = require("./constants.js"); const headerByGetter = {}; @@ -41,48 +43,15 @@ headerByGetter["getSchemaurl"] = { }; function HTTPBinary02(configuration){ - this.config = JSON.parse(JSON.stringify(configuration)); - - if(!this.config["headers"]){ - this.config["headers"] = {}; - } - - this.config["headers"] - [Constants.HEADER_CONTENT_TYPE] = - Constants.MIME_JSON + "; charset=" + Constants.CHARSET_DEFAULT; + this.emitter = new BinaryHTTPEmitter( + configuration, + headerByGetter, + Constants.BINARY_HEADERS_02.EXTENSIONS_PREFIX + ); } HTTPBinary02.prototype.emit = function(cloudevent){ - - // Create new request object - var _config = JSON.parse(JSON.stringify(this.config)); - - // Always set stuff in _config - var _headers = _config["headers"]; - - Object.keys(headerByGetter) - .filter((getter) => cloudevent[getter]()) - .forEach((getter) => { - let header = headerByGetter[getter]; - _headers[header.name] = - header.parser( - cloudevent[getter]() - ); - }); - - // Set the cloudevent payload - _config["data"] = cloudevent.format().data; - - // Have extensions? - var exts = cloudevent.getExtensions(); - Object.keys(exts) - .filter((ext) => Object.hasOwnProperty.call(exts, ext)) - .forEach((ext) => { - _headers[Constants.BINARY_HEADERS_02.EXTENSIONS_PREFIX + ext] = exts[ext]; - }); - - // Return the Promise - return axios.request(_config); + return this.emitter.emit(cloudevent); }; module.exports = {