Skip to content

Commit b68e561

Browse files
committed
feat(Http): add Http class
Fixes angular#2530
1 parent 93596df commit b68e561

File tree

8 files changed

+268
-57
lines changed

8 files changed

+268
-57
lines changed

modules/angular2/http.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,14 @@ import {bind, Binding} from 'angular2/di';
22
import {Http, HttpFactory} from './src/http/http';
33
import {XHRBackend} from 'angular2/src/http/backends/xhr_backend';
44
import {BrowserXHR} from 'angular2/src/http/backends/browser_xhr';
5+
import {BaseRequestOptions} from 'angular2/src/http/base_request_options';
56

67
export {Http};
78
export var httpInjectables: List<any> = [
9+
bind(BrowserXHR)
10+
.toValue(BrowserXHR),
811
XHRBackend,
9-
bind(BrowserXHR).toValue(BrowserXHR),
10-
bind(Http).toFactory(HttpFactory, [XHRBackend])
12+
BaseRequestOptions,
13+
bind(HttpFactory).toFactory(HttpFactory, [XHRBackend, BaseRequestOptions]),
14+
Http
1115
];

modules/angular2/src/http/base_request_options.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,10 @@ import {RequestOptions} from './interfaces';
66
import {Injectable} from 'angular2/di';
77
import {ListWrapper, StringMapWrapper} from 'angular2/src/facade/collection';
88

9-
export class RequestOptionsClass {
9+
export class RequestOptionsClass implements RequestOptions {
1010
method: RequestMethods = RequestMethods.GET;
1111
headers: Headers;
12-
body: URLSearchParams | FormData | string;
12+
body: URLSearchParams | FormData | Blob | string;
1313
mode: RequestModesOpts = RequestModesOpts.Cors;
1414
credentials: RequestCredentialsOpts;
1515
cache: RequestCacheOpts;

modules/angular2/src/http/enums.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ export enum RequestCacheOpts {Default, NoStore, Reload, NoCache, ForceCache, Onl
55

66
export enum RequestCredentialsOpts {Omit, SameOrigin, Include};
77

8-
export enum RequestMethods {GET, POST, PUT, DELETE, OPTIONS, HEAD};
8+
export enum RequestMethods {GET, POST, PUT, DELETE, OPTIONS, HEAD, PATCH};
99

1010
export enum ReadyStates {UNSENT, OPEN, HEADERS_RECEIVED, LOADING, DONE, CANCELLED};
1111

modules/angular2/src/http/http.ts

Lines changed: 53 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ import {Request} from './static_request';
66
import {Response} from './static_response';
77
import {XHRBackend} from './backends/xhr_backend';
88
import {BaseRequestOptions} from './base_request_options';
9+
import {RequestMethods} from './enums';
10+
import {URLSearchParams} from './url_search_params';
911
import * as Rx from 'rx';
1012

1113
/**
@@ -43,9 +45,59 @@ import * as Rx from 'rx';
4345
*
4446
**/
4547

48+
function httpRequest(backend: XHRBackend, request: Request) {
49+
return <Rx.Observable<Response>>(Observable.create(observer => {
50+
var connection: Connection = backend.createConnection(request);
51+
var internalSubscription = connection.response.subscribe(observer);
52+
return () => {
53+
internalSubscription.dispose();
54+
connection.dispose();
55+
}
56+
}))
57+
}
58+
4659
// Abstract
4760
@Injectable()
4861
export class Http {
62+
constructor(private backend: XHRBackend, private defaultOptions: BaseRequestOptions) {}
63+
64+
request(url: string, options?: RequestOptions): Rx.Observable<Response> {
65+
return httpRequest(this.backend, new Request(url, this.defaultOptions.merge(options)));
66+
}
67+
68+
get(url: string, options?: RequestOptions) {
69+
return httpRequest(this.backend, new Request(url, this.defaultOptions.merge(options)
70+
.merge({method: RequestMethods.GET})));
71+
}
72+
73+
post(url: string, body: URLSearchParams | FormData | Blob | string, options?: RequestOptions) {
74+
return httpRequest(this.backend,
75+
new Request(url, this.defaultOptions.merge(options)
76+
77+
.merge({body: body, method: RequestMethods.POST})));
78+
}
79+
80+
put(url: string, body: URLSearchParams | FormData | Blob | string, options?: RequestOptions) {
81+
return httpRequest(this.backend,
82+
new Request(url, this.defaultOptions.merge(options)
83+
.merge({body: body, method: RequestMethods.PUT})));
84+
}
85+
86+
delete (url: string, options?: RequestOptions) {
87+
return httpRequest(this.backend, new Request(url, this.defaultOptions.merge(options)
88+
.merge({method: RequestMethods.DELETE})));
89+
}
90+
91+
patch(url: string, body: URLSearchParams | FormData | Blob | string, options?: RequestOptions) {
92+
return httpRequest(this.backend,
93+
new Request(url, this.defaultOptions.merge(options)
94+
.merge({body: body, method: RequestMethods.PATCH})));
95+
}
96+
97+
head(url: string, options?: RequestOptions) {
98+
return httpRequest(this.backend, new Request(url, this.defaultOptions.merge(options)
99+
.merge({method: RequestMethods.HEAD})));
100+
}
49101
}
50102

51103
var Observable;
@@ -56,13 +108,6 @@ if (Rx.hasOwnProperty('default')) {
56108
}
57109
export function HttpFactory(backend: XHRBackend, defaultOptions: BaseRequestOptions) {
58110
return function(url: string, options?: RequestOptions) {
59-
return <Rx.Observable<Response>>(Observable.create(observer => {
60-
var connection: Connection = backend.createConnection(new Request(url, options));
61-
var internalSubscription = connection.response.subscribe(observer);
62-
return () => {
63-
internalSubscription.dispose();
64-
connection.dispose();
65-
}
66-
}))
111+
return httpRequest(backend, new Request(url, defaultOptions.merge(options)));
67112
}
68113
}

modules/angular2/src/http/interfaces.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import {URLSearchParams} from './url_search_params';
1414
export interface RequestOptions {
1515
method?: RequestMethods;
1616
headers?: Headers;
17-
body?: URLSearchParams | FormData | string;
17+
body?: URLSearchParams | FormData | Blob | string;
1818
mode?: RequestModesOpts;
1919
credentials?: RequestCredentialsOpts;
2020
cache?: RequestCacheOpts;

modules/angular2/test/http/base_request_options_spec.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@ export function main() {
2424
it('should retain previously merged values when merging again', () => {
2525
var options1 = new BaseRequestOptions();
2626
var options2 = options1.merge({method: RequestMethods.DELETE});
27-
var options3 = options2.merge({mode: RequestModesOpts.NoCors}) expect(options3.mode)
28-
.toBe(RequestModesOpts.NoCors);
27+
var options3 = options2.merge({mode: RequestModesOpts.NoCors});
28+
expect(options3.mode).toBe(RequestModesOpts.NoCors);
2929
expect(options3.method).toBe(RequestMethods.DELETE);
3030
});
3131
});

0 commit comments

Comments
 (0)