mirror of
https://github.com/zhigang1992/RestKit.git
synced 2026-05-15 17:08:04 +08:00
Improved the flexibility of the block loaders significantly by allowing them to override the object mapping and routing selection. Made sendObject:method:delegate:block private and introduced public sendObject:delegate:block method instead. Wrote some basic specs for overriding the router.
This commit is contained in:
@@ -241,7 +241,8 @@ typedef enum {
|
||||
- (BOOL)changePassword:(NSString*)newPassword error:(NSError**)error {
|
||||
if ([self validatePassword:newPassword error:error]) {
|
||||
self.password = newPassword;
|
||||
[[RKObjectManager sharedManager] sendObject:self method:RKRequestMethodPOST delegate:self block:^(RKObjectLoader* loader) {
|
||||
[[RKObjectManager sharedManager] sendObject:self delegate:self block:^(RKObjectLoader* loader) {
|
||||
loader.method = RKRequestMethodPOST;
|
||||
loader.serializationMIMEType = RKMIMETypeJSON; // We want to send this request as JSON
|
||||
loader.targetObject = nil; // Map the results back onto a new object instead of self
|
||||
// Set up a custom serialization mapping to handle this request
|
||||
@@ -252,7 +253,7 @@ typedef enum {
|
||||
}
|
||||
}
|
||||
*/
|
||||
- (RKObjectLoader*)sendObject:(id<NSObject>)object method:(RKRequestMethod)method delegate:(id<RKObjectLoaderDelegate>)delegate block:(void(^)(RKObjectLoader*))block;
|
||||
- (RKObjectLoader*)sendObject:(id<NSObject>)object delegate:(id<RKObjectLoaderDelegate>)delegate block:(void(^)(RKObjectLoader*))block;
|
||||
|
||||
/**
|
||||
GET a remote object instance and yield the object loader to the block before sending
|
||||
|
||||
@@ -201,14 +201,42 @@ static RKObjectManager* sharedManager = nil;
|
||||
return loader;
|
||||
}
|
||||
|
||||
#if NS_BLOCKS_AVAILABLE
|
||||
|
||||
#pragma mark - Block Configured Object Loaders
|
||||
|
||||
- (RKObjectLoader*)sendObject:(id<NSObject>)object method:(RKRequestMethod)method delegate:(id<RKObjectLoaderDelegate>)delegate block:(void(^)(RKObjectLoader*))block {
|
||||
RKObjectLoader* loader = [self objectLoaderForObject:object method:method delegate:delegate];
|
||||
- (RKObjectLoader*)sendObject:(id<NSObject>)object delegate:(id<RKObjectLoaderDelegate>)delegate block:(void(^)(RKObjectLoader*))block {
|
||||
RKObjectLoader* loader = [self objectLoaderWithResourcePath:nil delegate:delegate];
|
||||
loader.sourceObject = object;
|
||||
loader.targetObject = object;
|
||||
loader.serializationMIMEType = self.serializationMIMEType;
|
||||
loader.serializationMapping = [self.mappingProvider serializationMappingForClass:[object class]];
|
||||
|
||||
// Yield to the block for setup
|
||||
block(loader);
|
||||
|
||||
if (loader.resourcePath == nil) {
|
||||
loader.resourcePath = [self.router resourcePathForObject:object method:loader.method];
|
||||
}
|
||||
|
||||
if (loader.objectMapping == nil) {
|
||||
if (self.inferMappingsFromObjectTypes) {
|
||||
RKObjectMapping* objectMapping = [self.mappingProvider objectMappingForClass:[object class]];
|
||||
RKLogDebug(@"Auto-selected object mapping %@ for object of type %@", objectMapping, NSStringFromClass([object class]));
|
||||
loader.objectMapping = objectMapping;
|
||||
}
|
||||
}
|
||||
|
||||
[loader send];
|
||||
return loader;
|
||||
}
|
||||
|
||||
- (RKObjectLoader*)sendObject:(id<NSObject>)object method:(RKRequestMethod)method delegate:(id<RKObjectLoaderDelegate>)delegate block:(void(^)(RKObjectLoader*))block {
|
||||
return [self sendObject:object delegate:delegate block:^(RKObjectLoader* loader) {
|
||||
loader.method = method;
|
||||
block(loader);
|
||||
}];
|
||||
}
|
||||
|
||||
- (RKObjectLoader*)getObject:(id<NSObject>)object delegate:(id<RKObjectLoaderDelegate>)delegate block:(void(^)(RKObjectLoader*))block {
|
||||
return [self sendObject:object method:RKRequestMethodGET delegate:delegate block:block];
|
||||
@@ -226,6 +254,8 @@ static RKObjectManager* sharedManager = nil;
|
||||
return [self sendObject:object method:RKRequestMethodDELETE delegate:delegate block:block];
|
||||
}
|
||||
|
||||
#endif // NS_BLOCKS_AVAILABLE
|
||||
|
||||
#pragma mark - Object Instance Loaders for Non-nested JSON
|
||||
|
||||
- (RKObjectLoader*)getObject:(id<NSObject>)object mapResponseWith:(RKObjectMapping*)objectMapping delegate:(id<RKObjectLoaderDelegate>)delegate {
|
||||
|
||||
@@ -33,6 +33,8 @@ NSString* const RKObjectMappingNestingAttributeKeyName = @"<RK_NESTING_ATTRIBUTE
|
||||
return [self mappingForClass:[NSMutableDictionary class]];
|
||||
}
|
||||
|
||||
#if NS_BLOCKS_AVAILABLE
|
||||
|
||||
+ (id)mappingForClass:(Class)objectClass block:(void(^)(RKObjectMapping*))block {
|
||||
RKObjectMapping* mapping = [self mappingForClass:objectClass];
|
||||
block(mapping);
|
||||
@@ -45,6 +47,7 @@ NSString* const RKObjectMappingNestingAttributeKeyName = @"<RK_NESTING_ATTRIBUTE
|
||||
return mapping;
|
||||
}
|
||||
|
||||
#endif // NS_BLOCKS_AVAILABLE
|
||||
|
||||
- (id)init {
|
||||
self = [super init];
|
||||
|
||||
Reference in New Issue
Block a user