@neoskop/aviation-client
Advanced tools
Comparing version 0.2.1 to 0.2.2
@@ -7,6 +7,8 @@ import { AviationClient } from "./aviation-client"; | ||
private _meta; | ||
private _cacheTime; | ||
endpoint(endpointUrl: string): AviationClientBuilder; | ||
token(token: string): AviationClientBuilder; | ||
cache(cacheTime: number): AviationClientBuilder; | ||
meta(meta: any): AviationClientBuilder; | ||
mix(): AviationClient; | ||
} |
@@ -11,2 +11,3 @@ "use strict"; | ||
this._meta = {}; | ||
this._cacheTime = 10; | ||
} | ||
@@ -21,2 +22,6 @@ AviationClientBuilder.prototype.endpoint = function (endpointUrl) { | ||
}; | ||
AviationClientBuilder.prototype.cache = function (cacheTime) { | ||
this._cacheTime = cacheTime; | ||
return this; | ||
}; | ||
AviationClientBuilder.prototype.meta = function (meta) { | ||
@@ -27,3 +32,3 @@ this._meta = meta; | ||
AviationClientBuilder.prototype.mix = function () { | ||
return new aviation_client_1.AviationClient(this._endpointUrl, this._token, this._meta); | ||
return new aviation_client_1.AviationClient(this._endpointUrl, this._token, this._cacheTime, this._meta); | ||
}; | ||
@@ -30,0 +35,0 @@ return AviationClientBuilder; |
@@ -7,4 +7,7 @@ import { AviationFeature } from "./model/aviation-feature"; | ||
private _featureMap; | ||
constructor(endpointUrl: string, token: string, meta?: any); | ||
private _cachingTime; | ||
private _featureLoadingTime; | ||
constructor(endpointUrl: string, token: string, cachingTime?: number, meta?: any); | ||
feature(name: string): Promise<AviationFeature>; | ||
private cacheIsStale(); | ||
} |
@@ -43,5 +43,7 @@ "use strict"; | ||
var AviationClient = (function () { | ||
function AviationClient(endpointUrl, token, meta) { | ||
function AviationClient(endpointUrl, token, cachingTime, meta) { | ||
if (cachingTime === void 0) { cachingTime = 10; } | ||
this._endpointUrl = endpointUrl; | ||
this._token = token; | ||
this._cachingTime = cachingTime; | ||
this._meta = meta; | ||
@@ -56,3 +58,3 @@ } | ||
case 0: | ||
if (!(this._featureMap == null)) return [3 /*break*/, 2]; | ||
if (!(this._featureMap == null || this.cacheIsStale())) return [3 /*break*/, 2]; | ||
return [4 /*yield*/, request | ||
@@ -67,2 +69,3 @@ .get(this._endpointUrl + '/features') | ||
this._featureMap = new Map(); | ||
this._featureLoadingTime = new Date().getTime(); | ||
res.body.forEach(function (f) { | ||
@@ -82,2 +85,5 @@ var feature = new aviation_feature_1.AviationFeature(f); | ||
}; | ||
AviationClient.prototype.cacheIsStale = function () { | ||
return this._featureLoadingTime + this._cachingTime < new Date().getTime() * 1000; | ||
}; | ||
return AviationClient; | ||
@@ -84,0 +90,0 @@ }()); |
"use strict"; | ||
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { | ||
return new (P || (P = Promise))(function (resolve, reject) { | ||
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } | ||
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } | ||
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } | ||
step((generator = generator.apply(thisArg, _arguments || [])).next()); | ||
}); | ||
}; | ||
var __generator = (this && this.__generator) || function (thisArg, body) { | ||
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; | ||
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; | ||
function verb(n) { return function (v) { return step([n, v]); }; } | ||
function step(op) { | ||
if (f) throw new TypeError("Generator is already executing."); | ||
while (_) try { | ||
if (f = 1, y && (t = y[op[0] & 2 ? "return" : op[0] ? "throw" : "next"]) && !(t = t.call(y, op[1])).done) return t; | ||
if (y = 0, t) op = [0, t.value]; | ||
switch (op[0]) { | ||
case 0: case 1: t = op; break; | ||
case 4: _.label++; return { value: op[1], done: false }; | ||
case 5: _.label++; y = op[1]; op = [0]; continue; | ||
case 7: op = _.ops.pop(); _.trys.pop(); continue; | ||
default: | ||
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } | ||
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } | ||
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } | ||
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } | ||
if (t[2]) _.ops.pop(); | ||
_.trys.pop(); continue; | ||
} | ||
op = body.call(thisArg, _); | ||
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } | ||
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; | ||
} | ||
}; | ||
var _this = this; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
@@ -6,6 +42,12 @@ var aviation_client_1 = require("../aviation-client"); | ||
var chaiAsPromised = require("chai-as-promised"); | ||
var sinon = require("sinon"); | ||
var mongodb_1 = require("mongodb"); | ||
before(function () { | ||
chai.should(); | ||
chai.use(chaiAsPromised); | ||
_this.clock = sinon.useFakeTimers(); | ||
}); | ||
after(function () { | ||
_this.clock.restore(); | ||
}); | ||
var endpointTestUrl = process.env['ENDPOINT_TEST_URL'] || 'http://localhost:8080'; | ||
@@ -37,3 +79,30 @@ describe('Aviation client', function () { | ||
}); | ||
it('should pickup feature changes after 10 seconds per default', function () { return __awaiter(_this, void 0, void 0, function () { | ||
var sut, db, project; | ||
return __generator(this, function (_a) { | ||
switch (_a.label) { | ||
case 0: | ||
sut = new aviation_client_1.AviationClient(endpointTestUrl, 'sup3rs3cr3t'); | ||
return [4 /*yield*/, sut.feature('test-feature-1').catch(function (err) { return console.log(err); })]; | ||
case 1: | ||
_a.sent(); | ||
return [4 /*yield*/, mongodb_1.MongoClient.connect('mongodb://mongo:27017/aviation')]; | ||
case 2: | ||
db = _a.sent(); | ||
return [4 /*yield*/, db.collection('projects').findOne({ token: 'sup3rs3cr3t' })]; | ||
case 3: | ||
project = _a.sent(); | ||
project.features[0].enabled = false; | ||
return [4 /*yield*/, db.collection('projects').findOneAndUpdate({ token: 'sup3rs3cr3t' }, project)]; | ||
case 4: | ||
_a.sent(); | ||
this.clock.tick(10000); | ||
return [2 /*return*/, sut.feature('test-feature-1').should.eventually.be.fulfilled.and.then(function (f) { | ||
sut.feature('test-feature-1').catch(function (err) { return console.log(err); }); | ||
return f.evaluate().should.be.false; | ||
})]; | ||
} | ||
}); | ||
}); }); | ||
}); | ||
//# sourceMappingURL=aviation-client.spec.js.map |
{ | ||
"name": "@neoskop/aviation-client", | ||
"version": "0.2.1", | ||
"version": "0.2.2", | ||
"main": "dist/index.js", | ||
@@ -27,2 +27,4 @@ "typings": "dist/index.d.ts", | ||
"@types/mocha": "^2.2.41", | ||
"@types/mongodb": "^2.2.7", | ||
"@types/sinon": "^2.3.2", | ||
"chai": "3.x.x", | ||
@@ -33,5 +35,7 @@ "chai-as-promised": "^6.0.0", | ||
"mocha": "^3.4.2", | ||
"mongodb": "^2.2.29", | ||
"node-localstorage": "^1.3.0", | ||
"node-mocks-http": "^1.6.3", | ||
"rimraf": "^2.6.1", | ||
"sinon": "^2.3.6", | ||
"ts-node": "^3.0.6", | ||
@@ -38,0 +42,0 @@ "typescript": "^2.4.1" |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
38633
530
19