From 46c954a431294fb87cbd791368d0d701a9446eba Mon Sep 17 00:00:00 2001 From: Aniko Litvanyi Date: Fri, 10 Feb 2017 16:56:51 +0100 Subject: [PATCH 1/2] feat(AjaxObservable) : support 'PATCH' request type Add support of the 'PATCH' request type based on the already existing 'PUT' request. --- src/observable/dom/AjaxObservable.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/observable/dom/AjaxObservable.ts b/src/observable/dom/AjaxObservable.ts index b5e2e0365b..a8178461a4 100644 --- a/src/observable/dom/AjaxObservable.ts +++ b/src/observable/dom/AjaxObservable.ts @@ -66,6 +66,7 @@ export interface AjaxCreationMethod { get(url: string, headers?: Object): Observable; post(url: string, body?: any, headers?: Object): Observable; put(url: string, body?: any, headers?: Object): Observable; + patch(url: string, body?: any, headers?: Object): Observable; delete(url: string, headers?: Object): Observable; getJSON(url: string, headers?: Object): Observable; } @@ -86,6 +87,10 @@ export function ajaxPut(url: string, body?: any, headers?: Object): Observable({ method: 'PUT', url, body, headers }); }; +export function ajaxPatch(url: string, body?: any, headers?: Object): Observable { + return new AjaxObservable({ method: 'PATCH', url, body, headers }); +}; + export function ajaxGetJSON(url: string, headers?: Object): Observable { return new AjaxObservable({ method: 'GET', url, responseType: 'json', headers }) .lift(new MapOperator((x: AjaxResponse, index: number): T => x.response, null)); @@ -132,6 +137,7 @@ export class AjaxObservable extends Observable { create.post = ajaxPost; create.delete = ajaxDelete; create.put = ajaxPut; + create.patch = ajaxPatch; create.getJSON = ajaxGetJSON; return create; From 182151984d6654d237fae4ef989419c36dce65b2 Mon Sep 17 00:00:00 2001 From: Jay Phelps Date: Mon, 13 Feb 2017 15:41:36 -0800 Subject: [PATCH 2/2] chore(ajax.patch): Adds test for ajax.patch --- spec/observables/dom/ajax-spec.ts | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/spec/observables/dom/ajax-spec.ts b/spec/observables/dom/ajax-spec.ts index 8ef9b8e668..854380f2bc 100644 --- a/spec/observables/dom/ajax-spec.ts +++ b/spec/observables/dom/ajax-spec.ts @@ -853,6 +853,21 @@ describe('Observable.ajax', () => { delete root.XMLHttpRequest.prototype.onerror; delete root.XMLHttpRequest.prototype.upload; }); + + describe('ajax.patch', () => { + it('should create an AjaxObservable with correct options', () => { + const body = { foo: 'bar' }; + const headers = { first: 'first' }; + // returns Observable, not AjaxObservable, so needs a cast + const { request } = Rx.Observable + .ajax.patch('/flibbertyJibbet', body, headers); + + expect(request.method).to.equal('PATCH'); + expect(request.url).to.equal('/flibbertyJibbet'); + expect(request.body).to.equal(body); + expect(request.headers).to.equal(headers); + }); + }); }); class MockXMLHttpRequest {