Project start
Signed-off-by: Fabio José <fabiojose@gmail.com>
This commit is contained in:
parent
28b81eb79a
commit
268233fce7
|
@ -0,0 +1,77 @@
|
|||
# Logs
|
||||
logs
|
||||
*.log
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
|
||||
# Runtime data
|
||||
pids
|
||||
*.pid
|
||||
*.seed
|
||||
*.pid.lock
|
||||
|
||||
# Directory for instrumented libs generated by jscoverage/JSCover
|
||||
lib-cov
|
||||
|
||||
# Coverage directory used by tools like istanbul
|
||||
coverage
|
||||
|
||||
# nyc test coverage
|
||||
.nyc_output
|
||||
|
||||
# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
|
||||
.grunt
|
||||
|
||||
# Bower dependency directory (https://bower.io/)
|
||||
bower_components
|
||||
|
||||
# node-waf configuration
|
||||
.lock-wscript
|
||||
|
||||
# Compiled binary addons (https://nodejs.org/api/addons.html)
|
||||
build/Release
|
||||
|
||||
# Dependency directories
|
||||
node_modules/
|
||||
jspm_packages/
|
||||
|
||||
# TypeScript v1 declaration files
|
||||
typings/
|
||||
|
||||
# Optional npm cache directory
|
||||
.npm
|
||||
|
||||
# Optional eslint cache
|
||||
.eslintcache
|
||||
|
||||
# Optional REPL history
|
||||
.node_repl_history
|
||||
|
||||
# Output of 'npm pack'
|
||||
*.tgz
|
||||
|
||||
# Yarn Integrity file
|
||||
.yarn-integrity
|
||||
|
||||
# dotenv environment variables file
|
||||
.env
|
||||
|
||||
# parcel-bundler cache (https://parceljs.org/)
|
||||
.cache
|
||||
|
||||
# next.js build output
|
||||
.next
|
||||
|
||||
# nuxt.js build output
|
||||
.nuxt
|
||||
|
||||
# vuepress build output
|
||||
.vuepress/dist
|
||||
|
||||
# Serverless directories
|
||||
.serverless
|
||||
|
||||
# FuseBox cache
|
||||
.fusebox/
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
var Cloudevent = require('./lib/cloudevent.js');
|
||||
//var Spec_0_1 = require('./lib/spec_0_1.js');
|
||||
//var Spec_0_2 = require('./lib/spec_0_2.js');
|
||||
|
||||
module.exports = Cloudevent;
|
||||
//module.exports.Spec_0_1 = Spec_0_1;
|
||||
//module.exports.Spec_0_2 = Spec_0_2;
|
||||
|
|
@ -0,0 +1,57 @@
|
|||
var Spec_0_1 = require('./specs/spec_0_1.js');
|
||||
var Spec_0_2 = require('./specs/spec_0_2.js');
|
||||
var JSONFormatter_0_1 = require('./formats/json_0_1.js');
|
||||
|
||||
/*
|
||||
* Class created using the Builder Design Pattern.
|
||||
*
|
||||
* https://en.wikipedia.org/wiki/Builder_pattern
|
||||
*/
|
||||
function Cloudevent(_spec, _formatter){
|
||||
this.spec = (_spec) ? new _spec(Cloudevent) : new Spec_0_1(Cloudevent);
|
||||
this.formatter = (_formatter) ? _formatter : new JSONFormatter_0_1();
|
||||
}
|
||||
|
||||
/*
|
||||
* To format the payload using the formatter
|
||||
*/
|
||||
Cloudevent.prototype.format = function(){
|
||||
// Check the constraints
|
||||
this.spec.check();
|
||||
|
||||
// Then, format
|
||||
return this.formatter.format(this.spec.payload);
|
||||
}
|
||||
|
||||
Cloudevent.prototype.toString = function(){
|
||||
return this.formatter.toString(this.spec.payload);
|
||||
}
|
||||
|
||||
Cloudevent.prototype.type = function(type){
|
||||
this.spec.type(type);
|
||||
return this;
|
||||
}
|
||||
|
||||
Cloudevent.prototype.source = function(_source){
|
||||
this.spec.source(_source);
|
||||
return this;
|
||||
}
|
||||
|
||||
/*
|
||||
* Export the specs
|
||||
*/
|
||||
Cloudevent.specs = {
|
||||
'0.1': Spec_0_1,
|
||||
'0.2': Spec_0_2
|
||||
};
|
||||
|
||||
/*
|
||||
* Export the formats
|
||||
*/
|
||||
Cloudevent.formats = {
|
||||
'json' : JSONFormatter_0_1,
|
||||
'json0.1': JSONFormatter_0_1
|
||||
};
|
||||
|
||||
module.exports = Cloudevent;
|
||||
|
|
@ -0,0 +1,14 @@
|
|||
|
||||
function JSONFormatter(){
|
||||
|
||||
}
|
||||
|
||||
JSONFormatter.prototype.format = function(payload){
|
||||
return payload;
|
||||
}
|
||||
|
||||
JSONFormatter.prototype.toString = function(payload){
|
||||
return JSON.stringify(payload);
|
||||
}
|
||||
|
||||
module.exports = JSONFormatter;
|
|
@ -0,0 +1,52 @@
|
|||
var uuid = require('uuid/v4');
|
||||
|
||||
function Spec_0_1(_caller){
|
||||
this.payload = {
|
||||
cloudEventsVersion: '0.1',
|
||||
eventID: uuid()
|
||||
};
|
||||
|
||||
/*
|
||||
* Used to inject backward compatibility functions or attributes.
|
||||
*/
|
||||
this.caller = _caller;
|
||||
|
||||
/*
|
||||
* Inject the method to set the version related to data attribute.
|
||||
*/
|
||||
this.caller.prototype.eventTypeVersion = function(_version){
|
||||
this.spec.eventTypeVersion(_version);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Check the constraints.
|
||||
*
|
||||
* throw an error if do not pass.
|
||||
*/
|
||||
Spec_0_1.prototype.check = function() {
|
||||
|
||||
}
|
||||
|
||||
Spec_0_1.prototype.type = function(_type){
|
||||
this.payload['eventType'] = _type;
|
||||
return this;
|
||||
}
|
||||
|
||||
Spec_0_1.prototype.eventTypeVersion = function(version){
|
||||
this.payload['eventTypeVersion'] = version;
|
||||
return this;
|
||||
}
|
||||
|
||||
Spec_0_1.prototype.source = function(_source){
|
||||
this.payload['source'] = _source;
|
||||
return this;
|
||||
}
|
||||
|
||||
Spec_0_1.prototype.id = function(_id){
|
||||
this.payload['eventID'] = _id;
|
||||
return this;
|
||||
}
|
||||
|
||||
module.exports = Spec_0_1;
|
||||
|
|
@ -0,0 +1,33 @@
|
|||
var uuid = require('uuid/v4');
|
||||
|
||||
function Spec_0_2(){
|
||||
this.payload = {
|
||||
specversion: '0.2',
|
||||
id: uuid()
|
||||
};
|
||||
}
|
||||
|
||||
/*
|
||||
* Check the spec constraints.
|
||||
*/
|
||||
Spec_0_2.prototype.check = function(){
|
||||
|
||||
}
|
||||
|
||||
Spec_0_2.prototype.type = function(_type){
|
||||
this.payload['type'] = _type;
|
||||
return this;
|
||||
}
|
||||
|
||||
Spec_0_2.prototype.source = function(_source){
|
||||
this.payload['source'] = _source;
|
||||
return this;
|
||||
}
|
||||
|
||||
Spec_0_2.prototype.id = function(_id){
|
||||
this.payload['id'] = _id;
|
||||
return this;
|
||||
}
|
||||
|
||||
module.exports = Spec_0_2;
|
||||
|
|
@ -0,0 +1,36 @@
|
|||
{
|
||||
"name": "cloudevents",
|
||||
"version": "0.0.1",
|
||||
"description": "CloudEvents SDK for JavaScript",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
"test": "./node_modules/.bin/mocha -C test/*.js"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git+https://github.com/cloudevents/sdk-javascript.git"
|
||||
},
|
||||
"keywords": [
|
||||
"events",
|
||||
"cloudevents",
|
||||
"sdk"
|
||||
],
|
||||
"author": "cloudevents.io",
|
||||
"contributors": {
|
||||
"name": "Fábio José de Moraes",
|
||||
"email": "fabiojose@gmail.com",
|
||||
"url": "https://github.com/fabiojose"
|
||||
},
|
||||
"license": "Apache-2.0",
|
||||
"bugs": {
|
||||
"url": "https://github.com/cloudevents/sdk-javascript/issues"
|
||||
},
|
||||
"homepage": "https://github.com/cloudevents/sdk-javascript#readme",
|
||||
"dependencies": {
|
||||
"uuid": "3.3.2"
|
||||
},
|
||||
"devDependencies": {
|
||||
"chai": "4.2.0",
|
||||
"mocha": "5.2.0"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,39 @@
|
|||
var expect = require("chai").expect;
|
||||
var Cloudevent = require("../index.js");
|
||||
|
||||
var cloudevent = new Cloudevent()
|
||||
.type("com.github.pull.create")
|
||||
.source("urn:event:from:myapi/resourse/123");
|
||||
|
||||
describe("CloudEvents Spec 0.1 - JavaScript SDK", () => {
|
||||
|
||||
describe("JSON Format", () => {
|
||||
|
||||
describe("Required context attributes", () => {
|
||||
it("requires 'eventType'", () => {
|
||||
expect(cloudevent.format()).to.have.property('eventType');
|
||||
});
|
||||
|
||||
it("requires 'cloudEventsVersion'", () => {
|
||||
expect(cloudevent.format()).to.have.property('cloudEventsVersion');
|
||||
});
|
||||
|
||||
it("requires 'source'", () => {
|
||||
expect(cloudevent.format()).to.have.property('source');
|
||||
});
|
||||
|
||||
it("requires 'eventID'", () => {
|
||||
expect(cloudevent.format()).to.have.property('eventID');
|
||||
});
|
||||
});
|
||||
|
||||
describe("Backward compatibility", () => {
|
||||
it("should have 'eventTypeVersion'", () => {
|
||||
cloudevent.eventTypeVersion("1.0");
|
||||
expect(cloudevent.format()).to.have.property('eventTypeVersion');
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
});
|
|
@ -0,0 +1,32 @@
|
|||
var expect = require("chai").expect;
|
||||
var Cloudevent = require("../index.js");
|
||||
|
||||
var cloudevent = new Cloudevent(Cloudevent.specs['0.2'])
|
||||
.type("com.github.pull.create")
|
||||
.source("urn:event:from:myapi/resourse/123");
|
||||
|
||||
describe("CloudEvents Spec 0.2 - JavaScript SDK", () => {
|
||||
|
||||
describe("JSON Format", () => {
|
||||
|
||||
describe("Required context attributes", () => {
|
||||
it("requires 'type'", () => {
|
||||
expect(cloudevent.format()).to.have.property('type');
|
||||
});
|
||||
|
||||
it("requires 'specversion'", () => {
|
||||
expect(cloudevent.format()).to.have.property('specversion');
|
||||
});
|
||||
|
||||
it("requires 'source'", () => {
|
||||
expect(cloudevent.format()).to.have.property('source');
|
||||
});
|
||||
|
||||
it("requires 'id'", () => {
|
||||
expect(cloudevent.format()).to.have.property('id');
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
});
|
Loading…
Reference in New Issue