[objc] Let the developer specify the timezone to be used for date serialisation (#6628)

* [objc] Update deployment target to 8.0

Updates the test project deployment target to 8.0, as that's the lowest
supported by the latest XCode.

* [objc] Update petstore tests based on current master

Makes sure the tests are based on the latest version of master.

* [objc] Allow specifying the serialization timezone

Now it's possible to specify the timezone used for serializing dates
This commit is contained in:
Andrea Rossi 2017-10-07 07:44:35 +02:00 committed by wing328
parent 567ae3fd12
commit 0db4b32384
23 changed files with 117 additions and 22 deletions

View File

@ -74,6 +74,11 @@
*/
@property (nonatomic) NSString *sslCaCert;
/**
* The time zone to use for date serialization
*/
@property (nonatomic) NSTimeZone *serializationTimeZone;
/**
* Sets API key
*

View File

@ -1,5 +1,6 @@
#import <ISO8601/NSDate+ISO8601.h>
#import "JSONValueTransformer+ISO8601.h"
#import "{{classPrefix}}Sanitizer.h"
@implementation JSONValueTransformer (ISO8601)
@ -8,4 +9,9 @@
return [NSDate dateWithISO8601String:string];
}
- (NSString *)JSONObjectFromNSDate:(NSDate *)date
{
return [{{classPrefix}}Sanitizer dateToString:date];
}
@end

View File

@ -1,6 +1,7 @@
#import "{{classPrefix}}Sanitizer.h"
#import "{{classPrefix}}Object.h"
#import "{{classPrefix}}QueryParamCollection.h"
#import "{{classPrefix}}DefaultConfiguration.h"
#import <ISO8601/ISO8601.h>
NSString * const k{{classPrefix}}ApplicationJSONType = @"application/json";
@ -63,7 +64,7 @@ NSString * {{classPrefix}}PercentEscapedStringFromString(NSString *string) {
return object;
}
else if ([object isKindOfClass:[NSDate class]]) {
return [self dateParameterToString:object];
return [{{classPrefix}}Sanitizer dateToString:object];
}
else if ([object isKindOfClass:[NSArray class]]) {
NSArray *objectArray = object;
@ -107,7 +108,7 @@ NSString * {{classPrefix}}PercentEscapedStringFromString(NSString *string) {
return [param stringValue];
}
else if ([param isKindOfClass:[NSDate class]]) {
return [self dateParameterToString:param];
return [{{classPrefix}}Sanitizer dateToString:param];
}
else if ([param isKindOfClass:[NSArray class]]) {
NSMutableArray *mutableParam = [NSMutableArray array];
@ -125,8 +126,9 @@ NSString * {{classPrefix}}PercentEscapedStringFromString(NSString *string) {
}
}
- (NSString *)dateParameterToString:(id)param {
return [param ISO8601String];
+ (NSString *)dateToString:(id)date {
NSTimeZone* timeZone = [{{classPrefix}}DefaultConfiguration sharedConfig].serializationTimeZone;
return [date ISO8601StringWithTimeZone:timeZone usingCalendar:nil];
}
#pragma mark - Utility Methods

View File

@ -20,6 +20,11 @@ extern NSString * const k{{classPrefix}}ApplicationJSONType;
*/
- (NSString *) parameterToString: (id) param;
/**
* Convert date to NSString
*/
+ (NSString *)dateToString:(id)date;
/**
* Detects Accept header from accepts NSArray
*

View File

@ -0,0 +1 @@
2.3.0-SNAPSHOT

View File

@ -29,7 +29,7 @@ extern NSInteger kSWGFakeApiMissingParamErrorCode;
///
/// code:400 message:"To test code injection *_/ ' \" =end -- \\r\\n \\n \\r"
///
/// @return
/// @return void
-(NSURLSessionTask*) testCodeInjectEndRnNRWithTestCodeInjectEndRnNR: (NSString*) testCodeInjectEndRnNR
completionHandler: (void (^)(NSError* error)) handler;

View File

@ -1,5 +1,6 @@
#import <ISO8601/NSDate+ISO8601.h>
#import "JSONValueTransformer+ISO8601.h"
#import "SWGSanitizer.h"
@implementation JSONValueTransformer (ISO8601)
@ -8,4 +9,9 @@
return [NSDate dateWithISO8601String:string];
}
- (NSString *)JSONObjectFromNSDate:(NSDate *)date
{
return [SWGSanitizer dateToString:date];
}
@end

View File

@ -34,6 +34,27 @@ extern NSString *const SWGResponseObjectErrorKey;
@property(nonatomic, strong) id<SWGSanitizer> sanitizer;
/**
* Gets if the client is unreachable
*
* @return The client offline state
*/
+(BOOL) getOfflineState;
/**
* Sets the client reachability, this may be overridden by the reachability manager if reachability changes
*
* @param status The client reachability status.
*/
+(void) setReachabilityStatus:(AFNetworkReachabilityStatus) status;
/**
* Gets the client reachability
*
* @return The client reachability.
*/
+(AFNetworkReachabilityStatus) getReachabilityStatus;
@property (nonatomic, strong) NSDictionary< NSString *, AFHTTPRequestSerializer <AFURLRequestSerialization> *>* requestSerializerForContentType;
/**

View File

@ -86,4 +86,4 @@ static NSString * const kSWGAPIVersion = @"1.0.0";
*/
@property (readonly, nonatomic, strong) NSDictionary *defaultHeaders;
@end
@end

View File

@ -85,6 +85,11 @@
*/
@property (nonatomic) NSString *sslCaCert;
/**
* The time zone to use for date serialization
*/
@property (nonatomic) NSTimeZone *serializationTimeZone;
/**
* Sets API key
*

View File

@ -31,6 +31,11 @@ extern NSString * const kSWGApplicationJSONType;
*/
- (NSString *) parameterToString: (id) param;
/**
* Convert date to NSString
*/
+ (NSString *)dateToString:(id)date;
/**
* Detects Accept header from accepts NSArray
*

View File

@ -1,6 +1,7 @@
#import "SWGSanitizer.h"
#import "SWGObject.h"
#import "SWGQueryParamCollection.h"
#import "SWGDefaultConfiguration.h"
#import <ISO8601/ISO8601.h>
NSString * const kSWGApplicationJSONType = @"application/json";
@ -63,7 +64,7 @@ NSString * SWGPercentEscapedStringFromString(NSString *string) {
return object;
}
else if ([object isKindOfClass:[NSDate class]]) {
return [self dateParameterToString:object];
return [SWGSanitizer dateToString:object];
}
else if ([object isKindOfClass:[NSArray class]]) {
NSArray *objectArray = object;
@ -107,7 +108,7 @@ NSString * SWGPercentEscapedStringFromString(NSString *string) {
return [param stringValue];
}
else if ([param isKindOfClass:[NSDate class]]) {
return [self dateParameterToString:param];
return [SWGSanitizer dateToString:param];
}
else if ([param isKindOfClass:[NSArray class]]) {
NSMutableArray *mutableParam = [NSMutableArray array];
@ -125,8 +126,9 @@ NSString * SWGPercentEscapedStringFromString(NSString *string) {
}
}
- (NSString *)dateParameterToString:(id)param {
return [param ISO8601String];
+ (NSString *)dateToString:(id)date {
NSTimeZone* timeZone = [SWGDefaultConfiguration sharedConfig].serializationTimeZone;
return [date ISO8601StringWithTimeZone:timeZone usingCalendar:nil];
}
#pragma mark - Utility Methods

View File

@ -16,6 +16,7 @@
@protocol SWGReturn
@end

View File

@ -1,5 +1,6 @@
#import <ISO8601/NSDate+ISO8601.h>
#import "JSONValueTransformer+ISO8601.h"
#import "SWGSanitizer.h"
@implementation JSONValueTransformer (ISO8601)
@ -8,4 +9,9 @@
return [NSDate dateWithISO8601String:string];
}
- (NSString *)JSONObjectFromNSDate:(NSDate *)date
{
return [SWGSanitizer dateToString:date];
}
@end

View File

@ -85,6 +85,11 @@
*/
@property (nonatomic) NSString *sslCaCert;
/**
* The time zone to use for date serialization
*/
@property (nonatomic) NSTimeZone *serializationTimeZone;
/**
* Sets API key
*

View File

@ -31,6 +31,11 @@ extern NSString * const kSWGApplicationJSONType;
*/
- (NSString *) parameterToString: (id) param;
/**
* Convert date to NSString
*/
+ (NSString *)dateToString:(id)date;
/**
* Detects Accept header from accepts NSArray
*

View File

@ -1,6 +1,7 @@
#import "SWGSanitizer.h"
#import "SWGObject.h"
#import "SWGQueryParamCollection.h"
#import "SWGDefaultConfiguration.h"
#import <ISO8601/ISO8601.h>
NSString * const kSWGApplicationJSONType = @"application/json";
@ -63,7 +64,7 @@ NSString * SWGPercentEscapedStringFromString(NSString *string) {
return object;
}
else if ([object isKindOfClass:[NSDate class]]) {
return [self dateParameterToString:object];
return [SWGSanitizer dateToString:object];
}
else if ([object isKindOfClass:[NSArray class]]) {
NSArray *objectArray = object;
@ -107,7 +108,7 @@ NSString * SWGPercentEscapedStringFromString(NSString *string) {
return [param stringValue];
}
else if ([param isKindOfClass:[NSDate class]]) {
return [self dateParameterToString:param];
return [SWGSanitizer dateToString:param];
}
else if ([param isKindOfClass:[NSArray class]]) {
NSMutableArray *mutableParam = [NSMutableArray array];
@ -125,8 +126,9 @@ NSString * SWGPercentEscapedStringFromString(NSString *string) {
}
}
- (NSString *)dateParameterToString:(id)param {
return [param ISO8601String];
+ (NSString *)dateToString:(id)date {
NSTimeZone* timeZone = [SWGDefaultConfiguration sharedConfig].serializationTimeZone;
return [date ISO8601StringWithTimeZone:timeZone usingCalendar:nil];
}
#pragma mark - Utility Methods

View File

@ -1,5 +1,6 @@
#import <ISO8601/NSDate+ISO8601.h>
#import "JSONValueTransformer+ISO8601.h"
#import "SWGSanitizer.h"
@implementation JSONValueTransformer (ISO8601)
@ -8,4 +9,9 @@
return [NSDate dateWithISO8601String:string];
}
- (NSString *)JSONObjectFromNSDate:(NSDate *)date
{
return [SWGSanitizer dateToString:date];
}
@end

View File

@ -85,6 +85,11 @@
*/
@property (nonatomic) NSString *sslCaCert;
/**
* The time zone to use for date serialization
*/
@property (nonatomic) NSTimeZone *serializationTimeZone;
/**
* Sets API key
*

View File

@ -31,6 +31,11 @@ extern NSString * const kSWGApplicationJSONType;
*/
- (NSString *) parameterToString: (id) param;
/**
* Convert date to NSString
*/
+ (NSString *)dateToString:(id)date;
/**
* Detects Accept header from accepts NSArray
*

View File

@ -1,6 +1,7 @@
#import "SWGSanitizer.h"
#import "SWGObject.h"
#import "SWGQueryParamCollection.h"
#import "SWGDefaultConfiguration.h"
#import <ISO8601/ISO8601.h>
NSString * const kSWGApplicationJSONType = @"application/json";
@ -63,7 +64,7 @@ NSString * SWGPercentEscapedStringFromString(NSString *string) {
return object;
}
else if ([object isKindOfClass:[NSDate class]]) {
return [self dateParameterToString:object];
return [SWGSanitizer dateToString:object];
}
else if ([object isKindOfClass:[NSArray class]]) {
NSArray *objectArray = object;
@ -107,7 +108,7 @@ NSString * SWGPercentEscapedStringFromString(NSString *string) {
return [param stringValue];
}
else if ([param isKindOfClass:[NSDate class]]) {
return [self dateParameterToString:param];
return [SWGSanitizer dateToString:param];
}
else if ([param isKindOfClass:[NSArray class]]) {
NSMutableArray *mutableParam = [NSMutableArray array];
@ -125,8 +126,9 @@ NSString * SWGPercentEscapedStringFromString(NSString *string) {
}
}
- (NSString *)dateParameterToString:(id)param {
return [param ISO8601String];
+ (NSString *)dateToString:(id)date {
NSTimeZone* timeZone = [SWGDefaultConfiguration sharedConfig].serializationTimeZone;
return [date ISO8601StringWithTimeZone:timeZone usingCalendar:nil];
}
#pragma mark - Utility Methods

View File

@ -534,7 +534,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 7.1;
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
TARGETED_DEVICE_FAMILY = "1,2";
@ -567,7 +567,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 7.1;
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
SDKROOT = iphoneos;
TARGETED_DEVICE_FAMILY = "1,2";
VALIDATE_PRODUCT = YES;

View File

@ -154,11 +154,11 @@
// NSDate
data = [NSDate dateWithISO8601String:@"1997-07-16T19:20:30.45+01:00"];
result = [self.apiClient.sanitizer sanitizeForSerialization:data];
XCTAssertEqualObjects(result, [data ISO8601String]);
XCTAssertEqualObjects(result, [data ISO8601StringWithTimeZone:nil usingCalendar:nil]);
data = [NSDate dateWithISO8601String:@"1997-07-16"];
result = [self.apiClient.sanitizer sanitizeForSerialization:data];
XCTAssertEqualObjects(result, [data ISO8601String]);
XCTAssertEqualObjects(result, [data ISO8601StringWithTimeZone:nil usingCalendar:nil]);
// model
NSDictionary *petDict = @{@"id": @1, @"name": @"monkey",