From 4b287a5b240e249b14ef44baf1fb6fbd176ca73e Mon Sep 17 00:00:00 2001 From: Blake Watters Date: Mon, 19 Sep 2011 19:54:58 -0400 Subject: [PATCH] Added ability to overload the params on object loaders composed by the object manager. fixes #352 --- Code/ObjectMapping/RKObjectLoader.m | 2 +- Specs/ObjectMapping/RKObjectManagerSpec.m | 21 +++++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/Code/ObjectMapping/RKObjectLoader.m b/Code/ObjectMapping/RKObjectLoader.m index 6f0fe37e..844e549e 100644 --- a/Code/ObjectMapping/RKObjectLoader.m +++ b/Code/ObjectMapping/RKObjectLoader.m @@ -297,7 +297,7 @@ // Invoked just before request hits the network - (BOOL)prepareURLRequest { - if (self.sourceObject && (self.method == RKRequestMethodPOST || self.method == RKRequestMethodPUT)) { + if ((self.sourceObject && self.params == nil) && (self.method == RKRequestMethodPOST || self.method == RKRequestMethodPUT)) { NSAssert(self.serializationMapping, @"Cannot send an object to the remote"); RKLogDebug(@"POST or PUT request for source object %@, serializing to MIME Type %@ for transport...", self.sourceObject, self.serializationMIMEType); RKObjectSerializer* serializer = [RKObjectSerializer serializerWithObject:self.sourceObject mapping:self.serializationMapping]; diff --git a/Specs/ObjectMapping/RKObjectManagerSpec.m b/Specs/ObjectMapping/RKObjectManagerSpec.m index a64b0397..8b9370d0 100644 --- a/Specs/ObjectMapping/RKObjectManagerSpec.m +++ b/Specs/ObjectMapping/RKObjectManagerSpec.m @@ -311,4 +311,25 @@ assertThat(responseLoader.response.request.resourcePath, is(equalTo(@"/humans/1"))); } +- (void)itShouldLetYouOverloadTheParamsOnAnObjectLoaderRequest { + RKObjectManager* objectManager = RKSpecNewObjectManager(); + RKObjectMapping* mapping = [RKObjectMapping mappingForClass:[RKObjectMapperSpecModel class]]; + mapping.rootKeyPath = @"human"; + [mapping mapAttributes:@"name", @"age", nil]; + + RKSpecResponseLoader* responseLoader = [RKSpecResponseLoader responseLoader]; + RKObjectMapperSpecModel* human = [[RKObjectMapperSpecModel new] autorelease]; + human.name = @"Blake Watters"; + human.age = [NSNumber numberWithInt:28]; + NSDictionary *myParams = [NSDictionary dictionaryWithObject:@"bar" forKey:@"foo"]; + RKObjectLoader* loader = [objectManager sendObject:human delegate:responseLoader block:^(RKObjectLoader* loader) { + loader.method = RKRequestMethodPOST; + loader.resourcePath = @"/humans/1"; + loader.objectMapping = mapping; + loader.params = myParams; + }]; + [responseLoader waitForResponse]; + assertThat(loader.params, is(equalTo(myParams))); +} + @end