Improve Request Descriptor registration and lookup behaviors:

* Add assertion to object manager when you attempt to register an overlapping request descriptor
* Improve search algorithm to handle subclass matches
This commit is contained in:
Blake Watters
2012-11-05 23:10:57 -05:00
parent 7f7bef3e9f
commit e85cf659c0
4 changed files with 61 additions and 13 deletions

View File

@@ -68,9 +68,14 @@ static NSArray *RKFilteredArrayOfResponseDescriptorsMatchingPath(NSArray *respon
*/
static RKRequestDescriptor *RKRequestDescriptorFromArrayMatchingObject(NSArray *requestDescriptors, id object)
{
for (RKRequestDescriptor *requestDescriptor in requestDescriptors) {
if ([requestDescriptor matchesObject:object]) return requestDescriptor;
}
Class searchClass = [object class];
do {
for (RKRequestDescriptor *requestDescriptor in requestDescriptors) {
if ([requestDescriptor.objectClass isEqual:searchClass]) return requestDescriptor;
}
searchClass = [searchClass superclass];
} while (searchClass);
return nil;
}
@@ -459,7 +464,11 @@ static NSString *RKMIMETypeFromAFHTTPClientParameterEncoding(AFHTTPClientParamet
- (void)addRequestDescriptor:(RKRequestDescriptor *)requestDescriptor
{
NSParameterAssert(requestDescriptor);
if ([self.requestDescriptors containsObject:requestDescriptor]) return;
NSAssert([requestDescriptor isKindOfClass:[RKRequestDescriptor class]], @"Expected an object of type RKRequestDescriptor, got '%@'", [requestDescriptor class]);
[self.requestDescriptors enumerateObjectsUsingBlock:^(RKRequestDescriptor *registeredDescriptor, NSUInteger idx, BOOL *stop) {
NSAssert(![registeredDescriptor.objectClass isEqual:requestDescriptor.objectClass], @"Cannot add a request descriptor for the same object class as an existing request descriptor.");
}];
[self.mutableRequestDescriptors addObject:requestDescriptor];
}