From 003a5a0951ee4af65adafbc3f3e893ed66b3d377 Mon Sep 17 00:00:00 2001 From: "Vitor Navarro (Das Dad)" Date: Fri, 22 Nov 2013 10:03:55 -0200 Subject: [PATCH 1/2] Allow NSManagedObject formatter to be changed * changed defaultFormatter to formatter * added a sharedFormatter getter * exposed setFormatter as public * added two tests to verify date formatting when using setFormatter --- Classes/NSManagedObject+ActiveRecord.h | 4 ++++ Classes/NSManagedObject+ActiveRecord.m | 24 +++++++++++++------ .../FindersAndCreatorsTests.m | 12 ++++++++++ 3 files changed, 33 insertions(+), 7 deletions(-) diff --git a/Classes/NSManagedObject+ActiveRecord.h b/Classes/NSManagedObject+ActiveRecord.h index c04f299..926e3d3 100644 --- a/Classes/NSManagedObject+ActiveRecord.h +++ b/Classes/NSManagedObject+ActiveRecord.h @@ -47,4 +47,8 @@ + (NSString *)entityName; +#pragma mark - Date Formatting + ++ (void)setFormatter:(NSString *)newFormatter; + @end diff --git a/Classes/NSManagedObject+ActiveRecord.m b/Classes/NSManagedObject+ActiveRecord.m index 12d1ab1..55742a3 100644 --- a/Classes/NSManagedObject+ActiveRecord.m +++ b/Classes/NSManagedObject+ActiveRecord.m @@ -219,7 +219,7 @@ - (void)setSafeValue:(id)value forKey:(id)key { value = [NSNumber numberWithDouble:[value doubleValue]]; else if (attributeType == NSDateAttributeType) - value = [self.defaultFormatter dateFromString:value]; + value = [self.formatter dateFromString:value]; } [self setValue:value forKey:key]; @@ -234,15 +234,25 @@ - (BOOL)isIntegerAttributeType:(NSAttributeType)attributeType { #pragma mark - Date Formatting -- (NSDateFormatter *)defaultFormatter { - static NSDateFormatter *sharedFormatter; - static dispatch_once_t singletonToken; +static NSDateFormatter *sharedFormatter; +static dispatch_once_t singletonToken; + ++(NSDateFormatter *)sharedFormatter{ dispatch_once(&singletonToken, ^{ - sharedFormatter = [[NSDateFormatter alloc] init]; - [sharedFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss z"]; + if(!sharedFormatter){ + sharedFormatter = [[NSDateFormatter alloc] init]; + [sharedFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss z"]; + } }); - return sharedFormatter; } +- (NSDateFormatter *)formatter { + return [NSManagedObject sharedFormatter]; +} + ++ (void)setFormatter:(NSString *)newFormatter { + [sharedFormatter setDateFormat:newFormatter]; +} + @end diff --git a/Example/SampleProjectTests/FindersAndCreatorsTests.m b/Example/SampleProjectTests/FindersAndCreatorsTests.m index 312f3cc..6d7fcc8 100644 --- a/Example/SampleProjectTests/FindersAndCreatorsTests.m +++ b/Example/SampleProjectTests/FindersAndCreatorsTests.m @@ -176,6 +176,18 @@ void createSomePeople(NSArray *names, NSArray *surnames, NSManagedObjectContext Person *person = [Person create:@{ @"anniversary": [formatta stringFromDate:date] }]; [[@([date timeIntervalSinceDate:person.anniversary]) should] beLessThan:@1]; }); + + it(@"converts string from specified date format", ^{ + [NSManagedObject setFormatter:@"HH:mm:ss"]; + Person *person = [Person create:@{ @"anniversary": @"12:24:05" }]; + [person.anniversary shouldNotBeNil]; + }); + + it(@"can't convert string from specified date format", ^{ + [NSManagedObject setFormatter:@"yyyy HH:mm:ss"]; + Person *person = [Person create:@{ @"anniversary": @"12:24:05" }]; + [person.anniversary shouldBeNil]; + }); it(@"doesn't update with nulls", ^{ Person *person = fetchUniquePerson(); From bf982b0e3878da61e30fa6b9482c9fe58d7553e6 Mon Sep 17 00:00:00 2001 From: "Vitor Navarro (Das Dad)" Date: Fri, 22 Nov 2013 10:47:11 -0200 Subject: [PATCH 2/2] Change names for convenience * included podfile.lock * fixed call for setDateFormat when there is no sharedFormatter instance yet --- Classes/NSManagedObject+ActiveRecord.h | 2 +- Classes/NSManagedObject+ActiveRecord.m | 8 ++++---- Example/Podfile.lock | 4 ++-- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/Classes/NSManagedObject+ActiveRecord.h b/Classes/NSManagedObject+ActiveRecord.h index 926e3d3..61e6d36 100644 --- a/Classes/NSManagedObject+ActiveRecord.h +++ b/Classes/NSManagedObject+ActiveRecord.h @@ -49,6 +49,6 @@ #pragma mark - Date Formatting -+ (void)setFormatter:(NSString *)newFormatter; ++ (void)setDateFormat:(NSString *)dateFormat; @end diff --git a/Classes/NSManagedObject+ActiveRecord.m b/Classes/NSManagedObject+ActiveRecord.m index 55742a3..8d0e01e 100644 --- a/Classes/NSManagedObject+ActiveRecord.m +++ b/Classes/NSManagedObject+ActiveRecord.m @@ -219,7 +219,7 @@ - (void)setSafeValue:(id)value forKey:(id)key { value = [NSNumber numberWithDouble:[value doubleValue]]; else if (attributeType == NSDateAttributeType) - value = [self.formatter dateFromString:value]; + value = [self.dateFormatter dateFromString:value]; } [self setValue:value forKey:key]; @@ -247,12 +247,12 @@ +(NSDateFormatter *)sharedFormatter{ return sharedFormatter; } -- (NSDateFormatter *)formatter { +- (NSDateFormatter *)dateFormatter { return [NSManagedObject sharedFormatter]; } -+ (void)setFormatter:(NSString *)newFormatter { - [sharedFormatter setDateFormat:newFormatter]; ++ (void)setDateFormat:(NSString *)dateFormat { + [[NSManagedObject sharedFormatter] setDateFormat:dateFormat]; } @end diff --git a/Example/Podfile.lock b/Example/Podfile.lock index 2f90c60..0313ddf 100644 --- a/Example/Podfile.lock +++ b/Example/Podfile.lock @@ -1,6 +1,6 @@ PODS: - Kiwi (2.1) - - ObjectiveRecord (1.3.1): + - ObjectiveRecord (1.4.0): - ObjectiveSugar - ObjectiveSugar (0.8) @@ -15,7 +15,7 @@ EXTERNAL SOURCES: SPEC CHECKSUMS: Kiwi: 054ef97d0e50c279b21113a0880a906fa153a7fd - ObjectiveRecord: 3a196d1c853a315919951905babdb073df915cd6 + ObjectiveRecord: 109a6c583284c2c9af1dc0d6ccc1dfc84e826c45 ObjectiveSugar: 101df0252a4a9b7eab2e20bf1cd444bfaec2a02b COCOAPODS: 0.26.2