Showing
11 changed files
with
77 additions
and
263 deletions
Classes/ASICloudFilesAccount.h
deleted
100644 → 0
Classes/ASICloudFilesAccount.m
deleted
100644 → 0
| @@ -24,19 +24,17 @@ | @@ -24,19 +24,17 @@ | ||
| 24 | @property (nonatomic, retain) ASICloudFilesContainer *currentObject; | 24 | @property (nonatomic, retain) ASICloudFilesContainer *currentObject; |
| 25 | @property (nonatomic, retain) ASICloudFilesContainerXMLParserDelegate *xmlParserDelegate; | 25 | @property (nonatomic, retain) ASICloudFilesContainerXMLParserDelegate *xmlParserDelegate; |
| 26 | 26 | ||
| 27 | - | ||
| 28 | -#pragma mark Constructors | ||
| 29 | - | ||
| 30 | // HEAD /<api version>/<account> | 27 | // HEAD /<api version>/<account> |
| 31 | // HEAD operations against an account are performed to retrieve the number of Containers and the total bytes stored in Cloud Files for the account. This information is returned in two custom headers, X-Account-Container-Count and X-Account-Bytes-Used. | 28 | // HEAD operations against an account are performed to retrieve the number of Containers and the total bytes stored in Cloud Files for the account. This information is returned in two custom headers, X-Account-Container-Count and X-Account-Bytes-Used. |
| 32 | + (id)accountInfoRequest; | 29 | + (id)accountInfoRequest; |
| 30 | +- (NSUInteger)containerCount; | ||
| 31 | +- (NSUInteger)bytesUsed; | ||
| 33 | 32 | ||
| 34 | // GET /<api version>/<account>/<container> | 33 | // GET /<api version>/<account>/<container> |
| 35 | // Create a request to list all containers | 34 | // Create a request to list all containers |
| 36 | + (id)listRequest; | 35 | + (id)listRequest; |
| 37 | -+ (id)listRequestWithLimit:(NSUInteger)limit; | ||
| 38 | -+ (id)listRequestWithMarker:(NSString *)marker; | ||
| 39 | + (id)listRequestWithLimit:(NSUInteger)limit marker:(NSString *)marker; | 36 | + (id)listRequestWithLimit:(NSUInteger)limit marker:(NSString *)marker; |
| 37 | +- (NSArray *)containers; | ||
| 40 | 38 | ||
| 41 | // PUT /<api version>/<account>/<container> | 39 | // PUT /<api version>/<account>/<container> |
| 42 | + (id)createContainerRequest:(NSString *)containerName; | 40 | + (id)createContainerRequest:(NSString *)containerName; |
| @@ -44,8 +42,4 @@ | @@ -44,8 +42,4 @@ | ||
| 44 | // DELETE /<api version>/<account>/<container> | 42 | // DELETE /<api version>/<account>/<container> |
| 45 | + (id)deleteContainerRequest:(NSString *)containerName; | 43 | + (id)deleteContainerRequest:(NSString *)containerName; |
| 46 | 44 | ||
| 47 | -- (NSUInteger)containerCount; | ||
| 48 | -- (NSUInteger)bytesUsed; | ||
| 49 | -- (NSArray *)containers; | ||
| 50 | - | ||
| 51 | @end | 45 | @end |
| @@ -16,20 +16,17 @@ | @@ -16,20 +16,17 @@ | ||
| 16 | @synthesize currentElement, currentContent, currentObject; | 16 | @synthesize currentElement, currentContent, currentObject; |
| 17 | @synthesize xmlParserDelegate; | 17 | @synthesize xmlParserDelegate; |
| 18 | 18 | ||
| 19 | -//ASIHTTPRequest *request = [[ASIHTTPRequest alloc] initWithURL:[NSURL URLWithString:rackspaceCloudAuthURL]]; | ||
| 20 | -//NSMutableDictionary *headers = [[NSMutableDictionary alloc] initWithCapacity:2]; | ||
| 21 | -//[headers setObject:username forKey:@"X-Auth-User"]; | ||
| 22 | -//[headers setObject:apiKey forKey:@"X-Auth-Key"]; | ||
| 23 | -//[request setRequestHeaders:headers]; | ||
| 24 | -//[headers release]; | ||
| 25 | -//return request; | ||
| 26 | - | ||
| 27 | #pragma mark - | 19 | #pragma mark - |
| 28 | #pragma mark Constructors | 20 | #pragma mark Constructors |
| 29 | 21 | ||
| 30 | + (id)storageRequestWithMethod:(NSString *)method containerName:(NSString *)containerName queryString:(NSString *)queryString { | 22 | + (id)storageRequestWithMethod:(NSString *)method containerName:(NSString *)containerName queryString:(NSString *)queryString { |
| 31 | - NSString *urlString = [NSString stringWithFormat:@"%@/%@%@", [ASICloudFilesRequest storageURL], containerName, queryString]; | 23 | + NSString *urlString; |
| 32 | - //NSLog(@"container request url: %@", urlString); | 24 | + if (containerName == nil) { |
| 25 | + urlString = [NSString stringWithFormat:@"%@%@", [ASICloudFilesRequest storageURL], queryString]; | ||
| 26 | + } else { | ||
| 27 | + urlString = [NSString stringWithFormat:@"%@/%@%@", [ASICloudFilesRequest storageURL], containerName, queryString]; | ||
| 28 | + } | ||
| 29 | + | ||
| 33 | ASICloudFilesContainerRequest *request = [[ASICloudFilesContainerRequest alloc] initWithURL:[NSURL URLWithString:urlString]]; | 30 | ASICloudFilesContainerRequest *request = [[ASICloudFilesContainerRequest alloc] initWithURL:[NSURL URLWithString:urlString]]; |
| 34 | [request setRequestMethod:method]; | 31 | [request setRequestMethod:method]; |
| 35 | [request addRequestHeader:@"X-Auth-Token" value:[ASICloudFilesRequest authToken]]; | 32 | [request addRequestHeader:@"X-Auth-Token" value:[ASICloudFilesRequest authToken]]; |
| @@ -37,19 +34,16 @@ | @@ -37,19 +34,16 @@ | ||
| 37 | } | 34 | } |
| 38 | 35 | ||
| 39 | + (id)storageRequestWithMethod:(NSString *)method queryString:(NSString *)queryString { | 36 | + (id)storageRequestWithMethod:(NSString *)method queryString:(NSString *)queryString { |
| 40 | - //ASICloudFilesRequest *request = [ASICloudFilesRequest storageRequest]; | 37 | + return [ASICloudFilesContainerRequest storageRequestWithMethod:method containerName:nil queryString:queryString]; |
| 41 | - NSString *urlString = [NSString stringWithFormat:@"%@%@", [ASICloudFilesRequest storageURL], queryString]; | ||
| 42 | - //NSLog(@"container request url: %@", urlString); | ||
| 43 | - ASICloudFilesContainerRequest *request = [[ASICloudFilesContainerRequest alloc] initWithURL:[NSURL URLWithString:urlString]]; | ||
| 44 | - [request setRequestMethod:method]; | ||
| 45 | - [request addRequestHeader:@"X-Auth-Token" value:[ASICloudFilesRequest authToken]]; | ||
| 46 | - return request; | ||
| 47 | } | 38 | } |
| 48 | 39 | ||
| 49 | + (id)storageRequestWithMethod:(NSString *)method { | 40 | + (id)storageRequestWithMethod:(NSString *)method { |
| 50 | return [ASICloudFilesContainerRequest storageRequestWithMethod:method queryString:@""]; | 41 | return [ASICloudFilesContainerRequest storageRequestWithMethod:method queryString:@""]; |
| 51 | } | 42 | } |
| 52 | 43 | ||
| 44 | +#pragma mark - | ||
| 45 | +#pragma mark HEAD - Retrieve Container Count and Total Bytes Used | ||
| 46 | + | ||
| 53 | // HEAD /<api version>/<account> | 47 | // HEAD /<api version>/<account> |
| 54 | // HEAD operations against an account are performed to retrieve the number of Containers and the total bytes stored in Cloud Files for the account. This information is returned in two custom headers, X-Account-Container-Count and X-Account-Bytes-Used. | 48 | // HEAD operations against an account are performed to retrieve the number of Containers and the total bytes stored in Cloud Files for the account. This information is returned in two custom headers, X-Account-Container-Count and X-Account-Bytes-Used. |
| 55 | + (id)accountInfoRequest { | 49 | + (id)accountInfoRequest { |
| @@ -57,20 +51,28 @@ | @@ -57,20 +51,28 @@ | ||
| 57 | return request; | 51 | return request; |
| 58 | } | 52 | } |
| 59 | 53 | ||
| 60 | -+ (id)listRequestWithLimit:(NSUInteger)limit marker:(NSString *)marker { | 54 | +- (NSUInteger)containerCount { |
| 61 | - NSString *queryString = [NSString stringWithFormat:@"?format=xml&limit=%i&marker=%@", limit, [marker stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]; | 55 | + return [[[self responseHeaders] objectForKey:@"X-Account-Container-Count"] intValue]; |
| 62 | - ASICloudFilesContainerRequest *request = [ASICloudFilesContainerRequest storageRequestWithMethod:@"GET" queryString:queryString]; | ||
| 63 | - return request; | ||
| 64 | } | 56 | } |
| 65 | 57 | ||
| 66 | -+ (id)listRequestWithLimit:(NSUInteger)limit { | 58 | +- (NSUInteger)bytesUsed { |
| 67 | - NSString *queryString = [NSString stringWithFormat:@"?format=xml&limit=%i", limit]; | 59 | + return [[[self responseHeaders] objectForKey:@"X-Account-Bytes-Used"] intValue]; |
| 68 | - ASICloudFilesContainerRequest *request = [ASICloudFilesContainerRequest storageRequestWithMethod:@"GET" queryString:queryString]; | ||
| 69 | - return request; | ||
| 70 | } | 60 | } |
| 71 | 61 | ||
| 72 | -+ (id)listRequestWithMarker:(NSString *)marker { | 62 | +#pragma mark - |
| 73 | - NSString *queryString = [NSString stringWithFormat:@"?format=xml&marker=%@", [marker stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]; | 63 | +#pragma mark GET - Retrieve Container List |
| 64 | + | ||
| 65 | ++ (id)listRequestWithLimit:(NSUInteger)limit marker:(NSString *)marker { | ||
| 66 | + NSString *queryString = @"?format=xml"; | ||
| 67 | + | ||
| 68 | + if (limit > 0) { | ||
| 69 | + queryString = [queryString stringByAppendingString:[NSString stringWithFormat:@"&limit=%i", limit]]; | ||
| 70 | + } | ||
| 71 | + | ||
| 72 | + if (marker != nil) { | ||
| 73 | + queryString = [queryString stringByAppendingString:[NSString stringWithFormat:@"&marker=%@", marker]]; | ||
| 74 | + } | ||
| 75 | + | ||
| 74 | ASICloudFilesContainerRequest *request = [ASICloudFilesContainerRequest storageRequestWithMethod:@"GET" queryString:queryString]; | 76 | ASICloudFilesContainerRequest *request = [ASICloudFilesContainerRequest storageRequestWithMethod:@"GET" queryString:queryString]; |
| 75 | return request; | 77 | return request; |
| 76 | } | 78 | } |
| @@ -83,40 +85,11 @@ | @@ -83,40 +85,11 @@ | ||
| 83 | return request; | 85 | return request; |
| 84 | } | 86 | } |
| 85 | 87 | ||
| 86 | -// PUT /<api version>/<account>/<container> | ||
| 87 | -+ (id)createContainerRequest:(NSString *)containerName { | ||
| 88 | - ASICloudFilesContainerRequest *request = [ASICloudFilesContainerRequest storageRequestWithMethod:@"PUT" containerName:containerName queryString:@""]; | ||
| 89 | - return request; | ||
| 90 | -} | ||
| 91 | - | ||
| 92 | -// DELETE /<api version>/<account>/<container> | ||
| 93 | -+ (id)deleteContainerRequest:(NSString *)containerName { | ||
| 94 | - ASICloudFilesContainerRequest *request = [ASICloudFilesContainerRequest storageRequestWithMethod:@"DELETE" containerName:containerName queryString:@""]; | ||
| 95 | - return request; | ||
| 96 | -} | ||
| 97 | - | ||
| 98 | -#pragma mark - | ||
| 99 | -#pragma mark Response Data | ||
| 100 | - | ||
| 101 | -#pragma mark Account Info | ||
| 102 | - | ||
| 103 | -- (NSUInteger)containerCount { | ||
| 104 | - return [[[self responseHeaders] objectForKey:@"X-Account-Container-Count"] intValue]; | ||
| 105 | -} | ||
| 106 | - | ||
| 107 | -- (NSUInteger)bytesUsed { | ||
| 108 | - return [[[self responseHeaders] objectForKey:@"X-Account-Bytes-Used"] intValue]; | ||
| 109 | -} | ||
| 110 | - | ||
| 111 | -#pragma mark Container List | ||
| 112 | - | ||
| 113 | - (NSArray *)containers { | 88 | - (NSArray *)containers { |
| 114 | if (xmlParserDelegate.containerObjects) { | 89 | if (xmlParserDelegate.containerObjects) { |
| 115 | return xmlParserDelegate.containerObjects; | 90 | return xmlParserDelegate.containerObjects; |
| 116 | } | 91 | } |
| 117 | 92 | ||
| 118 | - //NSLog(@"list response data: %@", [self responseString]); | ||
| 119 | - | ||
| 120 | NSXMLParser *parser = [[[NSXMLParser alloc] initWithData:[self responseData]] autorelease]; | 93 | NSXMLParser *parser = [[[NSXMLParser alloc] initWithData:[self responseData]] autorelease]; |
| 121 | if (xmlParserDelegate == nil) { | 94 | if (xmlParserDelegate == nil) { |
| 122 | xmlParserDelegate = [[ASICloudFilesContainerXMLParserDelegate alloc] init]; | 95 | xmlParserDelegate = [[ASICloudFilesContainerXMLParserDelegate alloc] init]; |
| @@ -132,6 +105,24 @@ | @@ -132,6 +105,24 @@ | ||
| 132 | } | 105 | } |
| 133 | 106 | ||
| 134 | #pragma mark - | 107 | #pragma mark - |
| 108 | +#pragma mark PUT - Create Container | ||
| 109 | + | ||
| 110 | +// PUT /<api version>/<account>/<container> | ||
| 111 | ++ (id)createContainerRequest:(NSString *)containerName { | ||
| 112 | + ASICloudFilesContainerRequest *request = [ASICloudFilesContainerRequest storageRequestWithMethod:@"PUT" containerName:containerName queryString:@""]; | ||
| 113 | + return request; | ||
| 114 | +} | ||
| 115 | + | ||
| 116 | +#pragma mark - | ||
| 117 | +#pragma mark DELETE - Delete Container | ||
| 118 | + | ||
| 119 | +// DELETE /<api version>/<account>/<container> | ||
| 120 | ++ (id)deleteContainerRequest:(NSString *)containerName { | ||
| 121 | + ASICloudFilesContainerRequest *request = [ASICloudFilesContainerRequest storageRequestWithMethod:@"DELETE" containerName:containerName queryString:@""]; | ||
| 122 | + return request; | ||
| 123 | +} | ||
| 124 | + | ||
| 125 | +#pragma mark - | ||
| 135 | #pragma mark Memory Management | 126 | #pragma mark Memory Management |
| 136 | 127 | ||
| 137 | - (void)dealloc { | 128 | - (void)dealloc { |
| @@ -25,7 +25,6 @@ | @@ -25,7 +25,6 @@ | ||
| 25 | 25 | ||
| 26 | @property (nonatomic, retain) NSString *accountName; | 26 | @property (nonatomic, retain) NSString *accountName; |
| 27 | @property (nonatomic, retain) NSString *containerName; | 27 | @property (nonatomic, retain) NSString *containerName; |
| 28 | - | ||
| 29 | @property (nonatomic, retain) NSString *currentElement; | 28 | @property (nonatomic, retain) NSString *currentElement; |
| 30 | @property (nonatomic, retain) NSString *currentContent; | 29 | @property (nonatomic, retain) NSString *currentContent; |
| 31 | @property (nonatomic, retain) ASICloudFilesObject *currentObject; | 30 | @property (nonatomic, retain) ASICloudFilesObject *currentObject; |
| @@ -40,42 +39,13 @@ | @@ -40,42 +39,13 @@ | ||
| 40 | // HEAD /<api version>/<account>/<container>/<object> | 39 | // HEAD /<api version>/<account>/<container>/<object> |
| 41 | // to get metadata | 40 | // to get metadata |
| 42 | + (id)objectInfoRequest:(NSString *)containerName objectPath:(NSString *)objectPath; | 41 | + (id)objectInfoRequest:(NSString *)containerName objectPath:(NSString *)objectPath; |
| 43 | - | ||
| 44 | - | ||
| 45 | -// GET | ||
| 46 | - (NSArray *)objects; | 42 | - (NSArray *)objects; |
| 47 | 43 | ||
| 48 | -// ASICloudFilesObjectListRequest | ||
| 49 | -// GET on container (for objects) | ||
| 50 | -// limit | ||
| 51 | -// marker | ||
| 52 | -// prefix - For a string value X, causes the results to be limited to Object names beginning with the substring X. | ||
| 53 | -// path - Now issuing a GET request against the Container name coupled with the “path” query parameter of the directory to list can traverse these “directories”. GET /v1/AccountString/backups?path=photos/animals | ||
| 54 | - | ||
| 55 | -// every possible combination of object list request | ||
| 56 | -// TODO: consider an options dictionary argument instead of so many method signatures | ||
| 57 | + (id)listRequestWithContainer:(NSString *)containerName; | 44 | + (id)listRequestWithContainer:(NSString *)containerName; |
| 58 | -+ (id)listRequestWithContainer:(NSString *)containerName limit:(NSUInteger)limit; | ||
| 59 | -+ (id)listRequestWithContainer:(NSString *)containerName limit:(NSUInteger)limit marker:(NSString *)marker; | ||
| 60 | -+ (id)listRequestWithContainer:(NSString *)containerName limit:(NSUInteger)limit marker:(NSString *)marker prefix:(NSString *)prefix; | ||
| 61 | -+ (id)listRequestWithContainer:(NSString *)containerName limit:(NSUInteger)limit marker:(NSString *)marker path:(NSString *)path; | ||
| 62 | -+ (id)listRequestWithContainer:(NSString *)containerName limit:(NSUInteger)limit prefix:(NSString *)prefix; | ||
| 63 | -+ (id)listRequestWithContainer:(NSString *)containerName limit:(NSUInteger)limit prefix:(NSString *)prefix path:(NSString *)path; | ||
| 64 | -+ (id)listRequestWithContainer:(NSString *)containerName limit:(NSUInteger)limit path:(NSString *)path; | ||
| 65 | -+ (id)listRequestWithContainer:(NSString *)containerName marker:(NSString *)marker; | ||
| 66 | -+ (id)listRequestWithContainer:(NSString *)containerName marker:(NSString *)marker prefix:(NSString *)prefix; | ||
| 67 | -+ (id)listRequestWithContainer:(NSString *)containerName marker:(NSString *)marker path:(NSString *)path; | ||
| 68 | -+ (id)listRequestWithContainer:(NSString *)containerName marker:(NSString *)marker prefix:(NSString *)prefix path:(NSString *)path; | ||
| 69 | -+ (id)listRequestWithContainer:(NSString *)containerName prefix:(NSString *)prefix; | ||
| 70 | -+ (id)listRequestWithContainer:(NSString *)containerName prefix:(NSString *)prefix path:(NSString *)path; | ||
| 71 | -+ (id)listRequestWithContainer:(NSString *)containerName path:(NSString *)path; | ||
| 72 | + (id)listRequestWithContainer:(NSString *)containerName limit:(NSUInteger)limit marker:(NSString *)marker prefix:(NSString *)prefix path:(NSString *)path; | 45 | + (id)listRequestWithContainer:(NSString *)containerName limit:(NSUInteger)limit marker:(NSString *)marker prefix:(NSString *)prefix path:(NSString *)path; |
| 73 | 46 | ||
| 74 | -// TODO: GET object with data and metadata | ||
| 75 | // Conditional GET headers: If-Match • If-None-Match • If-Modified-Since • If-Unmodified-Since | 47 | // Conditional GET headers: If-Match • If-None-Match • If-Modified-Since • If-Unmodified-Since |
| 76 | // HTTP Range header: “Range: bytes=0-5” • “Range: bytes=-5” • “Range: bytes=32-“ | 48 | // HTTP Range header: “Range: bytes=0-5” • “Range: bytes=-5” • “Range: bytes=32-“ |
| 77 | -// TODO: return 'ETag' header from GET | ||
| 78 | -// TODO: maybe do chunked PUT | ||
| 79 | + (id)getObjectRequestWithContainer:(NSString *)containerName objectPath:(NSString *)objectPath; | 49 | + (id)getObjectRequestWithContainer:(NSString *)containerName objectPath:(NSString *)objectPath; |
| 80 | - (ASICloudFilesObject *)object; | 50 | - (ASICloudFilesObject *)object; |
| 81 | 51 |
| @@ -15,6 +15,9 @@ | @@ -15,6 +15,9 @@ | ||
| 15 | @synthesize currentElement, currentContent, currentObject; | 15 | @synthesize currentElement, currentContent, currentObject; |
| 16 | @synthesize accountName, containerName; | 16 | @synthesize accountName, containerName; |
| 17 | 17 | ||
| 18 | +#pragma mark - | ||
| 19 | +#pragma mark Constructors | ||
| 20 | + | ||
| 18 | + (id)storageRequestWithMethod:(NSString *)method containerName:(NSString *)containerName { | 21 | + (id)storageRequestWithMethod:(NSString *)method containerName:(NSString *)containerName { |
| 19 | NSString *urlString = [NSString stringWithFormat:@"%@/%@", [ASICloudFilesRequest storageURL], containerName]; | 22 | NSString *urlString = [NSString stringWithFormat:@"%@/%@", [ASICloudFilesRequest storageURL], containerName]; |
| 20 | //NSLog(@"object request url: %@", urlString); | 23 | //NSLog(@"object request url: %@", urlString); |
| @@ -46,7 +49,7 @@ | @@ -46,7 +49,7 @@ | ||
| 46 | } | 49 | } |
| 47 | 50 | ||
| 48 | #pragma mark - | 51 | #pragma mark - |
| 49 | -#pragma mark Container Info | 52 | +#pragma mark HEAD - Container Info |
| 50 | 53 | ||
| 51 | + (id)containerInfoRequest:(NSString *)containerName { | 54 | + (id)containerInfoRequest:(NSString *)containerName { |
| 52 | ASICloudFilesObjectRequest *request = [ASICloudFilesObjectRequest storageRequestWithMethod:@"HEAD" containerName:containerName]; | 55 | ASICloudFilesObjectRequest *request = [ASICloudFilesObjectRequest storageRequestWithMethod:@"HEAD" containerName:containerName]; |
| @@ -62,7 +65,7 @@ | @@ -62,7 +65,7 @@ | ||
| 62 | } | 65 | } |
| 63 | 66 | ||
| 64 | #pragma mark - | 67 | #pragma mark - |
| 65 | -#pragma mark Object Info | 68 | +#pragma mark HEAD - Object Info |
| 66 | 69 | ||
| 67 | + (id)objectInfoRequest:(NSString *)containerName objectPath:(NSString *)objectPath { | 70 | + (id)objectInfoRequest:(NSString *)containerName objectPath:(NSString *)objectPath { |
| 68 | ASICloudFilesObjectRequest *request = [ASICloudFilesObjectRequest storageRequestWithMethod:@"HEAD" containerName:containerName objectPath:objectPath]; | 71 | ASICloudFilesObjectRequest *request = [ASICloudFilesObjectRequest storageRequestWithMethod:@"HEAD" containerName:containerName objectPath:objectPath]; |
| @@ -70,7 +73,7 @@ | @@ -70,7 +73,7 @@ | ||
| 70 | } | 73 | } |
| 71 | 74 | ||
| 72 | #pragma mark - | 75 | #pragma mark - |
| 73 | -#pragma mark List Requests | 76 | +#pragma mark GET - List Objects |
| 74 | 77 | ||
| 75 | + (NSString *)queryStringWithContainer:(NSString *)container limit:(NSUInteger)limit marker:(NSString *)marker prefix:(NSString *)prefix path:(NSString *)path { | 78 | + (NSString *)queryStringWithContainer:(NSString *)container limit:(NSUInteger)limit marker:(NSString *)marker prefix:(NSString *)prefix path:(NSString *)path { |
| 76 | NSString *queryString = @"?format=xml"; | 79 | NSString *queryString = @"?format=xml"; |
| @@ -98,73 +101,12 @@ | @@ -98,73 +101,12 @@ | ||
| 98 | return [ASICloudFilesObjectRequest listRequestWithContainer:containerName limit:0 marker:nil prefix:nil path:nil]; | 101 | return [ASICloudFilesObjectRequest listRequestWithContainer:containerName limit:0 marker:nil prefix:nil path:nil]; |
| 99 | } | 102 | } |
| 100 | 103 | ||
| 101 | -+ (id)listRequestWithContainer:(NSString *)containerName limit:(NSUInteger)limit { | ||
| 102 | - return [ASICloudFilesObjectRequest listRequestWithContainer:containerName limit:limit marker:nil prefix:nil path:nil]; | ||
| 103 | -} | ||
| 104 | - | ||
| 105 | -+ (id)listRequestWithContainer:(NSString *)containerName limit:(NSUInteger)limit marker:(NSString *)marker { | ||
| 106 | - return [ASICloudFilesObjectRequest listRequestWithContainer:containerName limit:limit marker:marker prefix:nil path:nil]; | ||
| 107 | -} | ||
| 108 | - | ||
| 109 | -+ (id)listRequestWithContainer:(NSString *)containerName limit:(NSUInteger)limit marker:(NSString *)marker prefix:(NSString *)prefix { | ||
| 110 | - return [ASICloudFilesObjectRequest listRequestWithContainer:containerName limit:limit marker:marker prefix:prefix path:nil]; | ||
| 111 | -} | ||
| 112 | - | ||
| 113 | -+ (id)listRequestWithContainer:(NSString *)containerName limit:(NSUInteger)limit marker:(NSString *)marker path:(NSString *)path { | ||
| 114 | - return [ASICloudFilesObjectRequest listRequestWithContainer:containerName limit:limit marker:marker prefix:nil path:path]; | ||
| 115 | -} | ||
| 116 | - | ||
| 117 | -+ (id)listRequestWithContainer:(NSString *)containerName limit:(NSUInteger)limit prefix:(NSString *)prefix { | ||
| 118 | - return [ASICloudFilesObjectRequest listRequestWithContainer:containerName limit:limit marker:nil prefix:prefix path:nil]; | ||
| 119 | -} | ||
| 120 | - | ||
| 121 | -+ (id)listRequestWithContainer:(NSString *)containerName limit:(NSUInteger)limit prefix:(NSString *)prefix path:(NSString *)path { | ||
| 122 | - return [ASICloudFilesObjectRequest listRequestWithContainer:containerName limit:limit marker:nil prefix:prefix path:path]; | ||
| 123 | -} | ||
| 124 | - | ||
| 125 | -+ (id)listRequestWithContainer:(NSString *)containerName limit:(NSUInteger)limit path:(NSString *)path { | ||
| 126 | - return [ASICloudFilesObjectRequest listRequestWithContainer:containerName limit:limit marker:nil prefix:nil path:path]; | ||
| 127 | -} | ||
| 128 | - | ||
| 129 | -+ (id)listRequestWithContainer:(NSString *)containerName marker:(NSString *)marker { | ||
| 130 | - return [ASICloudFilesObjectRequest listRequestWithContainer:containerName limit:0 marker:marker prefix:nil path:nil]; | ||
| 131 | -} | ||
| 132 | - | ||
| 133 | -+ (id)listRequestWithContainer:(NSString *)containerName marker:(NSString *)marker prefix:(NSString *)prefix { | ||
| 134 | - return [ASICloudFilesObjectRequest listRequestWithContainer:containerName limit:0 marker:marker prefix:prefix path:nil]; | ||
| 135 | -} | ||
| 136 | - | ||
| 137 | -+ (id)listRequestWithContainer:(NSString *)containerName marker:(NSString *)marker path:(NSString *)path { | ||
| 138 | - return [ASICloudFilesObjectRequest listRequestWithContainer:containerName limit:0 marker:marker prefix:nil path:path]; | ||
| 139 | -} | ||
| 140 | - | ||
| 141 | -+ (id)listRequestWithContainer:(NSString *)containerName marker:(NSString *)marker prefix:(NSString *)prefix path:(NSString *)path { | ||
| 142 | - return [ASICloudFilesObjectRequest listRequestWithContainer:containerName limit:0 marker:marker prefix:prefix path:path]; | ||
| 143 | -} | ||
| 144 | - | ||
| 145 | -+ (id)listRequestWithContainer:(NSString *)containerName prefix:(NSString *)prefix { | ||
| 146 | - return [ASICloudFilesObjectRequest listRequestWithContainer:containerName limit:0 marker:nil prefix:prefix path:nil]; | ||
| 147 | -} | ||
| 148 | - | ||
| 149 | -+ (id)listRequestWithContainer:(NSString *)containerName prefix:(NSString *)prefix path:(NSString *)path { | ||
| 150 | - return [ASICloudFilesObjectRequest listRequestWithContainer:containerName limit:0 marker:nil prefix:prefix path:path]; | ||
| 151 | -} | ||
| 152 | - | ||
| 153 | -+ (id)listRequestWithContainer:(NSString *)containerName path:(NSString *)path { | ||
| 154 | - return [ASICloudFilesObjectRequest listRequestWithContainer:containerName limit:0 marker:nil prefix:nil path:path]; | ||
| 155 | -} | ||
| 156 | - | ||
| 157 | -#pragma mark - | ||
| 158 | -#pragma mark Object List | ||
| 159 | - | ||
| 160 | - (NSArray *)objects { | 104 | - (NSArray *)objects { |
| 161 | if (objects) { | 105 | if (objects) { |
| 162 | return objects; | 106 | return objects; |
| 163 | } | 107 | } |
| 164 | objects = [[[NSMutableArray alloc] init] autorelease]; | 108 | objects = [[[NSMutableArray alloc] init] autorelease]; |
| 165 | 109 | ||
| 166 | - //NSLog(@"object list response data: %@", [self responseString]); | ||
| 167 | - | ||
| 168 | NSXMLParser *parser = [[[NSXMLParser alloc] initWithData:[self responseData]] autorelease]; | 110 | NSXMLParser *parser = [[[NSXMLParser alloc] initWithData:[self responseData]] autorelease]; |
| 169 | [parser setDelegate:self]; | 111 | [parser setDelegate:self]; |
| 170 | [parser setShouldProcessNamespaces:NO]; | 112 | [parser setShouldProcessNamespaces:NO]; |
| @@ -175,7 +117,7 @@ | @@ -175,7 +117,7 @@ | ||
| 175 | } | 117 | } |
| 176 | 118 | ||
| 177 | #pragma mark - | 119 | #pragma mark - |
| 178 | -#pragma mark GET Object | 120 | +#pragma mark GET - Retrieve Object |
| 179 | 121 | ||
| 180 | + (id)getObjectRequestWithContainer:(NSString *)containerName objectPath:(NSString *)objectPath { | 122 | + (id)getObjectRequestWithContainer:(NSString *)containerName objectPath:(NSString *)objectPath { |
| 181 | return [ASICloudFilesObjectRequest storageRequestWithMethod:@"GET" containerName:containerName objectPath:objectPath]; | 123 | return [ASICloudFilesObjectRequest storageRequestWithMethod:@"GET" containerName:containerName objectPath:objectPath]; |
| @@ -213,7 +155,7 @@ | @@ -213,7 +155,7 @@ | ||
| 213 | } | 155 | } |
| 214 | 156 | ||
| 215 | #pragma mark - | 157 | #pragma mark - |
| 216 | -#pragma mark PUT Object | 158 | +#pragma mark PUT - Upload Object |
| 217 | 159 | ||
| 218 | + (id)putObjectRequestWithContainer:(NSString *)containerName object:(ASICloudFilesObject *)object { | 160 | + (id)putObjectRequestWithContainer:(NSString *)containerName object:(ASICloudFilesObject *)object { |
| 219 | return [self putObjectRequestWithContainer:containerName objectPath:object.name contentType:object.contentType objectData:object.data metadata:object.metadata etag:nil]; | 161 | return [self putObjectRequestWithContainer:containerName objectPath:object.name contentType:object.contentType objectData:object.data metadata:object.metadata etag:nil]; |
| @@ -221,8 +163,6 @@ | @@ -221,8 +163,6 @@ | ||
| 221 | 163 | ||
| 222 | + (id)putObjectRequestWithContainer:(NSString *)containerName objectPath:(NSString *)objectPath contentType:(NSString *)contentType objectData:(NSData *)objectData metadata:(NSDictionary *)metadata etag:(NSString *)etag { | 164 | + (id)putObjectRequestWithContainer:(NSString *)containerName objectPath:(NSString *)objectPath contentType:(NSString *)contentType objectData:(NSData *)objectData metadata:(NSDictionary *)metadata etag:(NSString *)etag { |
| 223 | 165 | ||
| 224 | - // TODO: etag? | ||
| 225 | - | ||
| 226 | ASICloudFilesObjectRequest *request = [ASICloudFilesObjectRequest storageRequestWithMethod:@"PUT" containerName:containerName objectPath:objectPath]; | 166 | ASICloudFilesObjectRequest *request = [ASICloudFilesObjectRequest storageRequestWithMethod:@"PUT" containerName:containerName objectPath:objectPath]; |
| 227 | [request addRequestHeader:@"Content-Type" value:contentType]; | 167 | [request addRequestHeader:@"Content-Type" value:contentType]; |
| 228 | [request addRequestHeader:@"Content-Length" value:[NSString stringWithFormat:@"%i", objectData.length]]; | 168 | [request addRequestHeader:@"Content-Length" value:[NSString stringWithFormat:@"%i", objectData.length]]; |
| @@ -242,7 +182,7 @@ | @@ -242,7 +182,7 @@ | ||
| 242 | } | 182 | } |
| 243 | 183 | ||
| 244 | #pragma mark - | 184 | #pragma mark - |
| 245 | -#pragma mark POST Object Metadata | 185 | +#pragma mark POST - Set Object Metadata |
| 246 | 186 | ||
| 247 | + (id)postObjectRequestWithContainer:(NSString *)containerName object:(ASICloudFilesObject *)object { | 187 | + (id)postObjectRequestWithContainer:(NSString *)containerName object:(ASICloudFilesObject *)object { |
| 248 | return [self postObjectRequestWithContainer:containerName objectPath:object.name metadata:object.metadata]; | 188 | return [self postObjectRequestWithContainer:containerName objectPath:object.name metadata:object.metadata]; |
| @@ -264,9 +204,8 @@ | @@ -264,9 +204,8 @@ | ||
| 264 | return request; | 204 | return request; |
| 265 | } | 205 | } |
| 266 | 206 | ||
| 267 | - | ||
| 268 | #pragma mark - | 207 | #pragma mark - |
| 269 | -#pragma mark Delete Object | 208 | +#pragma mark DELETE - Delete Object |
| 270 | 209 | ||
| 271 | + (id)deleteObjectRequestWithContainer:(NSString *)containerName objectPath:(NSString *)objectPath { | 210 | + (id)deleteObjectRequestWithContainer:(NSString *)containerName objectPath:(NSString *)objectPath { |
| 272 | ASICloudFilesObjectRequest *request = [ASICloudFilesObjectRequest storageRequestWithMethod:@"DELETE" containerName:containerName objectPath:objectPath]; | 211 | ASICloudFilesObjectRequest *request = [ASICloudFilesObjectRequest storageRequestWithMethod:@"DELETE" containerName:containerName objectPath:objectPath]; |
| @@ -276,19 +215,6 @@ | @@ -276,19 +215,6 @@ | ||
| 276 | #pragma mark - | 215 | #pragma mark - |
| 277 | #pragma mark XML Parser Delegate | 216 | #pragma mark XML Parser Delegate |
| 278 | 217 | ||
| 279 | -/* | ||
| 280 | -<container name="cf_service"> | ||
| 281 | - <object> | ||
| 282 | - <name>10-17-2009 9-23-54 PM.png</name> | ||
| 283 | - <hash>fdc7b0fedf8f304dd02c468567acb6f8</hash> | ||
| 284 | - <bytes>1621</bytes> | ||
| 285 | - <content_type>image/png</content_type> | ||
| 286 | - <last_modified>2009-11-04T19:46:20.192723</last_modified> | ||
| 287 | - </object> | ||
| 288 | - <object><name>5253_513598038815_56400223_30531988_4542339_n-59.jpg</name><hash>ec133b3f8cf33cd036b351a85a093009</hash><bytes>36825</bytes><content_type>image/jpeg</content_type><last_modified>2009-09-01T22:46:40.851463</last_modified></object> | ||
| 289 | - <object><name>7-eguas-59.jpg</name><hash>3d6a1e77aecbe8a7416bab41e88cdfc9</hash><bytes>1234678</bytes><content_type>image/jpeg</content_type><last_modified>2009-09-01T23:21:37.589124</last_modified></object> | ||
| 290 | -</container> | ||
| 291 | -*/ | ||
| 292 | - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict { | 218 | - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict { |
| 293 | [self setCurrentElement:elementName]; | 219 | [self setCurrentElement:elementName]; |
| 294 | 220 | ||
| @@ -320,6 +246,9 @@ | @@ -320,6 +246,9 @@ | ||
| 320 | [self setCurrentContent:[[self currentContent] stringByAppendingString:string]]; | 246 | [self setCurrentContent:[[self currentContent] stringByAppendingString:string]]; |
| 321 | } | 247 | } |
| 322 | 248 | ||
| 249 | +#pragma mark - | ||
| 250 | +#pragma mark Memory Management | ||
| 251 | + | ||
| 323 | - (void)dealloc { | 252 | - (void)dealloc { |
| 324 | [currentElement release]; | 253 | [currentElement release]; |
| 325 | [currentContent release]; | 254 | [currentContent release]; |
| @@ -22,6 +22,9 @@ static NSString *rackspaceCloudAuthURL = @"https://auth.api.rackspacecloud.com/v | @@ -22,6 +22,9 @@ static NSString *rackspaceCloudAuthURL = @"https://auth.api.rackspacecloud.com/v | ||
| 22 | 22 | ||
| 23 | @implementation ASICloudFilesRequest | 23 | @implementation ASICloudFilesRequest |
| 24 | 24 | ||
| 25 | +#pragma mark - | ||
| 26 | +#pragma mark Attributes and Service URLs | ||
| 27 | + | ||
| 25 | + (NSString *)authToken { | 28 | + (NSString *)authToken { |
| 26 | return authToken; | 29 | return authToken; |
| 27 | } | 30 | } |
| @@ -34,6 +37,9 @@ static NSString *rackspaceCloudAuthURL = @"https://auth.api.rackspacecloud.com/v | @@ -34,6 +37,9 @@ static NSString *rackspaceCloudAuthURL = @"https://auth.api.rackspacecloud.com/v | ||
| 34 | return cdnManagementURL; | 37 | return cdnManagementURL; |
| 35 | } | 38 | } |
| 36 | 39 | ||
| 40 | +#pragma mark - | ||
| 41 | +#pragma mark Authentication | ||
| 42 | + | ||
| 37 | + (id)authenticationRequest { | 43 | + (id)authenticationRequest { |
| 38 | ASIHTTPRequest *request = [[ASIHTTPRequest alloc] initWithURL:[NSURL URLWithString:rackspaceCloudAuthURL]]; | 44 | ASIHTTPRequest *request = [[ASIHTTPRequest alloc] initWithURL:[NSURL URLWithString:rackspaceCloudAuthURL]]; |
| 39 | [request addRequestHeader:@"X-Auth-User" value:username]; | 45 | [request addRequestHeader:@"X-Auth-User" value:username]; |
| @@ -21,7 +21,7 @@ | @@ -21,7 +21,7 @@ | ||
| 21 | #import "ASIInputStream.h" | 21 | #import "ASIInputStream.h" |
| 22 | 22 | ||
| 23 | // Automatically set on build | 23 | // Automatically set on build |
| 24 | -NSString *ASIHTTPRequestVersion = @"v1.2-33 2010-01-10"; | 24 | +NSString *ASIHTTPRequestVersion = @"v1.2-34 2010-01-10"; |
| 25 | 25 | ||
| 26 | // We use our own custom run loop mode as CoreAnimation seems to want to hijack our threads otherwise | 26 | // We use our own custom run loop mode as CoreAnimation seems to want to hijack our threads otherwise |
| 27 | static CFStringRef ASIHTTPRequestRunMode = CFSTR("ASIHTTPRequest"); | 27 | static CFStringRef ASIHTTPRequestRunMode = CFSTR("ASIHTTPRequest"); |
| @@ -17,26 +17,4 @@ | @@ -17,26 +17,4 @@ | ||
| 17 | 17 | ||
| 18 | @property (retain,nonatomic) ASINetworkQueue *networkQueue; | 18 | @property (retain,nonatomic) ASINetworkQueue *networkQueue; |
| 19 | 19 | ||
| 20 | -// ASICloudFilesRequest | ||
| 21 | -- (void)testAuthentication; | ||
| 22 | -- (void)testDateParser; | ||
| 23 | - | ||
| 24 | -// ASICloudFilesContainerRequest | ||
| 25 | -- (void)testAccountInfo; | ||
| 26 | -- (void)testContainerList; // TODO: with marker and limit permutations as well | ||
| 27 | -- (void)testContainerCreate; | ||
| 28 | -- (void)testContainerDelete; | ||
| 29 | - | ||
| 30 | -// ASICloudFilesObjectRequest | ||
| 31 | -- (void)testContainerInfo; | ||
| 32 | -- (void)testObjectInfo; | ||
| 33 | -- (void)testObjectList; // TODO: all permutations | ||
| 34 | -- (void)testGetObject; | ||
| 35 | -- (void)testPutObject; // TODO: all permutations? | ||
| 36 | -- (void)testPostObject; // TODO: all permutations? | ||
| 37 | -- (void)testDeleteObject; | ||
| 38 | - | ||
| 39 | -// ASICloudFilesCDNRequest | ||
| 40 | -// ??? | ||
| 41 | - | ||
| 42 | @end | 20 | @end |
| @@ -81,35 +81,10 @@ static NSString *apiKey = @"1c331a7a4a6eb58ca6072afe81e812d0"; | @@ -81,35 +81,10 @@ static NSString *apiKey = @"1c331a7a4a6eb58ca6072afe81e812d0"; | ||
| 81 | GHAssertNotNil(container.name, @"Failed to parse container"); | 81 | GHAssertNotNil(container.name, @"Failed to parse container"); |
| 82 | } | 82 | } |
| 83 | 83 | ||
| 84 | - ASICloudFilesContainerRequest *limitContainerListRequest = [ASICloudFilesContainerRequest listRequestWithLimit:2]; | 84 | + ASICloudFilesContainerRequest *limitContainerListRequest = [ASICloudFilesContainerRequest listRequestWithLimit:2 marker:nil]; |
| 85 | [limitContainerListRequest start]; | 85 | [limitContainerListRequest start]; |
| 86 | containers = [limitContainerListRequest containers]; | 86 | containers = [limitContainerListRequest containers]; |
| 87 | GHAssertTrue([containers count] == 2, @"Failed to limit container list"); | 87 | GHAssertTrue([containers count] == 2, @"Failed to limit container list"); |
| 88 | - | ||
| 89 | - /* | ||
| 90 | - ASICloudFilesContainerRequest *markerContainerListRequest = [ASICloudFilesContainerRequest listRequestWithMarker:@"personal"]; | ||
| 91 | - [markerContainerListRequest start]; | ||
| 92 | - | ||
| 93 | - containers = [markerContainerListRequest containers]; | ||
| 94 | - NSLog(@"Marker personal Containers list count: %i", [containers count]); | ||
| 95 | - | ||
| 96 | - for (int i = 0; i < [containers count]; i++) { | ||
| 97 | - ASICloudFilesContainer *container = [containers objectAtIndex:i]; | ||
| 98 | - NSLog(@"%@ - %i objects, %i bytes", container.name, container.count, container.bytes); | ||
| 99 | - } | ||
| 100 | - | ||
| 101 | - ASICloudFilesContainerRequest *limitMarkerContainerListRequest = [ASICloudFilesContainerRequest listRequestWithLimit:3 marker:@"cf_service"]; | ||
| 102 | - [limitMarkerContainerListRequest start]; | ||
| 103 | - | ||
| 104 | - containers = [limitMarkerContainerListRequest containers]; | ||
| 105 | - NSLog(@"Limit 3 Marker cf_service Containers list count: %i", [containers count]); | ||
| 106 | - | ||
| 107 | - for (int i = 0; i < [containers count]; i++) { | ||
| 108 | - ASICloudFilesContainer *container = [containers objectAtIndex:i]; | ||
| 109 | - NSLog(@"%@ - %i objects, %i bytes", container.name, container.count, container.bytes); | ||
| 110 | - } | ||
| 111 | - */ | ||
| 112 | - | ||
| 113 | } | 88 | } |
| 114 | 89 | ||
| 115 | - (void)testContainerCreate { | 90 | - (void)testContainerCreate { |
| @@ -183,7 +158,6 @@ static NSString *apiKey = @"1c331a7a4a6eb58ca6072afe81e812d0"; | @@ -183,7 +158,6 @@ static NSString *apiKey = @"1c331a7a4a6eb58ca6072afe81e812d0"; | ||
| 183 | GHAssertNotNil(object, @"Failed to retrieve object"); | 158 | GHAssertNotNil(object, @"Failed to retrieve object"); |
| 184 | 159 | ||
| 185 | GHAssertNotNil(object.name, @"Failed to parse object name"); | 160 | GHAssertNotNil(object.name, @"Failed to parse object name"); |
| 186 | - //GHAssertNotNil(object.hash, @"Failed to parse object hash"); // FAILS | ||
| 187 | GHAssertTrue(object.bytes > 0, @"Failed to parse object bytes"); | 161 | GHAssertTrue(object.bytes > 0, @"Failed to parse object bytes"); |
| 188 | GHAssertNotNil(object.contentType, @"Failed to parse object content type"); | 162 | GHAssertNotNil(object.contentType, @"Failed to parse object content type"); |
| 189 | GHAssertNotNil(object.lastModified, @"Failed to parse object last modified"); | 163 | GHAssertNotNil(object.lastModified, @"Failed to parse object last modified"); |
| @@ -241,13 +215,11 @@ static NSString *apiKey = @"1c331a7a4a6eb58ca6072afe81e812d0"; | @@ -241,13 +215,11 @@ static NSString *apiKey = @"1c331a7a4a6eb58ca6072afe81e812d0"; | ||
| 241 | ASICloudFilesObjectRequest *request = [ASICloudFilesObjectRequest postObjectRequestWithContainer:@"cf_service" object:object]; | 215 | ASICloudFilesObjectRequest *request = [ASICloudFilesObjectRequest postObjectRequestWithContainer:@"cf_service" object:object]; |
| 242 | [request start]; | 216 | [request start]; |
| 243 | 217 | ||
| 244 | - NSLog(@"\n\n\npost response: %i\n\n\n", [request responseStatusCode]); | ||
| 245 | - | ||
| 246 | GHAssertTrue([request responseStatusCode] == 202, @"Failed to post object metadata"); | 218 | GHAssertTrue([request responseStatusCode] == 202, @"Failed to post object metadata"); |
| 247 | 219 | ||
| 248 | [metadata release]; | 220 | [metadata release]; |
| 249 | 221 | ||
| 250 | -} // TODO: all permutations? | 222 | +} |
| 251 | 223 | ||
| 252 | - (void)testDeleteObject { | 224 | - (void)testDeleteObject { |
| 253 | [self authenticate]; | 225 | [self authenticate]; |
| @@ -258,7 +230,8 @@ static NSString *apiKey = @"1c331a7a4a6eb58ca6072afe81e812d0"; | @@ -258,7 +230,8 @@ static NSString *apiKey = @"1c331a7a4a6eb58ca6072afe81e812d0"; | ||
| 258 | GHAssertNil([deleteRequest error], @"Failed to delete object"); | 230 | GHAssertNil([deleteRequest error], @"Failed to delete object"); |
| 259 | } | 231 | } |
| 260 | 232 | ||
| 261 | -// CDN | 233 | +#pragma mark - |
| 234 | +#pragma mark CDN Tests | ||
| 262 | 235 | ||
| 263 | - (void)testCDNContainerInfo { | 236 | - (void)testCDNContainerInfo { |
| 264 | [self authenticate]; | 237 | [self authenticate]; |
| @@ -309,6 +282,9 @@ static NSString *apiKey = @"1c331a7a4a6eb58ca6072afe81e812d0"; | @@ -309,6 +282,9 @@ static NSString *apiKey = @"1c331a7a4a6eb58ca6072afe81e812d0"; | ||
| 309 | GHAssertNotNil([request cdnURI], @"Failed to POST to CDN container"); | 282 | GHAssertNotNil([request cdnURI], @"Failed to POST to CDN container"); |
| 310 | } | 283 | } |
| 311 | 284 | ||
| 285 | +#pragma mark - | ||
| 286 | +#pragma mark Memory Management | ||
| 287 | + | ||
| 312 | -(void)dealloc { | 288 | -(void)dealloc { |
| 313 | [networkQueue release]; | 289 | [networkQueue release]; |
| 314 | [super dealloc]; | 290 | [super dealloc]; |
This diff was suppressed by a .gitattributes entry.
-
Please register or login to post a comment