From 51f771efcd11c4eba319cfdae57afe8f423cf23f Mon Sep 17 00:00:00 2001 From: Blake Watters Date: Thu, 23 Aug 2012 14:23:44 -0400 Subject: [PATCH] Generalize status code handling --- Code/ObjectMapping/RKMappingDescriptor.h | 37 +++++++++++++++++++++--- Code/ObjectMapping/RKMappingDescriptor.m | 10 ++++--- 2 files changed, 39 insertions(+), 8 deletions(-) diff --git a/Code/ObjectMapping/RKMappingDescriptor.h b/Code/ObjectMapping/RKMappingDescriptor.h index 914ca7f3..85bcafd8 100644 --- a/Code/ObjectMapping/RKMappingDescriptor.h +++ b/Code/ObjectMapping/RKMappingDescriptor.h @@ -20,16 +20,45 @@ #import -// 200..299 -NSRange RKMakeSuccessfulStatusCodeRange(void); +/** + The HTTP status code classes + + See http://tools.ietf.org/html/rfc2616#section-10 + */ +enum { + RKStatusCodeClassInformational = 100, + RKStatusCodeClassSuccessful = 200, + RKStatusCodeClassRedirection = 300, + RKStatusCodeClassClientError = 400, + RKStatusCodeClassServerError = 500 +}; +typedef NSUInteger RKStatusCodeClass; -// 400..499 -NSRange RKMakeClientErrorStatusCodeRange(void); +/** + Creates a new range covering the status codes in the given class. + + @param statusCodeClass The status code class to create a range covering. + @return A new range covering the status codes in the given class. + */ +NSRange RKStatusCodeRangeForClass(RKStatusCodeClass statusCodeClass); + +/** + Creates a new index set covering the status codes in the given class. + + @param statusCodeClass The status code class to create an index set covering. + @return A new index set covering the status codes in the given class. + */ +NSIndexSet * RKStatusCodeIndexSetForClass(RKStatusCodeClass statusCodeClass); + +// TODO: Implement these guys... +//NSString * RKStringFromStatusCode(NSInteger statusCode); +//NSInteger RKStatusCodeFromString(NSString *statusCode); /** An RKMappingDescriptor object describes an object mapping configuration that is available for a given HTTP request. */ +// Becomes RKResponseDescriptor @interface RKMappingDescriptor : NSObject @property (nonatomic, strong, readonly) RKMapping *mapping; // required diff --git a/Code/ObjectMapping/RKMappingDescriptor.m b/Code/ObjectMapping/RKMappingDescriptor.m index f35a3385..c1010ffc 100644 --- a/Code/ObjectMapping/RKMappingDescriptor.m +++ b/Code/ObjectMapping/RKMappingDescriptor.m @@ -21,14 +21,16 @@ #import #import "RKMappingDescriptor.h" -NSRange RKMakeSuccessfulStatusCodeRange(void) +NSUInteger RKStatusCodeRangeLength = 100; + +NSRange RKStatusCodeRangeForClass(RKStatusCodeClass statusCodeClass) { - return NSMakeRange(200, 100); + return NSMakeRange(statusCodeClass, RKStatusCodeRangeLength); } -NSRange RKMakeClientErrorStatusCodeRange(void) +NSIndexSet * RKStatusCodeIndexSetForClass(RKStatusCodeClass statusCodeClass) { - return NSMakeRange(400, 100); + return [NSIndexSet indexSetWithIndexesInRange:RKStatusCodeRangeForClass(statusCodeClass)]; } // Cloned from AFStringFromIndexSet -- method should be non-static for reuse