Skip to content

Commit 1744ae9

Browse files
committed
fix(ajaxObservable): remove implicit dependency to map operator patch
closes #1874
1 parent 09ef83c commit 1744ae9

File tree

3 files changed

+60
-31
lines changed

3 files changed

+60
-31
lines changed

spec/observables/dom/ajax-spec.ts

Lines changed: 55 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -440,39 +440,66 @@ describe('Observable.ajax', () => {
440440
expect(complete).to.be.true;
441441
});
442442

443-
describe('ajax.post', () => {
444-
it('should succeed on 200', () => {
445-
const expected = { foo: 'bar', hi: 'there you' };
446-
let result: Rx.AjaxResponse;
447-
let complete = false;
448-
449-
Rx.Observable
450-
.ajax.post('/flibbertyJibbet', expected)
451-
.subscribe(x => {
452-
result = x;
453-
}, null, () => {
454-
complete = true;
455-
});
456-
457-
const request = MockXMLHttpRequest.mostRecent;
458-
459-
expect(request.method).to.equal('POST');
460-
expect(request.url).to.equal('/flibbertyJibbet');
461-
expect(request.requestHeaders).to.deep.equal({
462-
'X-Requested-With': 'XMLHttpRequest',
463-
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
443+
it('should able to select json response via getJSON', () => {
444+
const expected = { foo: 'bar' };
445+
let result;
446+
let complete = false;
447+
448+
Rx.Observable
449+
.ajax.getJSON('/flibbertyJibbet')
450+
.subscribe(x => {
451+
result = x;
452+
}, null, () => {
453+
complete = true;
464454
});
465455

466-
request.respondWith({
467-
'status': 200,
468-
'contentType': 'application/json',
469-
'responseText': JSON.stringify(expected)
456+
const request = MockXMLHttpRequest.mostRecent;
457+
458+
expect(request.url).to.equal('/flibbertyJibbet');
459+
460+
request.respondWith({
461+
'status': 200,
462+
'contentType': 'application/json',
463+
'responseText': JSON.stringify(expected)
464+
});
465+
466+
expect(result).to.deep.equal(expected);
467+
expect(complete).to.be.true;
468+
});
469+
});
470+
471+
describe('ajax.post', () => {
472+
it('should succeed on 200', () => {
473+
const expected = { foo: 'bar', hi: 'there you' };
474+
let result: Rx.AjaxResponse;
475+
let complete = false;
476+
477+
Rx.Observable
478+
.ajax.post('/flibbertyJibbet', expected)
479+
.subscribe(x => {
480+
result = x;
481+
}, null, () => {
482+
complete = true;
470483
});
471484

472-
expect(request.data).to.equal('foo=bar&hi=there%20you');
473-
expect(result.response).to.deep.equal(expected);
474-
expect(complete).to.be.true;
485+
const request = MockXMLHttpRequest.mostRecent;
486+
487+
expect(request.method).to.equal('POST');
488+
expect(request.url).to.equal('/flibbertyJibbet');
489+
expect(request.requestHeaders).to.deep.equal({
490+
'X-Requested-With': 'XMLHttpRequest',
491+
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
492+
});
493+
494+
request.respondWith({
495+
'status': 200,
496+
'contentType': 'application/json',
497+
'responseText': JSON.stringify(expected)
475498
});
499+
500+
expect(request.data).to.equal('foo=bar&hi=there%20you');
501+
expect(result.response).to.deep.equal(expected);
502+
expect(complete).to.be.true;
476503
});
477504
});
478505
});

src/observable/dom/AjaxObservable.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import {errorObject} from '../../util/errorObject';
44
import {Observable} from '../../Observable';
55
import {Subscriber} from '../../Subscriber';
66
import {TeardownLogic} from '../../Subscription';
7+
import {MapOperator} from '../../operator/map';
78

89
export interface AjaxRequest {
910
url?: string;
@@ -66,7 +67,7 @@ export interface AjaxCreationMethod {
6667
post(url: string, body?: any, headers?: Object): Observable<AjaxResponse>;
6768
put(url: string, body?: any, headers?: Object): Observable<AjaxResponse>;
6869
delete(url: string, headers?: Object): Observable<AjaxResponse>;
69-
getJSON<T, R>(url: string, resultSelector?: (data: T) => R, headers?: Object): Observable<R>;
70+
getJSON<T, R>(url: string, headers?: Object): Observable<R>;
7071
}
7172

7273
export function ajaxGet(url: string, headers: Object = null) {
@@ -86,7 +87,8 @@ export function ajaxPut(url: string, body?: any, headers?: Object): Observable<A
8687
};
8788

8889
export function ajaxGetJSON<T>(url: string, headers?: Object): Observable<T> {
89-
return new AjaxObservable<AjaxResponse>({ method: 'GET', url, responseType: 'json', headers }).map(x => x.response);
90+
return new AjaxObservable<AjaxResponse>({ method: 'GET', url, responseType: 'json', headers })
91+
.lift<T>(new MapOperator<AjaxResponse, T>((x: AjaxResponse, index: number): T => x.response, null));
9092
};
9193

9294
/**

src/operator/map.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ export interface MapSignature<T> {
4646
<R>(project: (value: T, index: number) => R, thisArg?: any): Observable<R>;
4747
}
4848

49-
class MapOperator<T, R> implements Operator<T, R> {
49+
export class MapOperator<T, R> implements Operator<T, R> {
5050
constructor(private project: (value: T, index: number) => R, private thisArg: any) {
5151
}
5252

0 commit comments

Comments
 (0)