diff --git a/README.md b/README.md index a05c7d8..ff8d239 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,9 @@ Adds a Sinatra-inspired routing API on top of [CocoaHTTPServer](https://github.c Supports iOS 4+ and OS X 10.7+ +###Changes from trunk: +- RouteRequest has new method: valueForFormField: This method is used to retrieve values from a submitted form. + ## Installation 1. Add [CocoaHTTPServer](https://github.com/robbiehanson/CocoaHTTPServer) to your project diff --git a/Source/RouteRequest.h b/Source/RouteRequest.h index 0219add..91c6447 100644 --- a/Source/RouteRequest.h +++ b/Source/RouteRequest.h @@ -12,5 +12,5 @@ - (NSString *)method; - (NSURL *)url; - (NSData *)body; - +- (NSString *)valueForFormField:(NSString*)field; @end diff --git a/Source/RouteRequest.m b/Source/RouteRequest.m index 7bf9505..a5d03d2 100644 --- a/Source/RouteRequest.m +++ b/Source/RouteRequest.m @@ -1,6 +1,12 @@ #import "RouteRequest.h" #import "HTTPMessage.h" +@interface RouteRequest() + +@property (strong)NSArray *parameters; + +@end + @implementation RouteRequest { HTTPMessage *message; } @@ -11,6 +17,7 @@ - (id)initWithHTTPMessage:(HTTPMessage *)msg parameters:(NSDictionary *)paramete if (self = [super init]) { params = parameters; message = msg; + [self parseBody]; } return self; } @@ -44,4 +51,39 @@ - (NSString *)description { return [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding]; } +- (NSString *)valueForFormField:(NSString*)field { + for (NSDictionary *dict in self.parameters) { + NSString *name = dict[@"name"]; + if ([name isEqualToString:field]) { + return dict[@"value"]; + } + } + + return nil; +} + +-(void) parseBody { + NSString *body = [[NSString alloc] initWithData:[self body] encoding:NSASCIIStringEncoding]; + if ([[self body] length] == 0) { + return; + } + + NSArray *rawParameters = [body componentsSeparatedByString:@"&"]; + NSMutableArray *parameters = [NSMutableArray array]; + for (NSString* parameter in rawParameters) { + NSArray *parameterParts = [parameter componentsSeparatedByString:@"="]; + NSMutableDictionary *dict = [NSMutableDictionary dictionary]; + dict[@"name"] = parameterParts[0]; + dict[@"value"] = [self decodeFromPercentEscapedString:parameterParts[1]]; + [parameters addObject:dict]; + } + + self.parameters = [NSArray arrayWithArray:parameters]; +} + +- (NSString *)decodeFromPercentEscapedString:(NSString *) encodedSring { + return (__bridge NSString *) + CFURLCreateStringByReplacingPercentEscapesUsingEncoding( NULL, (__bridge CFStringRef)encodedSring, CFSTR(""), kCFStringEncodingUTF8); +} + @end