Add support for sending objects of one type and getting back another. Target object has been disambiguated into sourceObject and targetObject

and act independently with regards to serialization and destination mapping. When you leverage the getObject:mapResponseWith: flavor of methods,
the type of your sourceObject is checked with the destination type of the object mapping. If they agree, it is assumed that you are trying to update
the object with the results of the mapping and targetObject is set appropriately. If they do not match, the targetObject is set to nil so that new
objects will be loaded. closes #161, #168
This commit is contained in:
Blake Watters
2011-06-30 10:32:44 -04:00
parent 2ac45f5ccc
commit 7053a8ca97
6 changed files with 111 additions and 18 deletions

View File

@@ -158,6 +158,7 @@ static RKObjectManager* sharedManager = nil;
NSString* resourcePath = [self.router resourcePathForObject:object method:method];
RKObjectLoader* loader = [self objectLoaderWithResourcePath:resourcePath delegate:delegate];
loader.method = method;
loader.sourceObject = object;
loader.targetObject = object;
loader.serializationMIMEType = self.serializationMIMEType;
loader.serializationMapping = [self.mappingProvider serializationMappingForClass:[object class]];
@@ -193,6 +194,11 @@ static RKObjectManager* sharedManager = nil;
- (RKObjectLoader*)getObject:(id<NSObject>)object mapResponseWith:(RKObjectMapping*)objectMapping delegate:(id<RKObjectLoaderDelegate>)delegate {
RKObjectLoader* loader = [self objectLoaderForObject:object method:RKRequestMethodGET delegate:delegate];
if ([object isMemberOfClass:[objectMapping objectClass]]) {
loader.targetObject = object;
} else {
loader.targetObject = nil;
}
loader.objectMapping = objectMapping;
[loader send];
return loader;
@@ -200,6 +206,11 @@ static RKObjectManager* sharedManager = nil;
- (RKObjectLoader*)postObject:(id<NSObject>)object mapResponseWith:(RKObjectMapping*)objectMapping delegate:(id<RKObjectLoaderDelegate>)delegate {
RKObjectLoader* loader = [self objectLoaderForObject:object method:RKRequestMethodPOST delegate:delegate];
if ([object isMemberOfClass:[objectMapping objectClass]]) {
loader.targetObject = object;
} else {
loader.targetObject = nil;
}
loader.objectMapping = objectMapping;
[loader send];
return loader;
@@ -207,6 +218,11 @@ static RKObjectManager* sharedManager = nil;
- (RKObjectLoader*)putObject:(id<NSObject>)object mapResponseWith:(RKObjectMapping*)objectMapping delegate:(id<RKObjectLoaderDelegate>)delegate {
RKObjectLoader* loader = [self objectLoaderForObject:object method:RKRequestMethodPUT delegate:delegate];
if ([object isMemberOfClass:[objectMapping objectClass]]) {
loader.targetObject = object;
} else {
loader.targetObject = nil;
}
loader.objectMapping = objectMapping;
[loader send];
return loader;
@@ -214,10 +230,14 @@ static RKObjectManager* sharedManager = nil;
- (RKObjectLoader*)deleteObject:(id<NSObject>)object mapResponseWith:(RKObjectMapping*)objectMapping delegate:(id<RKObjectLoaderDelegate>)delegate {
RKObjectLoader* loader = [self objectLoaderForObject:object method:RKRequestMethodDELETE delegate:delegate];
if ([object isMemberOfClass:[objectMapping objectClass]]) {
loader.targetObject = object;
} else {
loader.targetObject = nil;
}
loader.objectMapping = objectMapping;
[loader send];
return loader;
}
@end