Refactoring implementation of AFHTTPRequest subclasses to fulfill AFHTTPClientOperation protocol

This commit is contained in:
Mattt Thompson 2011-10-10 10:41:29 -05:00
parent 263e2f3d5c
commit b7564e9f5a
5 changed files with 68 additions and 44 deletions

View file

@ -94,28 +94,7 @@
success:(void (^)(id object))success success:(void (^)(id object))success
failure:(void (^)(NSHTTPURLResponse *response, NSError *error))failure failure:(void (^)(NSHTTPURLResponse *response, NSError *error))failure
{ {
AFHTTPRequestOperation *operation = [[[self alloc] initWithRequest:urlRequest] autorelease]; return nil;
operation.completionBlock = ^ {
if ([operation isCancelled]) {
return;
}
if (operation.error) {
if (failure) {
dispatch_async(dispatch_get_main_queue(), ^(void) {
failure(operation.response, operation.error);
});
}
} else {
if (success) {
dispatch_async(dispatch_get_main_queue(), ^(void) {
success(operation.responseData);
});
}
}
};
return operation;
} }
@end @end

View file

@ -34,6 +34,9 @@ static dispatch_queue_t image_request_operation_processing_queue() {
@interface AFImageRequestOperation () @interface AFImageRequestOperation ()
@property (readwrite, nonatomic, retain) UIImage *responseImage; @property (readwrite, nonatomic, retain) UIImage *responseImage;
+ (NSSet *)defaultAcceptableContentTypes;
+ (NSSet *)defaultAcceptablePathExtensions;
@end @end
@implementation AFImageRequestOperation @implementation AFImageRequestOperation
@ -93,13 +96,21 @@ static dispatch_queue_t image_request_operation_processing_queue() {
return operation; return operation;
} }
+ (NSSet *)defaultAcceptableContentTypes {
return [NSSet setWithObjects:@"image/tiff", @"image/jpeg", @"image/gif", @"image/png", @"image/ico", @"image/x-icon" @"image/bmp", @"image/x-bmp", @"image/x-xbitmap", @"image/x-win-bitmap", nil];
}
+ (NSSet *)defaultAcceptablePathExtensions {
return [NSSet setWithObjects:@"tif", @"tiff", @"jpg", @"jpeg", @"gif", @"png", @"ico", @"bmp", @"cur", nil];
}
- (id)initWithRequest:(NSURLRequest *)urlRequest { - (id)initWithRequest:(NSURLRequest *)urlRequest {
self = [super initWithRequest:urlRequest]; self = [super initWithRequest:urlRequest];
if (!self) { if (!self) {
return nil; return nil;
} }
self.acceptableContentTypes = [NSSet setWithObjects:@"image/tiff", @"image/jpeg", @"image/gif", @"image/png", @"image/ico", @"image/x-icon" @"image/bmp", @"image/x-bmp", @"image/x-xbitmap", @"image/x-win-bitmap", nil]; self.acceptableContentTypes = [[self class] defaultAcceptableContentTypes];
return self; return self;
} }
@ -125,13 +136,7 @@ static dispatch_queue_t image_request_operation_processing_queue() {
#pragma mark - AFHTTPClientOperation #pragma mark - AFHTTPClientOperation
+ (BOOL)canProcessRequest:(NSURLRequest *)request { + (BOOL)canProcessRequest:(NSURLRequest *)request {
NSSet *acceptableContentTypes = [NSSet setWithObjects:@"image/tiff", @"image/jpeg", @"image/gif", @"image/png", @"image/ico", @"image/x-icon" @"image/bmp", @"image/x-bmp", @"image/x-xbitmap", @"image/x-win-bitmap", nil]; return [[self defaultAcceptableContentTypes] containsObject:[request valueForHTTPHeaderField:@"Accept"]] || [[self defaultAcceptablePathExtensions] containsObject:[[request URL] pathExtension]];
NSSet *acceptablePathExtensions = [NSSet setWithObjects:@"tif", @"tiff", @"jpg", @"jpeg", @"gif", @"png", @"ico", @"bmp", @"cur", nil];
return [acceptableContentTypes containsObject:[request valueForHTTPHeaderField:@"Accept"]] || [acceptablePathExtensions containsObject:[[request URL] pathExtension]];
}
+ (NSURLRequest *)canonicalRequestForRequest:(NSURLRequest *)request {
return request;
} }
+ (AFHTTPRequestOperation *)HTTPRequestOperationWithRequest:(NSURLRequest *)urlRequest + (AFHTTPRequestOperation *)HTTPRequestOperationWithRequest:(NSURLRequest *)urlRequest

View file

@ -37,6 +37,9 @@ static dispatch_queue_t json_request_operation_processing_queue() {
@interface AFJSONRequestOperation () @interface AFJSONRequestOperation ()
@property (readwrite, nonatomic, retain) id responseJSON; @property (readwrite, nonatomic, retain) id responseJSON;
@property (readwrite, nonatomic, retain) NSError *error; @property (readwrite, nonatomic, retain) NSError *error;
+ (NSSet *)defaultAcceptableContentTypes;
+ (NSSet *)defaultAcceptablePathExtensions;
@end @end
@implementation AFJSONRequestOperation @implementation AFJSONRequestOperation
@ -83,13 +86,21 @@ static dispatch_queue_t json_request_operation_processing_queue() {
return operation; return operation;
} }
+ (NSSet *)defaultAcceptableContentTypes {
return [NSSet setWithObjects:@"application/json", @"application/x-javascript", @"text/javascript", @"text/x-javascript", @"text/x-json", @"text/json", @"text/plain", nil];
}
+ (NSSet *)defaultAcceptablePathExtensions {
return [NSSet setWithObjects:@"json", nil];
}
- (id)initWithRequest:(NSURLRequest *)urlRequest { - (id)initWithRequest:(NSURLRequest *)urlRequest {
self = [super initWithRequest:urlRequest]; self = [super initWithRequest:urlRequest];
if (!self) { if (!self) {
return nil; return nil;
} }
self.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"application/x-javascript", @"text/javascript", @"text/x-javascript", @"text/x-json", @"text/json", @"text/plain", nil]; self.acceptableContentTypes = [[self class] defaultAcceptableContentTypes];
return self; return self;
} }
@ -123,12 +134,7 @@ static dispatch_queue_t json_request_operation_processing_queue() {
#pragma mark - AFHTTPClientOperation #pragma mark - AFHTTPClientOperation
+ (BOOL)canProcessRequest:(NSURLRequest *)request { + (BOOL)canProcessRequest:(NSURLRequest *)request {
NSSet *acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"application/x-javascript", @"text/javascript", @"text/x-javascript", @"text/x-json", @"text/json", @"text/plain", nil]; return [[self defaultAcceptableContentTypes] containsObject:[request valueForHTTPHeaderField:@"Accept"]] || [[self defaultAcceptablePathExtensions] containsObject:[[request URL] pathExtension]];
return [acceptableContentTypes containsObject:[request valueForHTTPHeaderField:@"Accept"]] || [[[request URL] pathExtension] isEqualToString:@"json"];
}
+ (NSURLRequest *)canonicalRequestForRequest:(NSURLRequest *)request {
return request;
} }
+ (AFHTTPRequestOperation *)HTTPRequestOperationWithRequest:(NSURLRequest *)urlRequest + (AFHTTPRequestOperation *)HTTPRequestOperationWithRequest:(NSURLRequest *)urlRequest

