From 9ddaf8e409223fc1621ca740e308d2d634bd1278 Mon Sep 17 00:00:00 2001 From: Deirdre Gibson Date: Thu, 8 Oct 2015 11:15:27 -0700 Subject: [PATCH 1/5] Create an array for query params with the same key in the queryParameters dictionary --- DeepLinkKit.xcodeproj/project.pbxproj | 1 + DeepLinkKit/Categories/NSString+DPLQuery.m | 27 ++++++++++++++-------- Podfile | 1 - Podfile.lock | 4 ++-- 4 files changed, 21 insertions(+), 12 deletions(-) diff --git a/DeepLinkKit.xcodeproj/project.pbxproj b/DeepLinkKit.xcodeproj/project.pbxproj index d88bffd..14b91bb 100644 --- a/DeepLinkKit.xcodeproj/project.pbxproj +++ b/DeepLinkKit.xcodeproj/project.pbxproj @@ -738,6 +738,7 @@ isa = PBXProject; attributes = { CLASSPREFIX = DPL; + LastSwiftUpdateCheck = 0700; LastUpgradeCheck = 0610; ORGANIZATIONNAME = "Button, Inc."; TargetAttributes = { diff --git a/DeepLinkKit/Categories/NSString+DPLQuery.m b/DeepLinkKit/Categories/NSString+DPLQuery.m index 47b2024..55f5fb8 100644 --- a/DeepLinkKit/Categories/NSString+DPLQuery.m +++ b/DeepLinkKit/Categories/NSString+DPLQuery.m @@ -15,17 +15,26 @@ + (NSString *)DPL_queryStringWithParameters:(NSDictionary *)parameters { - (NSDictionary *)DPL_parametersFromQueryString { - NSArray *params = [self componentsSeparatedByString:@"&"]; - NSMutableDictionary *paramsDict = [NSMutableDictionary dictionaryWithCapacity:[params count]]; - for (NSString *param in params) { - NSArray *pairs = [param componentsSeparatedByString:@"="]; - if ([pairs count] == 2) { - NSString *key = [pairs[0] DPL_stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; - NSString *value = [pairs[1] DPL_stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; - paramsDict[key] = value; + NSArray *params = [self componentsSeparatedByString:@"&"]; + NSMutableDictionary *paramsDict = [NSMutableDictionary dictionaryWithCapacity:[params count]]; + for (NSString *param in params) { + NSArray *pairs = [param componentsSeparatedByString:@"="]; + if ([pairs count] == 2) { + NSString *key = [pairs[0] DPL_stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; + NSString *value = [pairs[1] DPL_stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; + if (paramsDict[key]) { + if ([paramsDict[key] isKindOfClass:[NSArray class]]) { + [paramsDict[key] addObject:value]; } + else { + paramsDict[key] = [NSMutableArray arrayWithObjects:paramsDict[key], value, nil]; + } + continue; + } + paramsDict[key] = value; } - return [paramsDict copy]; + } + return [paramsDict copy]; } diff --git a/Podfile b/Podfile index e02baaf..60fe52a 100644 --- a/Podfile +++ b/Podfile @@ -1,5 +1,4 @@ xcodeproj 'DeepLinkKit.xcodeproj', 'Test' => :debug -plugin 'slather' target 'SenderDemo', :exclusive => true do diff --git a/Podfile.lock b/Podfile.lock index ad11872..8ae31a9 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -19,10 +19,10 @@ EXTERNAL SOURCES: :path: . SPEC CHECKSUMS: - DeepLinkKit: 3979713c8a0b6bd3259fb7917e572acf56645a35 + DeepLinkKit: 83cba3b73a997fffa9cf5ddda2bcba8bbed0788a Expecta: 32604574add2c46a36f8d2f716b6c5736eb75024 KIF: a94bffe9c97e449e44f8fa481c53243d21309e1e OCMock: a10ea9f0a6e921651f96f78b6faee95ebc813b92 Specta: 9cec98310dca411f7c7ffd6943552b501622abfe -COCOAPODS: 0.37.1 +COCOAPODS: 0.38.2 From 74360799b1725568eb255f1ad86886a08141f4ba Mon Sep 17 00:00:00 2001 From: Deirdre Gibson Date: Thu, 8 Oct 2015 11:45:13 -0700 Subject: [PATCH 2/5] Use 4 space tabs instead of 2 space tabs --- DeepLinkKit/Categories/NSString+DPLQuery.m | 36 +++++++++++----------- Podfile | 2 +- 2 files changed, 19 insertions(+), 19 deletions(-) diff --git a/DeepLinkKit/Categories/NSString+DPLQuery.m b/DeepLinkKit/Categories/NSString+DPLQuery.m index 55f5fb8..f9ba29a 100644 --- a/DeepLinkKit/Categories/NSString+DPLQuery.m +++ b/DeepLinkKit/Categories/NSString+DPLQuery.m @@ -15,26 +15,26 @@ + (NSString *)DPL_queryStringWithParameters:(NSDictionary *)parameters { - (NSDictionary *)DPL_parametersFromQueryString { - NSArray *params = [self componentsSeparatedByString:@"&"]; - NSMutableDictionary *paramsDict = [NSMutableDictionary dictionaryWithCapacity:[params count]]; - for (NSString *param in params) { - NSArray *pairs = [param componentsSeparatedByString:@"="]; - if ([pairs count] == 2) { - NSString *key = [pairs[0] DPL_stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; - NSString *value = [pairs[1] DPL_stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; - if (paramsDict[key]) { - if ([paramsDict[key] isKindOfClass:[NSArray class]]) { - [paramsDict[key] addObject:value]; + NSArray *params = [self componentsSeparatedByString:@"&"]; + NSMutableDictionary *paramsDict = [NSMutableDictionary dictionaryWithCapacity:[params count]]; + for (NSString *param in params) { + NSArray *pairs = [param componentsSeparatedByString:@"="]; + if ([pairs count] == 2) { + NSString *key = [pairs[0] DPL_stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; + NSString *value = [pairs[1] DPL_stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; + if (paramsDict[key]) { + if ([paramsDict[key] isKindOfClass:[NSArray class]]) { + [paramsDict[key] addObject:value]; + } + else { + paramsDict[key] = [NSMutableArray arrayWithObjects:paramsDict[key], value, nil]; + } + continue; + } + paramsDict[key] = value; } - else { - paramsDict[key] = [NSMutableArray arrayWithObjects:paramsDict[key], value, nil]; - } - continue; - } - paramsDict[key] = value; } - } - return [paramsDict copy]; + return [paramsDict copy]; } diff --git a/Podfile b/Podfile index 60fe52a..9da1b7d 100644 --- a/Podfile +++ b/Podfile @@ -1,5 +1,5 @@ xcodeproj 'DeepLinkKit.xcodeproj', 'Test' => :debug - +plugin 'slather' target 'SenderDemo', :exclusive => true do pod 'DeepLinkKit', :path => '.' From 8ef315e50d65960fc7daaa596d8bebf9baaf7fbe Mon Sep 17 00:00:00 2001 From: Deirdre Gibson Date: Thu, 8 Oct 2015 14:32:43 -0700 Subject: [PATCH 3/5] Add test for ensuring query params with the same keys are created as an array --- Tests/Categories/NSString_DPLQuerySpec.m | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Tests/Categories/NSString_DPLQuerySpec.m b/Tests/Categories/NSString_DPLQuerySpec.m index 653e39e..62aa5be 100644 --- a/Tests/Categories/NSString_DPLQuerySpec.m +++ b/Tests/Categories/NSString_DPLQuerySpec.m @@ -75,6 +75,12 @@ expect(params[@"one"]).to.equal(@"a one"); expect(params[@"two"]).to.equal(@"http://www.example.com?foo=bar"); }); + + it(@"should decode query parameters into a dictionary with an array of values", ^{ + NSString *query = @"numbers=1&numbers=2&numbers=3"; + NSDictionary *params = [query DPL_parametersFromQueryString]; + expect(params[@"one"]).to.equal(@[@"1", @"2", @"3"]); + }); }); SpecEnd From 886c90afdad86c34d9f133ba9973fea00296da67 Mon Sep 17 00:00:00 2001 From: Deirdre Gibson Date: Fri, 9 Oct 2015 12:35:14 -0700 Subject: [PATCH 4/5] Update unit test for testing params with the same key --- Tests/Categories/NSString_DPLQuerySpec.m | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Tests/Categories/NSString_DPLQuerySpec.m b/Tests/Categories/NSString_DPLQuerySpec.m index 62aa5be..8cba33c 100644 --- a/Tests/Categories/NSString_DPLQuerySpec.m +++ b/Tests/Categories/NSString_DPLQuerySpec.m @@ -77,9 +77,9 @@ }); it(@"should decode query parameters into a dictionary with an array of values", ^{ - NSString *query = @"numbers=1&numbers=2&numbers=3"; + NSString *query = @"numbers[]=1&numbers[]=2&numbers[]=3"; NSDictionary *params = [query DPL_parametersFromQueryString]; - expect(params[@"one"]).to.equal(@[@"1", @"2", @"3"]); + expect(params[@"numbers[]"]).to.equal(@[@"1", @"2", @"3"]); }); }); From 19e5cdf3518f2f77107044f8ca0034c51a1f17df Mon Sep 17 00:00:00 2001 From: Deirdre Gibson Date: Fri, 9 Oct 2015 15:25:55 -0700 Subject: [PATCH 5/5] Fix unit test for testing arrays in query params --- Tests/Categories/NSString_DPLQuerySpec.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Tests/Categories/NSString_DPLQuerySpec.m b/Tests/Categories/NSString_DPLQuerySpec.m index 8cba33c..6a184ab 100644 --- a/Tests/Categories/NSString_DPLQuerySpec.m +++ b/Tests/Categories/NSString_DPLQuerySpec.m @@ -77,7 +77,7 @@ }); it(@"should decode query parameters into a dictionary with an array of values", ^{ - NSString *query = @"numbers[]=1&numbers[]=2&numbers[]=3"; + NSString *query = @"numbers%5B%5D=1&numbers%5B%5D=2&numbers%5B%5D=3"; NSDictionary *params = [query DPL_parametersFromQueryString]; expect(params[@"numbers[]"]).to.equal(@[@"1", @"2", @"3"]); });