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