View file

@ -35,6 +35,9 @@ static dispatch_queue_t property_list_request_operation_processing_queue() {
@property (readwrite, nonatomic, retain) id responsePropertyList; @property (readwrite, nonatomic, retain) id responsePropertyList;
@property (readwrite, nonatomic, assign) NSPropertyListFormat propertyListFormat; @property (readwrite, nonatomic, assign) NSPropertyListFormat propertyListFormat;
@property (readwrite, nonatomic, retain) NSError *error; @property (readwrite, nonatomic, retain) NSError *error;
+ (NSSet *)defaultAcceptableContentTypes;
+ (NSSet *)defaultAcceptablePathExtensions;
@end @end
@implementation AFPropertyListRequestOperation @implementation AFPropertyListRequestOperation
@ -81,6 +84,14 @@ static dispatch_queue_t property_list_request_operation_processing_queue() {
return operation; return operation;
} }
+ (NSSet *)defaultAcceptableContentTypes {
return [NSSet setWithObjects:@"application/x-plist", @"application/xml", nil];
}
+ (NSSet *)defaultAcceptablePathExtensions {
return [NSSet setWithObjects:@"plist", nil];
}
- (id)initWithRequest:(NSURLRequest *)urlRequest { - (id)initWithRequest:(NSURLRequest *)urlRequest {
self = [super initWithRequest:urlRequest]; self = [super initWithRequest:urlRequest];
if (!self) { if (!self) {
@ -116,12 +127,7 @@ static dispatch_queue_t property_list_request_operation_processing_queue() {
#pragma mark - AFHTTPClientOperation #pragma mark - AFHTTPClientOperation
+ (BOOL)canProcessRequest:(NSURLRequest *)request { + (BOOL)canProcessRequest:(NSURLRequest *)request {
NSSet *acceptableContentTypes = [NSSet setWithObjects:@"application/x-plist", @"application/xml", nil]; return [[self defaultAcceptableContentTypes] containsObject:[request valueForHTTPHeaderField:@"Accept"]] || [[self defaultAcceptablePathExtensions] containsObject:[[request URL] pathExtension]];
return [acceptableContentTypes containsObject:[request valueForHTTPHeaderField:@"Accept"]] || [[[request URL] pathExtension] isEqualToString:@"plist"];
}
+ (NSURLRequest *)canonicalRequestForRequest:(NSURLRequest *)request {
return request;
} }
+ (AFHTTPRequestOperation *)HTTPRequestOperationWithRequest:(NSURLRequest *)urlRequest + (AFHTTPRequestOperation *)HTTPRequestOperationWithRequest:(NSURLRequest *)urlRequest

View file

@ -26,6 +26,9 @@
@interface AFXMLRequestOperation () @interface AFXMLRequestOperation ()
@property (readwrite, nonatomic, retain) NSXMLParser *responseXMLParser; @property (readwrite, nonatomic, retain) NSXMLParser *responseXMLParser;
+ (NSSet *)defaultAcceptableContentTypes;
+ (NSSet *)defaultAcceptablePathExtensions;
@end @end
@implementation AFXMLRequestOperation @implementation AFXMLRequestOperation
@ -58,13 +61,21 @@
return operation; return operation;
} }
+ (NSSet *)defaultAcceptableContentTypes {
return [NSSet setWithObjects:@"application/xml", @"text/xml", nil];
}
+ (NSSet *)defaultAcceptablePathExtensions {
return [NSSet setWithObjects:@"xml", nil];
}
- (id)initWithRequest:(NSURLRequest *)urlRequest { - (id)initWithRequest:(NSURLRequest *)urlRequest {
self = [super initWithRequest:urlRequest]; self = [super initWithRequest:urlRequest];
if (!self) { if (!self) {
return nil; return nil;
} }
self.acceptableContentTypes = [NSSet setWithObjects:@"application/xml", @"text/xml", nil]; self.acceptableContentTypes = [[self class] defaultAcceptableContentTypes];
return self; return self;
} }
@ -82,4 +93,21 @@
return _responseXMLParser; return _responseXMLParser;
} }
#pragma mark - AFHTTPClientOperation
+ (BOOL)canProcessRequest:(NSURLRequest *)request {
return [[self defaultAcceptableContentTypes] containsObject:[request valueForHTTPHeaderField:@"Accept"]] || [[self defaultAcceptablePathExtensions] containsObject:[[request URL] pathExtension]];
}
+ (AFHTTPRequestOperation *)HTTPRequestOperationWithRequest:(NSURLRequest *)urlRequest
success:(void (^)(id object))success
failure:(void (^)(NSHTTPURLResponse *response, NSError *error))failure
{
return [self XMLParserRequestOperationWithRequest:urlRequest success:^(NSURLRequest __unused *request, NSHTTPURLResponse __unused *response, NSXMLParser *XMLParser) {
success(XMLParser);
} failure:^(NSURLRequest __unused *request, NSHTTPURLResponse *response, NSError *error) {
failure(response, error);
}];
}
@end @end