From 5e28084e4501969ac6a83ccb05f38407fffe47fe Mon Sep 17 00:00:00 2001 From: Neeraj Baid Date: Thu, 24 Jul 2014 11:52:33 -0700 Subject: [PATCH] Fix so that instantiating VENTransactionTargets with current API response works by modifying required keys. --- VENCore/Categories/NSArray+VENCore.h | 18 -- VENCore/Categories/NSArray+VENCore.m | 39 --- VENCore/Categories/NSDictionary+VENCore.m | 16 +- .../Transactions/VENTransactionTarget.m | 17 +- VENCore/Networking/VENHTTP.h | 6 +- VENCore/Networking/VENHTTP.m | 259 +++++------------- VENCore/Networking/VENHTTPResponse.h | 12 +- VENCore/Networking/VENHTTPResponse.m | 11 +- VENCore/VENCore-Prefix.pch | 9 - VENCore/VENCore.h | 1 - VENCore/VENCore.m | 6 +- 11 files changed, 105 insertions(+), 289 deletions(-) delete mode 100644 VENCore/Categories/NSArray+VENCore.h delete mode 100644 VENCore/Categories/NSArray+VENCore.m delete mode 100644 VENCore/VENCore-Prefix.pch diff --git a/VENCore/Categories/NSArray+VENCore.h b/VENCore/Categories/NSArray+VENCore.h deleted file mode 100644 index 93ac5bb..0000000 --- a/VENCore/Categories/NSArray+VENCore.h +++ /dev/null @@ -1,18 +0,0 @@ -#import - -@interface NSMutableArray (VENCore) - -/** -* Removes all elements which have NULL values from the array -*/ -- (void)cleanseResponseArray; - -@end - -@interface NSArray (VENCore) -/** - * Returns an array containing all non-Null elements from the receiving array - * @return Array with no NULL values - */ -- (instancetype)arrayByCleansingResponseArray; -@end diff --git a/VENCore/Categories/NSArray+VENCore.m b/VENCore/Categories/NSArray+VENCore.m deleted file mode 100644 index 67b6b77..0000000 --- a/VENCore/Categories/NSArray+VENCore.m +++ /dev/null @@ -1,39 +0,0 @@ -#import "NSArray+VENCore.h" -#import "NSDictionary+VENCore.h" - -@implementation NSMutableArray (VENCore) - -- (void)cleanseResponseArray -{ - NSMutableArray *elementsToRemoveArray = [[NSMutableArray alloc] initWithCapacity:[self count]]; - for (NSUInteger i=0; i<[self count]; i++) { - if ([self[i] isKindOfClass:[NSNumber class]]) { - self[i] = [(NSNumber *)self[i] stringValue]; - } - else if (self[i] == [NSNull null]) { - [elementsToRemoveArray addObject:self[i]]; - } - else if ([self[i] isKindOfClass:[NSDictionary class]]) { - self[i] = [(NSMutableDictionary *)self[i] dictionaryByCleansingResponseDictionary]; - } - else if ([self[i] isKindOfClass:[NSArray class]]) { - self[i] = [(NSArray *)self[i] arrayByCleansingResponseArray]; - } - } - for (NSObject *objectToRemove in elementsToRemoveArray) { - [self removeObject:objectToRemove]; - } -} - -@end - -@implementation NSArray (VENCore) - -- (instancetype)arrayByCleansingResponseArray -{ - NSMutableArray *array = [self mutableCopy]; - [array cleanseResponseArray]; - return [NSArray arrayWithArray:array]; -} - -@end diff --git a/VENCore/Categories/NSDictionary+VENCore.m b/VENCore/Categories/NSDictionary+VENCore.m index 3868fb3..eaab5dd 100644 --- a/VENCore/Categories/NSDictionary+VENCore.m +++ b/VENCore/Categories/NSDictionary+VENCore.m @@ -1,24 +1,18 @@ #import "NSDictionary+VENCore.h" -#import "NSArray+VENCore.h" @implementation NSMutableDictionary (VENCore) - (void)cleanseResponseDictionary { for (NSString *key in [self allKeys]) { - NSObject *object = (NSObject *) self[key]; - if (object == [NSNull null]) { + if (self[key] == [NSNull null]) { [self removeObjectForKey:key]; } - else if ([object isKindOfClass:[NSNumber class]]) { - self[key] = [((NSNumber *)object) stringValue]; + else if ([(NSObject *)self[key] isKindOfClass:[NSNumber class]]) { + self[key] = [((NSNumber *)self[key]) stringValue]; } - else if ([object isKindOfClass:[NSDictionary class]]) { - self[key] = [((NSDictionary *)object) dictionaryByCleansingResponseDictionary]; - } - else if([object isKindOfClass:[NSArray class]]) { - NSArray *array = [(NSArray *)object copy]; - self[key] = [array arrayByCleansingResponseArray]; + else if ([(NSObject *)self[key] isKindOfClass:[NSDictionary class]]) { + self[key] = [((NSDictionary *)self[key]) dictionaryByCleansingResponseDictionary]; } } } diff --git a/VENCore/Models/Transactions/VENTransactionTarget.m b/VENCore/Models/Transactions/VENTransactionTarget.m index fc4cf03..6e82108 100644 --- a/VENCore/Models/Transactions/VENTransactionTarget.m +++ b/VENCore/Models/Transactions/VENTransactionTarget.m @@ -7,7 +7,7 @@ @implementation VENTransactionTarget + (BOOL)canInitWithDictionary:(NSDictionary *)dictionary { - NSArray *requiredKeys = @[VENTransactionAmountKey, VENTransactionTargetTypeKey]; + NSArray *requiredKeys = @[VENTransactionTargetTypeKey]; for (NSString *key in requiredKeys) { if (!dictionary[key] || [dictionary[key] isKindOfClass:[NSNull class]]) { @@ -22,18 +22,6 @@ + (BOOL)canInitWithDictionary:(NSDictionary *)dictionary { return NO; } - id amount = dictionary[VENTransactionAmountKey]; - - if ([amount isKindOfClass:[NSString class]] && ![amount intValue]) { - return NO; - } - else if ([amount respondsToSelector:@selector(doubleValue)]) { - amount = @([amount doubleValue] * 100.); - } - else { - return NO; - } - return YES; } @@ -83,6 +71,9 @@ - (instancetype)initWithDictionary:(NSDictionary *)dictionary { self.handle = cleanDictionary[targetType]; self.amount = (NSUInteger)([cleanDictionary[VENTransactionAmountKey] doubleValue] * (double)100); + if ([VENUser canInitWithDictionary:cleanDictionary[VENTransactionTargetUserKey]]) { + self.user = [[VENUser alloc] initWithDictionary:cleanDictionary[VENTransactionTargetUserKey]]; + } } return self; } diff --git a/VENCore/Networking/VENHTTP.h b/VENCore/Networking/VENHTTP.h index 053990f..e031551 100644 --- a/VENCore/Networking/VENHTTP.h +++ b/VENCore/Networking/VENHTTP.h @@ -8,16 +8,14 @@ extern NSString *const VENAPIPathPayments; extern NSString *const VENAPIPathUsers; -@class VENHTTPResponse; +@class AFHTTPRequestOperationManager, AFHTTPRequestOperation, VENHTTPResponse; @interface VENHTTP : NSObject -@property (nonatomic, strong, readonly) NSURL *baseURL; +@property (strong, nonatomic) AFHTTPRequestOperationManager *operationManager; - (instancetype)initWithBaseURL:(NSURL *)baseURL; -- (void)setProtocolClasses:(NSArray *)protocolClasses; - - (void)GET:(NSString *)path parameters:(NSDictionary *)parameters success:(void(^)(VENHTTPResponse *response))successBlock failure:(void(^)(VENHTTPResponse *response, NSError *error))failureBlock; diff --git a/VENCore/Networking/VENHTTP.m b/VENCore/Networking/VENHTTP.m index 0e8381d..87b12fd 100644 --- a/VENCore/Networking/VENHTTP.m +++ b/VENCore/Networking/VENHTTP.m @@ -1,251 +1,145 @@ #import "VENHTTP.h" +#import +#import +#import +@import AdSupport; #import "NSError+VENCore.h" #import "VENHTTPResponse.h" #import "UIDevice+VENCore.h" #import "NSError+VENCore.h" -#import "NSDictionary+VENCore.h" -#import "NSArray+VENCore.h" -#import + NSString *const VENAPIPathPayments = @"payments"; NSString *const VENAPIPathUsers = @"users"; -@interface VENHTTP () +@interface VENHTTP () @property (strong, nonatomic) NSString *accessToken; -@property (nonatomic, strong) NSURLSession *session; -@property (nonatomic, strong, readwrite) NSURL *baseURL; @end @implementation VENHTTP -- (instancetype)initWithBaseURL:(NSURL *)baseURL -{ +- (instancetype)initWithBaseURL:(NSURL *)baseURL { self = [self init]; if (self) { - self.baseURL = baseURL; - [self initializeSessionWithHeaders:self.defaultHeaders]; - } - return self; -} - - -- (void)initializeSessionWithHeaders:(NSDictionary *)headers; -{ - void(^createSessionBlock)() = ^() { - NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration ephemeralSessionConfiguration]; - configuration.HTTPAdditionalHeaders = self.defaultHeaders; + self.operationManager = [[AFHTTPRequestOperationManager alloc] initWithBaseURL:baseURL]; - NSOperationQueue *delegateQueue = [[NSOperationQueue alloc] init]; - delegateQueue.maxConcurrentOperationCount = NSOperationQueueDefaultMaxConcurrentOperationCount; - - self.session = [NSURLSession sessionWithConfiguration:configuration delegate:self delegateQueue:delegateQueue]; - }; - - if (self.session) { - [self.session resetWithCompletionHandler:createSessionBlock]; + // set default header fields + [self.defaultHeaders enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { + [self.operationManager.requestSerializer setValue:obj forHTTPHeaderField:key]; + }]; } - else { - createSessionBlock(); - } -} - - -- (void)setProtocolClasses:(NSArray *)protocolClasses { - NSURLSessionConfiguration *configuration = self.session.configuration; - configuration.protocolClasses = protocolClasses; - self.session = [NSURLSession sessionWithConfiguration:configuration delegate:self delegateQueue:self.session.delegateQueue]; + return self; } - (void)GET:(NSString *)path parameters:(NSDictionary *)parameters success:(void(^)(VENHTTPResponse *response))successBlock - failure:(void(^)(VENHTTPResponse *response, NSError *error))failureBlock -{ + failure:(void(^)(VENHTTPResponse *response, NSError *error))failureBlock { + [self sendRequestWithMethod:@"GET" path:path parameters:parameters success:successBlock failure:failureBlock]; } - (void)POST:(NSString *)path parameters:(NSDictionary *)parameters success:(void(^)(VENHTTPResponse *response))successBlock - failure:(void(^)(VENHTTPResponse *response, NSError *error))failureBlock -{ - + failure:(void(^)(VENHTTPResponse *response, NSError *error))failureBlock { + [self sendRequestWithMethod:@"POST" path:path parameters:parameters success:successBlock failure:failureBlock]; } - - (void)PUT:(NSString *)path parameters:(NSDictionary *)parameters success:(void (^)(VENHTTPResponse *))successBlock - failure:(void (^)(VENHTTPResponse *, NSError *))failureBlock -{ + failure:(void (^)(VENHTTPResponse *, NSError *))failureBlock { + [self sendRequestWithMethod:@"PUT" path:path parameters:parameters success:successBlock failure:failureBlock]; } - (void)DELETE:(NSString *)path parameters:(NSDictionary *)parameters success:(void(^)(VENHTTPResponse *response))successBlock - failure:(void(^)(VENHTTPResponse *response, NSError *error))failureBlock -{ + failure:(void(^)(VENHTTPResponse *response, NSError *error))failureBlock { + [self sendRequestWithMethod:@"DELETE" path:path parameters:parameters success:successBlock failure:failureBlock]; } -#pragma mark - Underlying HTTP - -// Modified from BTHTTP -- (void)sendRequestWithMethod:(NSString *)method - path:(NSString *)aPath - parameters:(NSDictionary *)parameters - success:(void(^)(VENHTTPResponse *response))successBlock - failure:(void(^)(VENHTTPResponse *response, NSError *error))failureBlock -{ - NSURL *fullPathURL = [self.baseURL URLByAppendingPathComponent:aPath]; - NSURLComponents *components = [NSURLComponents componentsWithString:fullPathURL.absoluteString]; - - NSMutableURLRequest *request; - - NSString *encodedParametersString = [CMDQueryStringSerialization queryStringWithDictionary:parameters]; - NSString *percentEncodedQuery = [encodedParametersString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; - if ([method isEqualToString:@"GET"] || [method isEqualToString:@"DELETE"]) { - components.percentEncodedQuery = percentEncodedQuery; - request = [NSMutableURLRequest requestWithURL:components.URL]; - } else { - request = [NSMutableURLRequest requestWithURL:components.URL]; - NSData *body = [encodedParametersString dataUsingEncoding:NSUTF8StringEncoding]; - [request setHTTPBody:body]; - NSDictionary *headers = @{@"Content-Type": @"application/x-www-form-urlencoded; charset=utf-8"}; - [request setAllHTTPHeaderFields:headers]; - } - // Add headers - NSMutableDictionary *currentHeaders = [NSMutableDictionary dictionaryWithDictionary:request.allHTTPHeaderFields]; - [currentHeaders addEntriesFromDictionary:[self headersWithAccessToken:self.accessToken]]; - [request setAllHTTPHeaderFields:currentHeaders]; +- (AFHTTPRequestOperation *)sendRequestWithMethod:(NSString *)method + path:(NSString *)path parameters:(NSDictionary *)parameters + success:(void(^)(VENHTTPResponse *response))successBlock + failure:(void(^)(VENHTTPResponse *response, NSError *error))failureBlock { - [request setHTTPMethod:method]; + NSMutableURLRequest *request = + [self.operationManager.requestSerializer requestWithMethod:method + URLString:[[NSURL URLWithString:path + relativeToURL:self.operationManager.baseURL] absoluteString] + parameters:parameters + error:nil]; - // Perform the actual request - NSURLSessionTask *task = [self.session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { - [[self class] handleRequestCompletion:data response:response error:error success:successBlock failure:failureBlock]; - }]; - [task resume]; -} + void(^operationSuccessBlock)(AFHTTPRequestOperation *, id) = ^(AFHTTPRequestOperation *operation, id responseObject) { -+ (void)handleRequestCompletion:(NSData *)data - response:(NSURLResponse *)response - error:(NSError *)error - success:(void(^)(VENHTTPResponse *response))successBlock - failure:(void(^)(VENHTTPResponse *response, NSError *error))failureBlock -{ - // Handle nil or non-HTTP requests, which are an unknown type of error - if (![response isKindOfClass:[NSHTTPURLResponse class]]) { - NSDictionary *userInfo = error ? @{NSUnderlyingErrorKey: error} : nil; - NSError *error = [NSError errorWithDomain:VENErrorDomainHTTPResponse - code:VENErrorCodeHTTPResponseBadResponse - userInfo:userInfo]; - [self callFailureBlock:failureBlock response:nil error:error]; - return; - } + VENHTTPResponse *response = [[VENHTTPResponse alloc] initWithOperation:operation]; - // Attempt to parse, and return an error if parsing fails - NSError *jsonParseError; - id responseObject = [NSJSONSerialization JSONObjectWithData:data options:0 error:&jsonParseError]; - - if (jsonParseError != nil) { - [self callFailureBlock:failureBlock response:nil error:jsonParseError]; - return; - } - - if ([responseObject isKindOfClass:[NSDictionary class]]) { - NSDictionary *responseDictionary = (NSDictionary *)responseObject; - NSDictionary *cleansedDictionary = [responseDictionary dictionaryByCleansingResponseDictionary]; - - NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response; - VENHTTPResponse *venHTTPResponse = [[VENHTTPResponse alloc] initWithStatusCode:httpResponse.statusCode responseObject:cleansedDictionary]; - if ([venHTTPResponse didError]) { - [self callFailureBlock:failureBlock - response:venHTTPResponse - error:[venHTTPResponse error]]; + if ([response didError]) { + if (failureBlock) { + NSError *error = [response error] ?: [NSError defaultResponseError]; + failureBlock(response, error); + } } else { - [self callSuccessBlock:successBlock response:venHTTPResponse]; + if (successBlock) { + successBlock(response); + } } - } - else if ([responseObject isKindOfClass:[NSArray class]]) { - NSArray *responseArray = (NSArray *)responseObject; - NSArray *cleansedArray = [responseArray arrayByCleansingResponseArray]; - NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response; - VENHTTPResponse *venHTTPResponse = [[VENHTTPResponse alloc] initWithStatusCode:httpResponse.statusCode responseObject:cleansedArray]; - if ([venHTTPResponse didError]) { - [self callFailureBlock:failureBlock - response:venHTTPResponse - error:[venHTTPResponse error]]; + }; + + + void(^operationFailureBlock)(AFHTTPRequestOperation *, id) = ^(AFHTTPRequestOperation *operation, NSError *error) { + + if (!failureBlock) { + return; + } + + VENHTTPResponse *response = [[VENHTTPResponse alloc] initWithOperation:operation]; + if ([response didError]) { + NSError *error = [response error] ?: [NSError defaultResponseError]; + failureBlock(response, error); } else { - [self callSuccessBlock:successBlock response:venHTTPResponse]; + failureBlock(response, error); } - } - else { - NSDictionary *userInfo = error ? @{NSUnderlyingErrorKey: error} : nil; - NSError *error = [NSError errorWithDomain:VENErrorDomainHTTPResponse - code:VENErrorCodeHTTPResponseInvalidObjectType - userInfo:userInfo]; - [self callFailureBlock:failureBlock response:nil error:error]; - } -} + }; -+ (void)callSuccessBlock:(void(^)(VENHTTPResponse *response))successBlock - response:(VENHTTPResponse *)response -{ - if (!successBlock) { - return; - } - dispatch_async(dispatch_get_main_queue(), ^{ - successBlock(response); - }); -} -+ (void)callFailureBlock:(void(^)(VENHTTPResponse *response, NSError *error))failureBlock - response:(VENHTTPResponse *)response - error:(NSError *)error { - if (!failureBlock) { - return; - } - dispatch_async(dispatch_get_main_queue(), ^{ - failureBlock(response, error); - }); + AFHTTPRequestOperation *operation = [self.operationManager HTTPRequestOperationWithRequest:request + success:operationSuccessBlock + failure:operationFailureBlock]; + + [self.operationManager.operationQueue addOperation:operation]; + return operation; } -- (NSDictionary *)headersWithAccessToken:(NSString *)accessToken -{ - if (!accessToken) { - return [self defaultHeaders]; - } - NSDictionary *cookieProperties = @{ NSHTTPCookieDomain : [self.baseURL host], +- (void)setAccessToken:(NSString *)accessToken { + NSDictionary *cookieProperties = @{ NSHTTPCookieDomain : [self.operationManager.baseURL host], NSHTTPCookiePath: @"/", - NSHTTPCookieName: @"api_access_token", - NSHTTPCookieValue: accessToken }; + NSHTTPCookieName : @"api_access_token", + NSHTTPCookieValue : accessToken }; NSHTTPCookie *cookie = [NSHTTPCookie cookieWithProperties:cookieProperties]; - // Add cookie to shared cookie storage for webview requests + // add cookie to cookiestorage for webview requests [[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookie:cookie]; - NSMutableDictionary *headers = [NSMutableDictionary dictionaryWithDictionary:[NSHTTPCookie requestHeaderFieldsWithCookies:@[cookie]]]; - [headers addEntriesFromDictionary:[self defaultHeaders]]; - return headers; -} + NSDictionary * cookieHeaders = [NSHTTPCookie requestHeaderFieldsWithCookies:@[cookie]]; -- (void)setAccessToken:(NSString *)accessToken -{ - _accessToken = accessToken; - NSDictionary *headers = [self headersWithAccessToken:accessToken]; - [self initializeSessionWithHeaders:headers]; + // set access token header fields + [cookieHeaders enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { + [self.operationManager.requestSerializer setValue:obj forHTTPHeaderField:key]; + }]; } -- (NSDictionary *)defaultHeaders -{ +- (NSDictionary *)defaultHeaders { NSMutableDictionary *defaultHeaders = [[NSMutableDictionary alloc] init]; [defaultHeaders addEntriesFromDictionary:@{@"User-Agent" : [self userAgentString], @"Accept": [self acceptString], @@ -266,18 +160,17 @@ - (NSString *)userAgentString { } -- (NSString *)acceptString -{ +- (NSString *)acceptString { return @"application/json"; } -- (NSString *)acceptLanguageString -{ +- (NSString *)acceptLanguageString { NSLocale *locale = [NSLocale currentLocale]; return [NSString stringWithFormat:@"%@-%@", [locale objectForKey:NSLocaleLanguageCode], [locale objectForKey:NSLocaleCountryCode]]; } + @end diff --git a/VENCore/Networking/VENHTTPResponse.h b/VENCore/Networking/VENHTTPResponse.h index bb5fe00..454e17a 100644 --- a/VENCore/Networking/VENHTTPResponse.h +++ b/VENCore/Networking/VENHTTPResponse.h @@ -11,18 +11,22 @@ NSString *const VENErrorDomainHTTPResponse; NS_ENUM(NSInteger, VEErrorCodeHTTPResponse) { VENErrorCodeHTTPResponseUnauthorizedRequest, - VENErrorCodeHTTPResponseBadResponse, - VENErrorCodeHTTPResponseInvalidObjectType + VENErrorCodeHTTPResponseBadResponse }; @interface VENHTTPResponse : NSObject -@property (nonatomic, readonly, strong) id object; +@property (nonatomic, readonly, strong) NSDictionary *object; @property (nonatomic, readonly, assign) NSInteger statusCode; -- (instancetype)initWithStatusCode:(NSInteger)statusCode responseObject:(id)object; +- (instancetype)initWithStatusCode:(NSInteger)statusCode responseObject:(NSDictionary *)object; +/** + * Initializes a response object with an AFHTTPRequestOperation. + */ +- (instancetype)initWithOperation:(AFHTTPRequestOperation *)operation; + /** * Returns YES if the response represents an error state. diff --git a/VENCore/Networking/VENHTTPResponse.m b/VENCore/Networking/VENHTTPResponse.m index 20cba82..c8149af 100644 --- a/VENCore/Networking/VENHTTPResponse.m +++ b/VENCore/Networking/VENHTTPResponse.m @@ -2,18 +2,20 @@ #import "NSError+VENCore.h" #import "NSDictionary+VENCore.h" +#import + NSString *const VENErrorDomainHTTPResponse = @"com.venmo.VENCore.ErrorDomain.VENHTTPResponse"; @interface VENHTTPResponse () -@property (nonatomic, readwrite, strong) id object; +@property (nonatomic, readwrite, strong) NSDictionary *object; @property (nonatomic, readwrite, assign) NSInteger statusCode; @end @implementation VENHTTPResponse -- (instancetype)initWithStatusCode:(NSInteger)statusCode responseObject:(id)object { +- (instancetype)initWithStatusCode:(NSInteger)statusCode responseObject:(NSDictionary *)object { self = [self init]; if (self) { self.statusCode = statusCode; @@ -23,6 +25,11 @@ - (instancetype)initWithStatusCode:(NSInteger)statusCode responseObject:(id)obje } +- (instancetype)initWithOperation:(AFHTTPRequestOperation *)operation { + return [[VENHTTPResponse alloc] initWithStatusCode:operation.response.statusCode responseObject:operation.responseObject]; +} + + - (NSString *)description { return [NSString stringWithFormat:@"", (int)self.statusCode, self.object]; } diff --git a/VENCore/VENCore-Prefix.pch b/VENCore/VENCore-Prefix.pch deleted file mode 100644 index eb2007e..0000000 --- a/VENCore/VENCore-Prefix.pch +++ /dev/null @@ -1,9 +0,0 @@ -// -// Prefix header -// -// The contents of this file are implicitly included at the beginning of every source file. -// - -#ifdef __OBJC__ - #import -#endif diff --git a/VENCore/VENCore.h b/VENCore/VENCore.h index d56ec3a..eda31db 100644 --- a/VENCore/VENCore.h +++ b/VENCore/VENCore.h @@ -26,7 +26,6 @@ NS_ENUM(NSInteger, VENCoreErrorCode) { @property (strong, nonatomic) VENHTTP *httpClient; @property (strong, nonatomic) NSString *accessToken; - /** * Sets the shared core object. * @param core The core object to share. diff --git a/VENCore/VENCore.m b/VENCore/VENCore.m index 8d7b80a..3802b82 100644 --- a/VENCore/VENCore.m +++ b/VENCore/VENCore.m @@ -11,13 +11,9 @@ @implementation VENCore #pragma mark - Private - (instancetype)init { - return [self initWithBaseURL:[NSURL URLWithString:VENAPIBaseURL]]; -} - -- (instancetype)initWithBaseURL:(NSURL *)baseURL { self = [super init]; if (self) { - self.httpClient = [[VENHTTP alloc] initWithBaseURL:baseURL]; + self.httpClient = [[VENHTTP alloc] initWithBaseURL:[NSURL URLWithString:VENAPIBaseURL]]; } return self; }