mirror of
https://github.com/zhigang1992/RestKit.git
synced 2026-04-30 21:52:30 +08:00
Added support for selecting object mapping using pattern matching on resourcePath.
This commit is contained in:
@@ -200,15 +200,24 @@
|
||||
return result;
|
||||
}
|
||||
|
||||
- (RKObjectMapping *)configuredObjectMapping {
|
||||
if (self.objectMapping) {
|
||||
return self.objectMapping;
|
||||
}
|
||||
|
||||
return [self.mappingProvider objectMappingForResourcePath:self.resourcePath];
|
||||
}
|
||||
|
||||
- (RKObjectMappingResult*)performMapping:(NSError**)error {
|
||||
NSAssert(_sentSynchronously || ![NSThread isMainThread], @"Mapping should occur on a background thread");
|
||||
|
||||
RKObjectMappingProvider* mappingProvider;
|
||||
if (self.objectMapping) {
|
||||
NSString* rootKeyPath = self.objectMapping.rootKeyPath ? self.objectMapping.rootKeyPath : @"";
|
||||
RKObjectMapping *configuredObjectMapping = [self configuredObjectMapping];
|
||||
if (configuredObjectMapping) {
|
||||
NSString* rootKeyPath = configuredObjectMapping.rootKeyPath ? configuredObjectMapping.rootKeyPath : @"";
|
||||
RKLogDebug(@"Found directly configured object mapping, creating temporary mapping provider for keyPath %@", rootKeyPath);
|
||||
mappingProvider = [RKObjectMappingProvider mappingProvider];
|
||||
[mappingProvider setMapping:self.objectMapping forKeyPath:rootKeyPath];
|
||||
[mappingProvider setMapping:configuredObjectMapping forKeyPath:rootKeyPath];
|
||||
} else {
|
||||
RKLogDebug(@"No object mapping provider, using mapping provider from parent object manager to perform KVC mapping");
|
||||
mappingProvider = self.mappingProvider;
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
// RestKit
|
||||
//
|
||||
// Created by Blake Watters on 10/18/10.
|
||||
// Copyright 2010 Two Toasters
|
||||
// Copyright 2010 RestKit
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
// RestKit
|
||||
//
|
||||
// Created by Blake Watters on 10/18/10.
|
||||
// Copyright 2010 Two Toasters
|
||||
// Copyright 2010 RestKit
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
|
||||
@@ -439,6 +439,56 @@
|
||||
assertThat(user.firstname, is(equalTo(@"Diego")));
|
||||
}
|
||||
|
||||
- (void)testShouldDetermineObjectLoaderBasedOnResourcePathPatternWithExactMatch {
|
||||
RKObjectMapping* userMapping = [RKObjectMapping mappingForClass:[RKSpecComplexUser class]];
|
||||
userMapping.rootKeyPath = @"data.STUser";
|
||||
[userMapping mapAttributes:@"firstname", nil];
|
||||
|
||||
RKSpecComplexUser* user = [[RKSpecComplexUser new] autorelease];
|
||||
RKObjectManager* objectManager = [RKObjectManager objectManagerWithBaseURL:RKSpecGetBaseURL()];
|
||||
RKSpecResponseLoader* responseLoader = [RKSpecResponseLoader responseLoader];
|
||||
RKObjectMappingProvider *mappingProvider = [RKObjectMappingProvider mappingProvider];
|
||||
[mappingProvider setObjectMapping:userMapping forResourcePathPattern:@"/JSON/ComplexNestedUser.json"];
|
||||
|
||||
RKURL *URL = [objectManager.baseURL URLByAppendingResourcePath:@"/JSON/ComplexNestedUser.json"];
|
||||
RKObjectLoader* objectLoader = [RKObjectLoader loaderWithURL:URL mappingProvider:mappingProvider];
|
||||
objectLoader.delegate = responseLoader;
|
||||
objectLoader.method = RKRequestMethodGET;
|
||||
objectLoader.targetObject = user;
|
||||
|
||||
[objectLoader sendAsynchronously];
|
||||
[responseLoader waitForResponse];
|
||||
|
||||
NSLog(@"Response: %@", responseLoader.objects);
|
||||
|
||||
assertThat(user.firstname, is(equalTo(@"Diego")));
|
||||
}
|
||||
|
||||
- (void)testShouldDetermineObjectLoaderBasedOnResourcePathPatternWithPartialMatch {
|
||||
RKObjectMapping* userMapping = [RKObjectMapping mappingForClass:[RKSpecComplexUser class]];
|
||||
userMapping.rootKeyPath = @"data.STUser";
|
||||
[userMapping mapAttributes:@"firstname", nil];
|
||||
|
||||
RKSpecComplexUser* user = [[RKSpecComplexUser new] autorelease];
|
||||
RKObjectManager* objectManager = [RKObjectManager objectManagerWithBaseURL:RKSpecGetBaseURL()];
|
||||
RKSpecResponseLoader* responseLoader = [RKSpecResponseLoader responseLoader];
|
||||
RKObjectMappingProvider *mappingProvider = [RKObjectMappingProvider mappingProvider];
|
||||
[mappingProvider setObjectMapping:userMapping forResourcePathPattern:@"/JSON/:name\\.json"];
|
||||
|
||||
RKURL *URL = [objectManager.baseURL URLByAppendingResourcePath:@"/JSON/ComplexNestedUser.json"];
|
||||
RKObjectLoader* objectLoader = [RKObjectLoader loaderWithURL:URL mappingProvider:mappingProvider];
|
||||
objectLoader.delegate = responseLoader;
|
||||
objectLoader.method = RKRequestMethodGET;
|
||||
objectLoader.targetObject = user;
|
||||
|
||||
[objectLoader sendAsynchronously];
|
||||
[responseLoader waitForResponse];
|
||||
|
||||
NSLog(@"Response: %@", responseLoader.objects);
|
||||
|
||||
assertThat(user.firstname, is(equalTo(@"Diego")));
|
||||
}
|
||||
|
||||
- (void)testShouldReturnSuccessWhenTheStatusCodeIs200AndTheResponseBodyIsEmpty {
|
||||
RKObjectManager* objectManager = RKSpecNewObjectManager();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user