Overhaul RKParser API's for clarity and simplicity:

* Adds support for NSJSONSerialization. closes #476
* Renames RKParser to RKSerialization
* Renames RKParserRegistry to RKMIMETypeSerialization
* Rework serialization implementations API's to use class methods
* Fold together string and regular expression matching for MIME Type registrations
* Port serialization implementations to working off of NSData instead of NSString. refs #762
* Migrate JSONKit to being an optional component. See https://github.com/RestKit/RKJSONKitSerialization
This commit is contained in:
Blake Watters
2012-09-04 13:07:31 -04:00
parent a74b8717dc
commit 10377d0a70
27 changed files with 450 additions and 549 deletions

View File

@@ -98,7 +98,7 @@
[mapping mapAttributes:@"boolString", nil];
TestMappable *object = [[[TestMappable alloc] init] autorelease];
id<RKParser> parser = [[RKParserRegistry sharedRegistry] parserForMIMEType:@"application/json"];
id<RKSerialization> parser = [[RKParserRegistry sharedRegistry] parserForMIMEType:@"application/json"];
id data = [parser objectFromString:@"{\"boolString\":true}" error:nil];
RKMappingOperation *operation = [[RKMappingOperation alloc] initWithSourceObject:data destinationObject:object mapping:mapping];
@@ -114,7 +114,7 @@
[mapping mapAttributes:@"boolNumber", nil];
TestMappable *object = [[[TestMappable alloc] init] autorelease];
id<RKParser> parser = [[RKParserRegistry sharedRegistry] parserForMIMEType:@"application/json"];
id<RKSerialization> parser = [[RKParserRegistry sharedRegistry] parserForMIMEType:@"application/json"];
id data = [parser objectFromString:@"{\"boolNumber\":true}" error:nil];
RKMappingOperation *operation = [[RKMappingOperation alloc] initWithSourceObject:data destinationObject:object mapping:mapping];
@@ -130,7 +130,7 @@
[mapping mapAttributes:@"boolNumber", nil];
TestMappable *object = [[[TestMappable alloc] init] autorelease];
id<RKParser> parser = [[RKParserRegistry sharedRegistry] parserForMIMEType:@"application/json"];
id<RKSerialization> parser = [[RKParserRegistry sharedRegistry] parserForMIMEType:@"application/json"];
id data = [parser objectFromString:@"{\"boolNumber\":false}" error:nil];
RKMappingOperation *operation = [[RKMappingOperation alloc] initWithSourceObject:data destinationObject:object mapping:mapping];
@@ -146,7 +146,7 @@
[mapping mapKeyPath:@"number" toAttribute:@"boolString"];
TestMappable *object = [[[TestMappable alloc] init] autorelease];
id<RKParser> parser = [[RKParserRegistry sharedRegistry] parserForMIMEType:@"application/json"];
id<RKSerialization> parser = [[RKParserRegistry sharedRegistry] parserForMIMEType:@"application/json"];
id data = [parser objectFromString:@"{\"number\":123}" error:nil];
RKMappingOperation *operation = [[RKMappingOperation alloc] initWithSourceObject:data destinationObject:object mapping:mapping];
@@ -162,7 +162,7 @@
[mapping mapKeyPath:@"numbers" toAttribute:@"orderedSet"];
TestMappable *object = [[[TestMappable alloc] init] autorelease];
id<RKParser> parser = [[RKParserRegistry sharedRegistry] parserForMIMEType:@"application/json"];
id<RKSerialization> parser = [[RKParserRegistry sharedRegistry] parserForMIMEType:@"application/json"];
id data = [parser objectFromString:@"{\"numbers\":[1, 2, 3]}" error:nil];
RKMappingOperation *operation = [[RKMappingOperation alloc] initWithSourceObject:data destinationObject:object mapping:mapping];

View File

@@ -42,7 +42,7 @@
{
RKParserRegistry *registry = [[RKParserRegistry new] autorelease];
[registry setParserClass:[RKJSONParserJSONKit class] forMIMEType:RKMIMETypeJSON];
id<RKParser> parser = [registry parserForMIMEType:RKMIMETypeJSON];
id<RKSerialization> parser = [registry parserForMIMEType:RKMIMETypeJSON];
assertThat(parser, is(instanceOf([RKJSONParserJSONKit class])));
}
@@ -50,7 +50,7 @@
{
RKParserRegistry *registry = [[RKParserRegistry new] autorelease];
[registry autoconfigure];
id<RKParser> parser = [registry parserForMIMEType:RKMIMETypeJSON];
id<RKSerialization> parser = [registry parserForMIMEType:RKMIMETypeJSON];
assertThat(parser, is(instanceOf([RKJSONParserJSONKit class])));
parser = [registry parserForMIMEType:RKMIMETypeXML];
assertThat(parser, is(instanceOf([RKXMLParserXMLReader class])));
@@ -60,7 +60,7 @@
{
RKParserRegistry *registry = [[RKParserRegistry new] autorelease];
[registry setParserClass:[RKJSONParserJSONKit class] forMIMEType:RKMIMETypeJSON];
id<RKParser> parser = [registry parserForMIMEType:RKMIMETypeJSON];
id<RKSerialization> parser = [registry parserForMIMEType:RKMIMETypeJSON];
assertThat(parser, is(instanceOf([RKJSONParserJSONKit class])));
}
@@ -70,7 +70,7 @@
NSError *error = nil;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"application/xml\\+\\w+" options:0 error:&error];
[registry setParserClass:[RKJSONParserJSONKit class] forMIMETypeRegularExpression:regex];
id<RKParser> parser = [registry parserForMIMEType:@"application/xml+whatever"];
id<RKSerialization> parser = [registry parserForMIMEType:@"application/xml+whatever"];
assertThat(parser, is(instanceOf([RKJSONParserJSONKit class])));
}
@@ -83,11 +83,11 @@
[registry setParserClass:[RKXMLParserXMLReader class] forMIMEType:@"application/xml+whatever"];
// Exact match
id<RKParser> exactParser = [registry parserForMIMEType:@"application/xml+whatever"];
id<RKSerialization> exactParser = [registry parserForMIMEType:@"application/xml+whatever"];
assertThat(exactParser, is(instanceOf([RKXMLParserXMLReader class])));
// Fallback to regex
id<RKParser> regexParser = [registry parserForMIMEType:@"application/xml+different"];
id<RKSerialization> regexParser = [registry parserForMIMEType:@"application/xml+different"];
assertThat(regexParser, is(instanceOf([RKJSONParserJSONKit class])));
}