diff --git a/Code/Network/RKObjectManager.m b/Code/Network/RKObjectManager.m index f0f2fce145..2914c4b67a 100644 --- a/Code/Network/RKObjectManager.m +++ b/Code/Network/RKObjectManager.m @@ -555,6 +555,7 @@ - (RKPaginator *)paginatorWithPathPattern:(NSString *)pathPattern paginator.managedObjectCache = self.managedObjectStore.managedObjectCache; paginator.fetchRequestBlocks = self.fetchRequestBlocks; paginator.operationQueue = self.operationQueue; + if (self.HTTPOperationClass) paginator.HTTPOperationClass = self.HTTPOperationClass; return paginator; } diff --git a/Code/Network/RKPaginator.h b/Code/Network/RKPaginator.h index db8071e025..a02c409e51 100644 --- a/Code/Network/RKPaginator.h +++ b/Code/Network/RKPaginator.h @@ -48,6 +48,10 @@ */ @interface RKPaginator : NSObject +///------------------------------------- +/// @name Initializing Paginator Objects +///------------------------------------- + /** Initializes a RKPaginator object with the a provided patternURL and mappingProvider. @@ -57,8 +61,12 @@ @return The receiver, initialized with the request, pagination mapping, and response descriptors. */ - (id)initWithRequest:(NSURLRequest *)request - paginationMapping:(RKObjectMapping *)paginationMapping - responseDescriptors:(NSArray *)responseDescriptors; + paginationMapping:(RKObjectMapping *)paginationMapping + responseDescriptors:(NSArray *)responseDescriptors; + +///----------------------------- +/// @name Configuring Networking +///----------------------------- /** A URL with a path pattern for building a complete URL from @@ -89,6 +97,13 @@ */ @property (nonatomic, strong) NSOperationQueue *operationQueue; +/** + The `RKHTTPRequestOperation` subclass to be used for HTTP request operations made by the paginator. + + **Default**: `[RKHTTPRequestOperation class]` + */ +@property (nonatomic, strong) Class HTTPOperationClass; + ///----------------------------------- /// @name Setting the Completion Block ///----------------------------------- diff --git a/Code/Network/RKPaginator.m b/Code/Network/RKPaginator.m index 8c223274af..4e51296d4c 100644 --- a/Code/Network/RKPaginator.m +++ b/Code/Network/RKPaginator.m @@ -63,6 +63,7 @@ - (id)initWithRequest:(NSURLRequest *)request NSAssert([paginationMapping.objectClass isSubclassOfClass:[RKPaginator class]], @"The paginationMapping must have a target object class of `RKPaginator`"); self = [super init]; if (self) { + self.HTTPOperationClass = [RKHTTPRequestOperation class]; self.request = request; self.paginationMapping = paginationMapping; self.responseDescriptors = responseDescriptors; @@ -93,6 +94,12 @@ - (NSURL *)URL return [NSURL URLWithString:interpolatedString relativeToURL:self.request.URL]; } +- (void)setHTTPOperationClass:(Class)operationClass +{ + NSAssert(operationClass == nil || [operationClass isSubclassOfClass:[RKHTTPRequestOperation class]], @"The HTTP operation class must be a subclass of `RKHTTPRequestOperation`"); + _HTTPOperationClass = operationClass; +} + - (void)setCompletionBlockWithSuccess:(void (^)(RKPaginator *paginator, NSArray *objects, NSUInteger page))success failure:(void (^)(RKPaginator *paginator, NSError *error))failure { @@ -159,7 +166,8 @@ - (void)loadPage:(NSUInteger)pageNumber mutableRequest.URL = self.URL; if (self.managedObjectContext) { - RKManagedObjectRequestOperation *managedObjectRequestOperation = [[RKManagedObjectRequestOperation alloc] initWithRequest:mutableRequest responseDescriptors:self.responseDescriptors]; + RKHTTPRequestOperation *requestOperation = [[self.HTTPOperationClass alloc] initWithRequest:mutableRequest]; + RKManagedObjectRequestOperation *managedObjectRequestOperation = [[RKManagedObjectRequestOperation alloc] initWithHTTPRequestOperation:requestOperation responseDescriptors:self.responseDescriptors]; managedObjectRequestOperation.managedObjectContext = self.managedObjectContext; managedObjectRequestOperation.managedObjectCache = self.managedObjectCache; managedObjectRequestOperation.fetchRequestBlocks = self.fetchRequestBlocks;