From c7d8d0db3b58dfd5113ed14b79639ea5bb4dd03a Mon Sep 17 00:00:00 2001 From: Blake Watters Date: Wed, 6 Jul 2011 15:57:05 -0400 Subject: [PATCH] Fix and test coverage for base URLs containing a path --- Code/Network/RKURL.m | 7 ++++++- Specs/Network/RKURLSpec.m | 5 +++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/Code/Network/RKURL.m b/Code/Network/RKURL.m index 33f5a3db..047ace3f 100644 --- a/Code/Network/RKURL.m +++ b/Code/Network/RKURL.m @@ -28,15 +28,20 @@ } - (id)initWithBaseURLString:(NSString*)baseURLString resourcePath:(NSString*)resourcePath queryParams:(NSDictionary*)queryParams { + // Ensure the resource path always has a leading slash + if ([resourcePath length] > 0) { + resourcePath = ([resourcePath characterAtIndex:0] != '/') ? [NSString stringWithFormat:@"/%@", resourcePath] : resourcePath; + } NSString* resourcePathWithQueryString = RKPathAppendQueryParams(resourcePath, queryParams); NSURL *baseURL = [NSURL URLWithString:baseURLString]; - NSURL *completeURL = [NSURL URLWithString:resourcePathWithQueryString relativeToURL:baseURL]; + NSURL *completeURL = [NSURL URLWithString:[NSString stringWithFormat:@"%@%@", baseURL, resourcePathWithQueryString]]; if (!completeURL) { [self release]; return nil; } // You can't safely use initWithString:relativeToURL: in a NSURL subclass, see http://www.openradar.me/9729706 + NSLog(@"Initialized the string: %@", [completeURL absoluteString]); self = [self initWithString:[completeURL absoluteString]]; if (self) { _baseURLString = [baseURLString copy]; diff --git a/Specs/Network/RKURLSpec.m b/Specs/Network/RKURLSpec.m index 4bbd6a92..e0c67ebc 100644 --- a/Specs/Network/RKURLSpec.m +++ b/Specs/Network/RKURLSpec.m @@ -53,5 +53,10 @@ assertThat([URL absoluteString], is(equalTo(@"http://restkit.org"))); } +- (void)itShouldHandleBaseURLsWithAPath { + RKURL* URL = [RKURL URLWithBaseURLString:@"http://restkit.org/this" resourcePath:@"/test" queryParams:nil]; + assertThat([URL absoluteString], is(equalTo(@"http://restkit.org/this/test"))); +} + @end \ No newline at end of file