Michael Mayo

cleanup

1 -//  
2 -// ASICloudFilesAccount.h  
3 -// iPhone  
4 -//  
5 -// Created by Michael Mayo on 1/7/10.  
6 -// Copyright 2010 __MyCompanyName__. All rights reserved.  
7 -//  
8 -  
9 -#import <Foundation/Foundation.h>  
10 -  
11 -  
12 -@interface ASICloudFilesAccount : NSObject {  
13 -  
14 -}  
15 -  
16 -@end  
1 -//  
2 -// ASICloudFilesAccount.m  
3 -// iPhone  
4 -//  
5 -// Created by Michael Mayo on 1/7/10.  
6 -// Copyright 2010 __MyCompanyName__. All rights reserved.  
7 -//  
8 -  
9 -#import "ASICloudFilesAccount.h"  
10 -  
11 -  
12 -@implementation ASICloudFilesAccount  
13 -  
14 -@end  
@@ -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&#32;9-23-54&#32;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.