Skip to content

Commit

Permalink
feat: support get method (#27)
Browse files Browse the repository at this point in the history
  • Loading branch information
yairans authored Sep 5, 2017
1 parent 01e49f0 commit a33f812
Show file tree
Hide file tree
Showing 12 changed files with 118 additions and 54 deletions.
7 changes: 0 additions & 7 deletions src/k-provider/multi-request-builder.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,13 +19,6 @@ export default class MultiRequestBuilder extends RequestBuilder {
*/
requests: Array<RequestBuilder> = [];

/**
* @constructor
*/
constructor() {
super();
}

/**
* Adds request to requests array
* @function add
Expand Down
6 changes: 4 additions & 2 deletions src/k-provider/ott/services/ott-service.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,12 @@ export default class OttService {
static getMultirequest(ks: string): MultiRequestBuilder {
let ottParams = config.SERVICE_CONFIG_PARAMAS;
Object.assign(ottParams, {ks: ks});
let multiReq = new MultiRequestBuilder();
let headers: Map<string, string> = new Map();
headers.set("Content-Type", "application/json");
let multiReq = new MultiRequestBuilder(headers);
multiReq.method = "POST";
multiReq.service = "multirequest";
multiReq.baseUrl = config.BE_URL;
multiReq.url = multiReq.getUrl(config.BE_URL);
multiReq.params = ottParams;
return multiReq;
}
Expand Down
12 changes: 8 additions & 4 deletions src/k-provider/ovp/services/base-entry-service.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,11 +20,13 @@ export default class BaseEntryService extends OvpService {
* @static
*/
static getPlaybackContext(baseUrl: string, ks: string, entryId: string): RequestBuilder {
let request = new RequestBuilder();
let headers: Map<string, string> = new Map();
headers.set("Content-Type", "application/json");
let request = new RequestBuilder(headers);
request.service = SERVICE_NAME;
request.action = "getPlaybackContext";
request.method = "POST";
request.baseUrl = baseUrl;
request.url = request.getUrl(baseUrl);
request.tag = "baseEntry-getPlaybackContext";
let contextDataParams = {objectType: "KalturaContextDataParams", flavorTags: "all"};
let params = {entryId: entryId, ks: ks, contextDataParams: contextDataParams};
Expand All @@ -42,11 +44,13 @@ export default class BaseEntryService extends OvpService {
* @static
*/
static list(baseUrl: string, ks: string, entryId: string): RequestBuilder {
let request = new RequestBuilder();
let headers: Map<string, string> = new Map();
headers.set("Content-Type", "application/json");
let request = new RequestBuilder(headers);
request.service = SERVICE_NAME;
request.action = "list";
request.method = "POST";
request.baseUrl = baseUrl;
request.url = request.getUrl(baseUrl);
request.tag = "list";
request.params = BaseEntryService.getEntryListReqParams(entryId, ks);
return request;
Expand Down
6 changes: 4 additions & 2 deletions src/k-provider/ovp/services/meta-data-service.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,11 +20,13 @@ export default class MetaDataService extends OvpService {
* @static
*/
static list(baseUrl: string, ks: string, entryId: string) {
let request = new RequestBuilder();
let headers: Map<string, string> = new Map();
headers.set("Content-Type", "application/json");
let request = new RequestBuilder(headers);
request.service = SERVICE_NAME;
request.action = "list";
request.method = "POST";
request.baseUrl = baseUrl;
request.url = request.getUrl(baseUrl);
request.tag = "metadata_metadata-list";
let filter = {objectType: "KalturaMetadataFilter", objectIdEqual: entryId, metadataObjectTypeEqual: "1"};
let params = {filter: filter, ks: ks};
Expand Down
6 changes: 4 additions & 2 deletions src/k-provider/ovp/services/ovp-service.js
Original file line number Diff line number Diff line change
Expand Up @@ -24,10 +24,12 @@ export default class OvpService {
if (partnerId) {
Object.assign(ovpParams, {partnerId: partnerId});
}
let multiReq = new MultiRequestBuilder();
let headers: Map<string, string> = new Map();
headers.set("Content-Type", "application/json");
let multiReq = new MultiRequestBuilder(headers);
multiReq.method = "POST";
multiReq.service = SERVICE_NAME;
multiReq.baseUrl = config.beUrl;
multiReq.url = multiReq.getUrl(config.beUrl);
multiReq.params = ovpParams;
return multiReq;
}
Expand Down
6 changes: 4 additions & 2 deletions src/k-provider/ovp/services/session-service.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,13 @@ export default class SessionService extends OvpService {
* @static
*/
static anonymousSession(baseUrl: string, partnerId: number) {
let request = new RequestBuilder();
let headers: Map<string, string> = new Map();
headers.set("Content-Type", "application/json");
let request = new RequestBuilder(headers);
request.service = SERVICE_NAME;
request.action = "startWidgetSession";
request.method = "POST";
request.baseUrl = baseUrl;
request.url = request.getUrl(baseUrl);
request.tag = "session-startWidget";
request.params = {widgetId: "_" + partnerId};
return request;
Expand Down
11 changes: 6 additions & 5 deletions src/k-provider/ovp/services/stats-service.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
import OvpService from './ovp-service'
import RequestBuilder from '../../request-builder'
import Configuration from '../config'
import {param} from '../../../util/param'

const SERVICE_NAME: string = "stats";
/**
Expand All @@ -15,21 +16,21 @@ export default class StatsService extends OvpService {
* @function collect
* @param {string} ks - The ks
* @param {Object} event - The event data
* @param {string} [baseUrl=Configuration.beUrl] - The service base URL
* @param {string} baseUrl - The service base URL
* @returns {RequestBuilder} - The request builder
* @static
*/
static collect(ks: string, event: Object, baseUrl: ?string): RequestBuilder {
static collect(ks: string, event: Object, baseUrl: string): RequestBuilder {
let ovpParams = Configuration.get();
let serviceParams = {};
Object.assign(serviceParams, ovpParams.serviceParams, {ks: ks}, event);
let request = new RequestBuilder();
request.service = SERVICE_NAME;
request.action = "collect";
request.method = "POST";
request.baseUrl = baseUrl || ovpParams.beUrl;
request.method = "GET";
request.tag = "stats-collect";
request.params = JSON.stringify(serviceParams);
request.params = serviceParams;
request.url = baseUrl + '?service=' + request.service + '&action=' + request.action + '&' + param(request.params);
return request;
}
}
Expand Down
6 changes: 4 additions & 2 deletions src/k-provider/ovp/services/ui-conf-service.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,11 +20,13 @@ export default class UiConfService extends OvpService {
* @static
*/
static get(baseUrl: string, ks: string, uiConfID: number) {
let request = new RequestBuilder();
let headers: Map<string, string> = new Map();
headers.set("Content-Type", "application/json");
let request = new RequestBuilder(headers);
request.service = SERVICE_NAME;
request.action = "get";
request.method = "POST";
request.baseUrl = baseUrl;
request.url = request.getUrl(baseUrl);
request.tag = "uiconf-get";
let responseProfileParams = {
fields: "config",
Expand Down
21 changes: 10 additions & 11 deletions src/k-provider/request-builder.js
Original file line number Diff line number Diff line change
Expand Up @@ -27,10 +27,10 @@ export default class RequestBuilder {
*/
headers: Map<string, string>;
/**
* @member - Service base url
* @type {Map<string, string>}
* @member - Service URL
* @type {string}
*/
baseUrl: string;
url: string;
/**
* @member - Service method (POST,GET,DELETE etc..)
* @type {string}
Expand All @@ -48,20 +48,16 @@ export default class RequestBuilder {
*/
constructor(headers: Map<string, string> = new Map()) {
this.headers = headers;
this.headers.set("Content-Type", "application/json");
}

/**
* Builds restful service URL
* @function getUrl
* @param {string} baseUrl - The service base URL
* @returns {string} The service URL
*/
getUrl(): string {
if (!this.baseUrl) {
throw new Error("baseUrl is mandatory for request builder");
}
let url = this.baseUrl + '/service/' + this.service + (this.action ? '/action/' + this.action : '');
return url;
getUrl(baseUrl: string): string {
return baseUrl + '/service/' + this.service + (this.action ? '/action/' + this.action : '');
}

/**
Expand All @@ -70,6 +66,9 @@ export default class RequestBuilder {
* @returns {Promise.<any>} Service response as promise
*/
doHttpRequest(): Promise<any> {
if (!this.url) {
throw new Error("baseUrl is mandatory for request builder");
}
let request = new XMLHttpRequest();
return new Promise((resolve, reject) => {
request.onreadystatechange = function () {
Expand All @@ -85,7 +84,7 @@ export default class RequestBuilder {
}
}
};
request.open(this.method, this.getUrl());
request.open(this.method, this.url);
this.headers.forEach((value, key) => {
request.setRequestHeader(key, value);
});
Expand Down
43 changes: 43 additions & 0 deletions src/util/param.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
let param = (a) => {
let s = [], rbracket = /\[\]$/,
isArray = function (obj) {
return Object.prototype.toString.call(obj) === '[object Array]';
}, add = function (k, v) {
v = typeof v === 'function' ? v() : v === null ? '' : v === undefined ? '' : v;
s[s.length] = encodeURIComponent(k) + '=' + encodeURIComponent(v);
}, buildParams = function (prefix, obj) {
let i, len, key;

if (prefix) {
if (isArray(obj)) {
for (i = 0, len = obj.length; i < len; i++) {
if (rbracket.test(prefix)) {
add(prefix, obj[i]);
} else {
buildParams(prefix + ':' + (typeof obj[i] === 'object' ? i : ''), obj[i]);
}
}
} else if (obj && String(obj) === '[object Object]') {
for (key in obj) {
buildParams(prefix + ':' + key, obj[key]);
}
} else {
add(prefix, obj);
}
} else if (isArray(obj)) {
for (i = 0, len = obj.length; i < len; i++) {
add(obj[i].name, obj[i].value);
}
} else {
for (key in obj) {
buildParams(key, obj[key]);
}
}
return s;
};

return buildParams('', a).join('&').replace(/%20/g, '+');
};

export {param}

24 changes: 7 additions & 17 deletions test/src/k-provider/ovp/services/stats-service.spec.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import StatsService from '../../../../../src/k-provider/ovp/services/stats-service'
import RequestBuilder from '../../../../../src/k-provider/request-builder'
import Configuration from '../../../../../src/k-provider/ovp/config'
import {param} from '../../../../../src/util/param'

describe('stats service - collect', function () {
let ovpParams, ks, event;
Expand All @@ -11,26 +12,15 @@ describe('stats service - collect', function () {
event = {a:1};
});

it('should be default baseUrl', function () {
let request = StatsService.collect(ks, event);
it('should be proper values', function () {
let baseUrl = 'some url';
let request = StatsService.collect(ks, event, baseUrl);
(request instanceof RequestBuilder).should.be.true;
request.service.should.be.equal('stats');
request.action.should.be.equal('collect');
request.method.should.be.equal('POST');
request.baseUrl.should.be.equal(ovpParams.beUrl);
request.method.should.be.equal('GET');
request.url.should.be.equal(baseUrl + '?service=' + request.service + '&action=' + request.action + '&' + param(request.params));
request.tag.should.be.equal('stats-collect');
request.params.should.be.equal(JSON.stringify(Object.assign({}, ovpParams.serviceParams, {ks: ks}, event)));
});

it('should be take baseUrl from argument', function () {
let beUrl = 'some url';
let request = StatsService.collect(ks, event, beUrl);
(request instanceof RequestBuilder).should.be.true;
request.service.should.be.equal('stats');
request.action.should.be.equal('collect');
request.method.should.be.equal('POST');
request.baseUrl.should.be.equal(beUrl);
request.tag.should.be.equal('stats-collect');
request.params.should.be.equal(JSON.stringify(Object.assign({}, ovpParams.serviceParams, {ks: ks}, event)));
request.params.should.deep.equal(Object.assign({}, ovpParams.serviceParams, {ks: ks}, event));
});
});
24 changes: 24 additions & 0 deletions test/src/util/util.spec.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
import {param} from '../../../src/util/param'

describe('param method', function () {

it('should parse object to query params', function () {
let obj = {
a: 'literal',
obj: {
b: 'canon-literal',
canon_array: [1, 2]
},
array: ['c', 3, {d: 4}]
};
let query_params_str = param(obj);
let query_params_arr = decodeURIComponent(query_params_str).split('&');
query_params_arr[0].should.equal('a=literal');
query_params_arr[1].should.equal('obj:b=canon-literal');
query_params_arr[2].should.equal('obj:canon_array:=1');
query_params_arr[3].should.equal('obj:canon_array:=2');
query_params_arr[4].should.equal('array:=c');
query_params_arr[5].should.equal('array:=3');
query_params_arr[6].should.equal('array:2:d=4');
});
});

0 comments on commit a33f812

Please sign in to comment.