171 lines
4.6 KiB
Objective-C
171 lines
4.6 KiB
Objective-C
//
|
|
// MPURLParameter.m
|
|
// MPOAuthConnection
|
|
//
|
|
// Created by Karl Adam on 08.12.05.
|
|
// Copyright 2008 matrixPointer. All rights reserved.
|
|
//
|
|
|
|
#import "MPURLRequestParameter.h"
|
|
#import "NSString+URLEscapingAdditions.h"
|
|
|
|
@implementation MPURLRequestParameter
|
|
|
|
+ (NSArray *)parametersFromString:(NSString *)inString {
|
|
NSMutableArray *foundParameters = [NSMutableArray arrayWithCapacity:10];
|
|
NSScanner *parameterScanner = [[NSScanner alloc] initWithString:inString];
|
|
NSString *thisName = nil;
|
|
NSString *thisValue = nil;
|
|
MPURLRequestParameter *currentParameter = nil;
|
|
|
|
while (![parameterScanner isAtEnd]) {
|
|
thisName = nil;
|
|
thisValue = nil;
|
|
|
|
[parameterScanner scanUpToString:@"=" intoString:&thisName];
|
|
[parameterScanner scanString:@"=" intoString:NULL];
|
|
[parameterScanner scanUpToString:@"&" intoString:&thisValue];
|
|
[parameterScanner scanString:@"&" intoString:NULL];
|
|
|
|
currentParameter = [[MPURLRequestParameter alloc] init];
|
|
currentParameter.name = thisName;
|
|
currentParameter.value = [thisValue stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
|
|
|
|
[foundParameters addObject:currentParameter];
|
|
|
|
[currentParameter release];
|
|
}
|
|
|
|
[parameterScanner release];
|
|
|
|
return foundParameters;
|
|
}
|
|
|
|
+ (NSArray *)parametersFromDictionary:(NSDictionary *)inDictionary {
|
|
NSMutableArray *parameterArray = [[NSMutableArray alloc] init];
|
|
MPURLRequestParameter *aURLParameter = nil;
|
|
|
|
NSArray *keys = [inDictionary allKeys];
|
|
for (int i=0; i<[keys count]; i++) {
|
|
aURLParameter = [[MPURLRequestParameter alloc] init];
|
|
aURLParameter.name = [keys objectAtIndex:i];
|
|
aURLParameter.value = [inDictionary objectForKey:[keys objectAtIndex:i]];
|
|
|
|
[parameterArray addObject:aURLParameter];
|
|
[aURLParameter release];
|
|
}
|
|
|
|
return [parameterArray autorelease];
|
|
}
|
|
|
|
+ (NSDictionary *)parameterDictionaryFromString:(NSString *)inString {
|
|
NSMutableDictionary *foundParameters = [NSMutableDictionary dictionaryWithCapacity:10];
|
|
if (inString) {
|
|
NSScanner *parameterScanner = [[NSScanner alloc] initWithString:inString];
|
|
NSString *thisName = nil;
|
|
NSString *thisValue = nil;
|
|
|
|
while (![parameterScanner isAtEnd]) {
|
|
thisName = nil;
|
|
thisValue = nil;
|
|
|
|
[parameterScanner scanUpToString:@"=" intoString:&thisName];
|
|
[parameterScanner scanString:@"=" intoString:NULL];
|
|
[parameterScanner scanUpToString:@"&" intoString:&thisValue];
|
|
[parameterScanner scanString:@"&" intoString:NULL];
|
|
|
|
[foundParameters setObject:[thisValue stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding] forKey:thisName];
|
|
}
|
|
|
|
[parameterScanner release];
|
|
}
|
|
return foundParameters;
|
|
}
|
|
|
|
+ (NSString *)parameterStringForParameters:(NSArray *)inParameters {
|
|
NSMutableString *queryString = [[NSMutableString alloc] init];
|
|
int i = 0;
|
|
int parameterCount = [inParameters count];
|
|
MPURLRequestParameter *aParameter = nil;
|
|
|
|
for (; i < parameterCount; i++) {
|
|
aParameter = [inParameters objectAtIndex:i];
|
|
[queryString appendString:[aParameter URLEncodedParameterString]];
|
|
|
|
if (i < parameterCount - 1) {
|
|
[queryString appendString:@"&"];
|
|
}
|
|
}
|
|
|
|
return [queryString autorelease];
|
|
}
|
|
|
|
+ (NSString *)parameterStringForDictionary:(NSDictionary *)inParameterDictionary {
|
|
NSArray *parameters = [self parametersFromDictionary:inParameterDictionary];
|
|
NSString *queryString = [self parameterStringForParameters:parameters];
|
|
|
|
return queryString;
|
|
}
|
|
|
|
#pragma mark -
|
|
|
|
- (id)init {
|
|
if (self = [super init]) {
|
|
|
|
}
|
|
return self;
|
|
}
|
|
|
|
- (id)initWithName:(NSString *)inName andValue:(NSString *)inValue {
|
|
if (self = [super init]) {
|
|
name = [inName copy];
|
|
value = [inValue copy];
|
|
}
|
|
return self;
|
|
}
|
|
|
|
- (oneway void)dealloc {
|
|
[name release];
|
|
[value release];
|
|
[super dealloc];
|
|
}
|
|
|
|
- (void)setName:(NSString *)theName {
|
|
[name release];
|
|
name = [theName copy];
|
|
}
|
|
- (NSString *)name {
|
|
return name;
|
|
}
|
|
- (void)setValue:(NSString *)theValue {
|
|
[value release];
|
|
value = [theValue copy];
|
|
}
|
|
- (NSString *)value {
|
|
return value;
|
|
}
|
|
|
|
#pragma mark -
|
|
|
|
- (NSString *)URLEncodedParameterString {
|
|
return [NSString stringWithFormat:@"%@=%@", [name stringByAddingURIPercentEscapesUsingEncoding:NSUTF8StringEncoding], value ? [value stringByAddingURIPercentEscapesUsingEncoding:NSUTF8StringEncoding] : @""];
|
|
}
|
|
|
|
#pragma mark -
|
|
|
|
- (NSComparisonResult)compare:(id)inObject {
|
|
NSComparisonResult result = [name compare:[(MPURLRequestParameter *)inObject name]];
|
|
|
|
if (result == NSOrderedSame) {
|
|
result = [value compare:[(MPURLRequestParameter *)inObject value]];
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
- (NSString *)description {
|
|
return [NSString stringWithFormat:@"<%@: %p %@>", NSStringFromClass([self class]), self, [self URLEncodedParameterString]];
|
|
}
|
|
|
|
@end
|