Significant refactoring and renaming of internal query string serialization functions. Query String parameter components are now pairs, comprised of a field and a corresponding value.
This commit is contained in:
parent
bb8aee4a4f
commit
e1995eae55
1 changed files with 35 additions and 53 deletions
|
|
@ -92,106 +92,88 @@ static NSString * AFBase64EncodedStringFromString(NSString *string) {
|
||||||
return [[[NSString alloc] initWithData:mutableData encoding:NSASCIIStringEncoding] autorelease];
|
return [[[NSString alloc] initWithData:mutableData encoding:NSASCIIStringEncoding] autorelease];
|
||||||
}
|
}
|
||||||
|
|
||||||
NSString * AFURLEncodedStringFromStringWithEncoding(NSString *string, NSStringEncoding encoding) {
|
NSString * AFPercentEscapedQueryStringPairMemberFromStringWithEncoding(NSString *string, NSStringEncoding encoding) {
|
||||||
// Escape characters that are legal in URIs, but have unintentional semantic significance when used in a query string parameter
|
// Escape characters that are legal in URIs, but have unintentional semantic significance when used in a query string parameter
|
||||||
static NSString * const kAFLegalCharactersToBeEscaped = @":/.?&=;+!@$()~";
|
static NSString * const kAFLegalCharactersToBeEscaped = @":/.?&=;+!@$()~";
|
||||||
|
|
||||||
return [(NSString *)CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef)string, NULL, (CFStringRef)kAFLegalCharactersToBeEscaped, CFStringConvertNSStringEncodingToEncoding(encoding)) autorelease];
|
return [(NSString *)CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef)string, NULL, (CFStringRef)kAFLegalCharactersToBeEscaped, CFStringConvertNSStringEncodingToEncoding(encoding)) autorelease];
|
||||||
}
|
}
|
||||||
|
|
||||||
#pragma mark -
|
#pragma mark -
|
||||||
|
|
||||||
@interface AFQueryStringComponent : NSObject {
|
@interface AFQueryStringPair : NSObject
|
||||||
@private
|
@property (readwrite, nonatomic, retain) id field;
|
||||||
NSString *_key;
|
|
||||||
NSString *_value;
|
|
||||||
}
|
|
||||||
|
|
||||||
@property (readwrite, nonatomic, retain) id key;
|
|
||||||
@property (readwrite, nonatomic, retain) id value;
|
@property (readwrite, nonatomic, retain) id value;
|
||||||
|
|
||||||
- (id)initWithKey:(id)key value:(id)value;
|
- (id)initWithField:(id)field value:(id)value;
|
||||||
- (NSString *)URLEncodedStringValueWithEncoding:(NSStringEncoding)stringEncoding;
|
- (NSString *)URLEncodedStringValueWithEncoding:(NSStringEncoding)stringEncoding;
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@implementation AFQueryStringComponent
|
@implementation AFQueryStringPair
|
||||||
@synthesize key = _key;
|
@synthesize field = _field;
|
||||||
@synthesize value = _value;
|
@synthesize value = _value;
|
||||||
|
|
||||||
- (id)initWithKey:(id)key value:(id)value {
|
- (id)initWithField:(id)field value:(id)value {
|
||||||
self = [super init];
|
self = [super init];
|
||||||
if (!self) {
|
if (!self) {
|
||||||
return nil;
|
return nil;
|
||||||
}
|
}
|
||||||
|
|
||||||
self.key = key;
|
self.field = field;
|
||||||
self.value = value;
|
self.value = value;
|
||||||
|
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)dealloc {
|
- (void)dealloc {
|
||||||
[_key release];
|
[_field release];
|
||||||
[_value release];
|
[_value release];
|
||||||
[super dealloc];
|
[super dealloc];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (NSString *)URLEncodedStringValueWithEncoding:(NSStringEncoding)stringEncoding {
|
- (NSString *)URLEncodedStringValueWithEncoding:(NSStringEncoding)stringEncoding {
|
||||||
return [NSString stringWithFormat:@"%@=%@", self.key, AFURLEncodedStringFromStringWithEncoding([self.value description], stringEncoding)];
|
return [NSString stringWithFormat:@"%@=%@", AFPercentEscapedQueryStringPairMemberFromStringWithEncoding(self.field, stringEncoding), AFPercentEscapedQueryStringPairMemberFromStringWithEncoding([self.value description], stringEncoding)];
|
||||||
}
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
#pragma mark -
|
#pragma mark -
|
||||||
|
|
||||||
extern NSArray * AFQueryStringComponentsFromKeyAndValue(NSString *key, id value);
|
extern NSArray * AFQueryStringPairsFromDictionary(NSDictionary *dictionary);
|
||||||
extern NSArray * AFQueryStringComponentsFromKeyAndDictionaryValue(NSString *key, NSDictionary *value);
|
extern NSArray * AFQueryStringPairsFromKeyAndValue(NSString *key, id value);
|
||||||
extern NSArray * AFQueryStringComponentsFromKeyAndArrayValue(NSString *key, NSArray *value);
|
|
||||||
|
|
||||||
NSString * AFQueryStringFromParametersWithEncoding(NSDictionary *parameters, NSStringEncoding stringEncoding) {
|
NSString * AFQueryStringFromParametersWithEncoding(NSDictionary *parameters, NSStringEncoding stringEncoding) {
|
||||||
NSMutableArray *mutableComponents = [NSMutableArray array];
|
NSMutableArray *mutablePairs = [NSMutableArray array];
|
||||||
for (AFQueryStringComponent *component in AFQueryStringComponentsFromKeyAndValue(nil, parameters)) {
|
for (AFQueryStringPair *pair in AFQueryStringPairsFromDictionary(parameters)) {
|
||||||
[mutableComponents addObject:[component URLEncodedStringValueWithEncoding:stringEncoding]];
|
[mutablePairs addObject:[pair URLEncodedStringValueWithEncoding:stringEncoding]];
|
||||||
}
|
}
|
||||||
|
|
||||||
return [mutableComponents componentsJoinedByString:@"&"];
|
return [mutablePairs componentsJoinedByString:@"&"];
|
||||||
}
|
}
|
||||||
|
|
||||||
NSArray * AFQueryStringComponentsFromKeyAndValue(NSString *key, id value) {
|
NSArray * AFQueryStringPairsFromDictionary(NSDictionary *dictionary) {
|
||||||
|
return AFQueryStringPairsFromKeyAndValue(nil, dictionary);
|
||||||
|
}
|
||||||
|
|
||||||
|
NSArray * AFQueryStringPairsFromKeyAndValue(NSString *key, id value) {
|
||||||
NSMutableArray *mutableQueryStringComponents = [NSMutableArray array];
|
NSMutableArray *mutableQueryStringComponents = [NSMutableArray array];
|
||||||
|
|
||||||
if([value isKindOfClass:[NSDictionary class]]) {
|
if([value isKindOfClass:[NSDictionary class]]) {
|
||||||
[mutableQueryStringComponents addObjectsFromArray:AFQueryStringComponentsFromKeyAndDictionaryValue(key, value)];
|
[value enumerateKeysAndObjectsUsingBlock:^(id nestedKey, id nestedValue, BOOL *stop) {
|
||||||
|
[mutableQueryStringComponents addObjectsFromArray:AFQueryStringPairsFromKeyAndValue((key ? [NSString stringWithFormat:@"%@[%@]", key, nestedKey] : nestedKey), nestedValue)];
|
||||||
|
}];
|
||||||
} else if([value isKindOfClass:[NSArray class]]) {
|
} else if([value isKindOfClass:[NSArray class]]) {
|
||||||
[mutableQueryStringComponents addObjectsFromArray:AFQueryStringComponentsFromKeyAndArrayValue(key, value)];
|
[value enumerateObjectsUsingBlock:^(id nestedValue, NSUInteger idx, BOOL *stop) {
|
||||||
|
[mutableQueryStringComponents addObjectsFromArray:AFQueryStringPairsFromKeyAndValue([NSString stringWithFormat:@"%@[]", key], nestedValue)];
|
||||||
|
}];
|
||||||
} else {
|
} else {
|
||||||
[mutableQueryStringComponents addObject:[[[AFQueryStringComponent alloc] initWithKey:key value:value] autorelease]];
|
[mutableQueryStringComponents addObject:[[[AFQueryStringPair alloc] initWithField:key value:value] autorelease]];
|
||||||
}
|
}
|
||||||
|
|
||||||
return mutableQueryStringComponents;
|
return mutableQueryStringComponents;
|
||||||
}
|
}
|
||||||
|
|
||||||
NSArray * AFQueryStringComponentsFromKeyAndDictionaryValue(NSString *key, NSDictionary *value){
|
|
||||||
NSMutableArray *mutableQueryStringComponents = [NSMutableArray array];
|
|
||||||
|
|
||||||
[value enumerateKeysAndObjectsUsingBlock:^(id nestedKey, id nestedValue, BOOL *stop) {
|
|
||||||
[mutableQueryStringComponents addObjectsFromArray:AFQueryStringComponentsFromKeyAndValue((key ? [NSString stringWithFormat:@"%@[%@]", key, nestedKey] : nestedKey), nestedValue)];
|
|
||||||
}];
|
|
||||||
|
|
||||||
return mutableQueryStringComponents;
|
|
||||||
}
|
|
||||||
|
|
||||||
NSArray * AFQueryStringComponentsFromKeyAndArrayValue(NSString *key, NSArray *value) {
|
|
||||||
NSMutableArray *mutableQueryStringComponents = [NSMutableArray array];
|
|
||||||
|
|
||||||
[value enumerateObjectsUsingBlock:^(id nestedValue, NSUInteger idx, BOOL *stop) {
|
|
||||||
[mutableQueryStringComponents addObjectsFromArray:AFQueryStringComponentsFromKeyAndValue([NSString stringWithFormat:@"%@[]", key], nestedValue)];
|
|
||||||
}];
|
|
||||||
|
|
||||||
return mutableQueryStringComponents;
|
|
||||||
}
|
|
||||||
|
|
||||||
static NSString * AFJSONStringFromParameters(NSDictionary *parameters) {
|
static NSString * AFJSONStringFromParameters(NSDictionary *parameters) {
|
||||||
NSError *error = nil;
|
NSError *error = nil;
|
||||||
NSData *JSONData = AFJSONEncode(parameters, &error);
|
NSData *JSONData = AFJSONEncode(parameters, &error);
|
||||||
|
|
@ -497,16 +479,16 @@ static void AFNetworkReachabilityReleaseCallback(const void *info) {
|
||||||
__block AFMultipartFormData *formData = [[[AFMultipartFormData alloc] initWithURLRequest:request stringEncoding:self.stringEncoding] autorelease];
|
__block AFMultipartFormData *formData = [[[AFMultipartFormData alloc] initWithURLRequest:request stringEncoding:self.stringEncoding] autorelease];
|
||||||
|
|
||||||
if (parameters) {
|
if (parameters) {
|
||||||
for (AFQueryStringComponent *component in AFQueryStringComponentsFromKeyAndValue(nil, parameters)) {
|
for (AFQueryStringPair *pair in AFQueryStringPairsFromDictionary(parameters)) {
|
||||||
NSData *data = nil;
|
NSData *data = nil;
|
||||||
if ([component.value isKindOfClass:[NSData class]]) {
|
if ([pair.value isKindOfClass:[NSData class]]) {
|
||||||
data = component.value;
|
data = pair.value;
|
||||||
} else {
|
} else {
|
||||||
data = [[component.value description] dataUsingEncoding:self.stringEncoding];
|
data = [[pair.value description] dataUsingEncoding:self.stringEncoding];
|
||||||
}
|
}
|
||||||
|
|
||||||
if (data) {
|
if (data) {
|
||||||
[formData appendPartWithFormData:data name:[component.key description]];
|
[formData appendPartWithFormData:data name:[pair.field description]];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue