feat(Http): add Http class

Fixes #2530
This commit is contained in:
Jeff Cross
2015-06-13 15:49:05 -07:00
parent 93596dff3f
commit b68e561c0f
8 changed files with 266 additions and 55 deletions

View File

@ -6,10 +6,10 @@ import {RequestOptions} from './interfaces';
import {Injectable} from 'angular2/di';
import {ListWrapper, StringMapWrapper} from 'angular2/src/facade/collection';
export class RequestOptionsClass {
export class RequestOptionsClass implements RequestOptions {
method: RequestMethods = RequestMethods.GET;
headers: Headers;
body: URLSearchParams | FormData | string;
body: URLSearchParams | FormData | Blob | string;
mode: RequestModesOpts = RequestModesOpts.Cors;
credentials: RequestCredentialsOpts;
cache: RequestCacheOpts;

View File

@ -5,7 +5,7 @@ export enum RequestCacheOpts {Default, NoStore, Reload, NoCache, ForceCache, Onl
export enum RequestCredentialsOpts {Omit, SameOrigin, Include};
export enum RequestMethods {GET, POST, PUT, DELETE, OPTIONS, HEAD};
export enum RequestMethods {GET, POST, PUT, DELETE, OPTIONS, HEAD, PATCH};
export enum ReadyStates {UNSENT, OPEN, HEADERS_RECEIVED, LOADING, DONE, CANCELLED};

View File

@ -6,6 +6,8 @@ import {Request} from './static_request';
import {Response} from './static_response';
import {XHRBackend} from './backends/xhr_backend';
import {BaseRequestOptions} from './base_request_options';
import {RequestMethods} from './enums';
import {URLSearchParams} from './url_search_params';
import * as Rx from 'rx';
/**
@ -43,9 +45,59 @@ import * as Rx from 'rx';
*
**/
function httpRequest(backend: XHRBackend, request: Request) {
return <Rx.Observable<Response>>(Observable.create(observer => {
var connection: Connection = backend.createConnection(request);
var internalSubscription = connection.response.subscribe(observer);
return () => {
internalSubscription.dispose();
connection.dispose();
}
}))
}
// Abstract
@Injectable()
export class Http {
constructor(private backend: XHRBackend, private defaultOptions: BaseRequestOptions) {}
request(url: string, options?: RequestOptions): Rx.Observable<Response> {
return httpRequest(this.backend, new Request(url, this.defaultOptions.merge(options)));
}
get(url: string, options?: RequestOptions) {
return httpRequest(this.backend, new Request(url, this.defaultOptions.merge(options)
.merge({method: RequestMethods.GET})));
}
post(url: string, body: URLSearchParams | FormData | Blob | string, options?: RequestOptions) {
return httpRequest(this.backend,
new Request(url, this.defaultOptions.merge(options)
.merge({body: body, method: RequestMethods.POST})));
}
put(url: string, body: URLSearchParams | FormData | Blob | string, options?: RequestOptions) {
return httpRequest(this.backend,
new Request(url, this.defaultOptions.merge(options)
.merge({body: body, method: RequestMethods.PUT})));
}
delete (url: string, options?: RequestOptions) {
return httpRequest(this.backend, new Request(url, this.defaultOptions.merge(options)
.merge({method: RequestMethods.DELETE})));
}
patch(url: string, body: URLSearchParams | FormData | Blob | string, options?: RequestOptions) {
return httpRequest(this.backend,
new Request(url, this.defaultOptions.merge(options)
.merge({body: body, method: RequestMethods.PATCH})));
}
head(url: string, options?: RequestOptions) {
return httpRequest(this.backend, new Request(url, this.defaultOptions.merge(options)
.merge({method: RequestMethods.HEAD})));
}
}
var Observable;
@ -56,13 +108,6 @@ if (Rx.hasOwnProperty('default')) {
}
export function HttpFactory(backend: XHRBackend, defaultOptions: BaseRequestOptions) {
return function(url: string, options?: RequestOptions) {
return <Rx.Observable<Response>>(Observable.create(observer => {
var connection: Connection = backend.createConnection(new Request(url, options));
var internalSubscription = connection.response.subscribe(observer);
return () => {
internalSubscription.dispose();
connection.dispose();
}
}))
return httpRequest(backend, new Request(url, defaultOptions.merge(options)));
}
}

View File

@ -14,7 +14,7 @@ import {URLSearchParams} from './url_search_params';
export interface RequestOptions {
method?: RequestMethods;
headers?: Headers;
body?: URLSearchParams | FormData | string;
body?: URLSearchParams | FormData | Blob | string;
mode?: RequestModesOpts;
credentials?: RequestCredentialsOpts;
cache?: RequestCacheOpts;