This repository was archived by the owner on Aug 16, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 14
Expand file tree
/
Copy pathCMDQueryStringValueTransformer.m
More file actions
105 lines (85 loc) · 4.12 KB
/
Copy pathCMDQueryStringValueTransformer.m
File metadata and controls
105 lines (85 loc) · 4.12 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
//
// CMDQueryStringValueTransformer.m
// CMDQueryStringSerialization
//
// Created by Caleb Davenport on 7/11/14.
// Copyright (c) 2014 Caleb Davenport. All rights reserved.
//
#import "CMDQueryStringValueTransformer.h"
#import "NSString+CMDQueryStringSerialization.h"
#import <ISO8601/ISO8601.h>
@implementation NSObject (CMDQueryStringValueTransformer)
- (NSString *)CMDQueryStringValueTransformer_queryStringWithKey:(NSString *)key options:(CMDQueryStringWritingOptions)options {
NSString *escapedKey = nil;
NSString *escapedValue = nil;
if ((options & CMDQueryStringWritingOptionAddPercentEscapes) == CMDQueryStringWritingOptionAddPercentEscapes) {
escapedKey = [key CMDQueryStringSerialization_stringByAddingEscapes];
escapedValue = [self.description CMDQueryStringSerialization_stringByAddingEscapes];
}
else {
escapedKey = key;
escapedValue = self.description;
}
return [NSString stringWithFormat:@"%@=%@", escapedKey, escapedValue];
}
@end
@implementation NSArray (CMDQueryStringValueTransformer)
- (NSString *)CMDQueryStringValueTransformer_queryStringWithKey:(NSString *)key options:(CMDQueryStringWritingOptions)options {
NSString *escapedKey = nil;
NSArray *escapedValues = nil;
if ((options & CMDQueryStringWritingOptionAddPercentEscapes) == CMDQueryStringWritingOptionAddPercentEscapes) {
escapedKey = [key CMDQueryStringSerialization_stringByAddingEscapes];
escapedValues = [self valueForKey:@"CMDQueryStringSerialization_stringByAddingEscapes"];
}
else {
escapedKey = key;
escapedValues = self;
}
if ((options & CMDQueryStringWritingOptionArrayCommaSeparatedValues) == CMDQueryStringWritingOptionArrayCommaSeparatedValues) {
return [NSString stringWithFormat:@"%@=%@", escapedKey, [escapedValues componentsJoinedByString:@","]];
}
else if ((options & CMDQueryStringWritingOptionArrayRepeatKeysWithBrackets) == CMDQueryStringWritingOptionArrayRepeatKeysWithBrackets) {
NSMutableArray *pairs = [[NSMutableArray alloc] init];
[escapedValues enumerateObjectsUsingBlock:^(id object, NSUInteger index, BOOL *stop) {
NSString *pair = [NSString stringWithFormat:@"%@[]=%@", escapedKey, object];
[pairs addObject:pair];
}];
return [pairs componentsJoinedByString:@"&"];
}
else {
NSMutableArray *pairs = [[NSMutableArray alloc] init];
[escapedValues enumerateObjectsUsingBlock:^(id object, NSUInteger index, BOOL *stop) {
NSString *pair = [NSString stringWithFormat:@"%@=%@", escapedKey, object];
[pairs addObject:pair];
}];
return [pairs componentsJoinedByString:@"&"];
}
}
@end
@implementation NSDictionary (CMDQueryStringValueTransformer)
- (NSString *)CMDQueryStringValueTransformer_queryStringWithKey:(NSString *)namespace options:(CMDQueryStringWritingOptions)options {
NSMutableArray *pairs = [[NSMutableArray alloc] init];
[self enumerateKeysAndObjectsUsingBlock:^(id key, id object, BOOL *stop) {
// Ensure that key is a string
if (![key isKindOfClass:[NSString class]]) {
[NSException raise:NSInvalidArgumentException format:@"%@ is not a valid query string key.", key];
}
// Convert values
NSString *pair = [object CMDQueryStringValueTransformer_queryStringWithKey:key options:options];
[pairs addObject:pair];
}];
[pairs sortUsingSelector:@selector(compare:)];
return [pairs componentsJoinedByString:@"&"];
}
@end
@implementation NSDate (CMDQueryStringValueTransformer)
- (NSString *)CMDQueryStringValueTransformer_queryStringWithKey:(NSString *)key options:(CMDQueryStringWritingOptions)options {
if ((options & CMDQueryStringWritingOptionDateAsISO8601String) == CMDQueryStringWritingOptionDateAsISO8601String) {
return [[self ISO8601String] CMDQueryStringValueTransformer_queryStringWithKey:key options:options];
}
else {
NSNumber *number = @((NSInteger)[self timeIntervalSince1970]);
return [number CMDQueryStringValueTransformer_queryStringWithKey:key options:options];
}
}
@end