From 6e192c50d992ecb9b2141784eed384c19a9f1d18 Mon Sep 17 00:00:00 2001 From: Kevin Renskers Date: Wed, 19 Dec 2012 13:59:43 +0000 Subject: [PATCH] 0.3.0: changed the prefix method into a transformKey: method call [backwards incompatible] --- CHANGELOG | 3 +++ Example/AppDelegate.m | 8 ++++---- Example/ExampleTests/ExampleTests.m | 16 ++++++++-------- Example/GVUserDefaults+Properties.m | 5 +++-- GVUserDefaults.podspec | 2 +- GVUserDefaults/GVUserDefaults.m | 15 ++++++++------- README.md | 11 ++++++----- 7 files changed, 33 insertions(+), 27 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 3ab6c9a..4dc3f80 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,6 @@ +0.3.0 - December 19, 2012 +- Changed the prefix method into a transformKey: method call [backwards incompatible] + 0.2.0 - December 19, 2012 - Don't automatically synchronize in the setter - Performance logging in the example app diff --git a/Example/AppDelegate.m b/Example/AppDelegate.m index 9888157..f00467c 100644 --- a/Example/AppDelegate.m +++ b/Example/AppDelegate.m @@ -13,12 +13,12 @@ - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { NSDictionary *defaults = @{ - @"NSUSerDefault:userName": @"default", - @"NSUSerDefault:userId": @1 + @"NSUserDefaultUserName": @"default", + @"NSUserDefaultUserId": @1 }; - [[NSUserDefaults standardUserDefaults] removeObjectForKey:@"NSUSerDefault:userName"]; - [[NSUserDefaults standardUserDefaults] removeObjectForKey:@"NSUSerDefault:userId"]; + [[NSUserDefaults standardUserDefaults] removeObjectForKey:@"NSUserDefaultUserName"]; + [[NSUserDefaults standardUserDefaults] removeObjectForKey:@"NSUserDefaultUserId"]; [[NSUserDefaults standardUserDefaults] registerDefaults:defaults]; self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; diff --git a/Example/ExampleTests/ExampleTests.m b/Example/ExampleTests/ExampleTests.m index a54f107..bd9d47d 100644 --- a/Example/ExampleTests/ExampleTests.m +++ b/Example/ExampleTests/ExampleTests.m @@ -15,18 +15,18 @@ [super setUp]; NSDictionary *defaults = @{ - @"NSUSerDefault:userName": @"default", - @"NSUSerDefault:userId": @1 + @"NSUserDefaultUserName": @"default", + @"NSUserDefaultUserId": @1 }; - [[NSUserDefaults standardUserDefaults] removeObjectForKey:@"NSUSerDefault:userName"]; - [[NSUserDefaults standardUserDefaults] removeObjectForKey:@"NSUSerDefault:userId"]; + [[NSUserDefaults standardUserDefaults] removeObjectForKey:@"NSUserDefaultUserName"]; + [[NSUserDefaults standardUserDefaults] removeObjectForKey:@"NSUserDefaultUserId"]; [[NSUserDefaults standardUserDefaults] registerDefaults:defaults]; } - (void)tearDown { - [[NSUserDefaults standardUserDefaults] removeObjectForKey:@"NSUSerDefault:userName"]; - [[NSUserDefaults standardUserDefaults] removeObjectForKey:@"NSUSerDefault:userId"]; + [[NSUserDefaults standardUserDefaults] removeObjectForKey:@"NSUserDefaultUserName"]; + [[NSUserDefaults standardUserDefaults] removeObjectForKey:@"NSUserDefaultUserId"]; [super tearDown]; } @@ -44,8 +44,8 @@ } - (void)testGetters { - STAssertEqualObjects([GVUserDefaults standardUserDefaults].userName, [[NSUserDefaults standardUserDefaults] objectForKey:@"NSUSerDefault:userName"], nil); - STAssertEqualObjects([GVUserDefaults standardUserDefaults].userId, [[NSUserDefaults standardUserDefaults] objectForKey:@"NSUSerDefault:userId"], nil); + STAssertEqualObjects([GVUserDefaults standardUserDefaults].userName, [[NSUserDefaults standardUserDefaults] objectForKey:@"NSUserDefaultUserName"], nil); + STAssertEqualObjects([GVUserDefaults standardUserDefaults].userId, [[NSUserDefaults standardUserDefaults] objectForKey:@"NSUserDefaultUserId"], nil); } @end diff --git a/Example/GVUserDefaults+Properties.m b/Example/GVUserDefaults+Properties.m index 604d1a9..249c654 100644 --- a/Example/GVUserDefaults+Properties.m +++ b/Example/GVUserDefaults+Properties.m @@ -10,8 +10,9 @@ @implementation GVUserDefaults (Properties) -- (NSString *)prefix { - return @"NSUSerDefault:"; +- (NSString *)transformKey:(NSString *)key { + key = [key stringByReplacingCharactersInRange:NSMakeRange(0,1) withString:[[key substringToIndex:1] uppercaseString]]; + return [NSString stringWithFormat:@"NSUserDefault%@", key]; } @dynamic userName; diff --git a/GVUserDefaults.podspec b/GVUserDefaults.podspec index 4761294..669cfec 100644 --- a/GVUserDefaults.podspec +++ b/GVUserDefaults.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |s| s.name = "GVUserDefaults" - s.version = "0.2.0" + s.version = "0.3.0" s.summary = "NSUserDefaults access via properties." s.homepage = "https://github.com/gangverk/GVUserDefaults" s.license = 'MIT' diff --git a/GVUserDefaults/GVUserDefaults.m b/GVUserDefaults/GVUserDefaults.m index 0fce245..90496ee 100644 --- a/GVUserDefaults/GVUserDefaults.m +++ b/GVUserDefaults/GVUserDefaults.m @@ -21,7 +21,7 @@ + (BOOL)resolveInstanceMethod:(SEL)aSEL { NSString *method = NSStringFromSelector(aSEL); - if ([method isEqualToString:@"prefix"]) { + if ([method isEqualToString:@"transformKey"]) { // Prevent endless loop for possibly non-existing prefix method return [super resolveInstanceMethod:aSEL]; } @@ -35,16 +35,17 @@ } } -- (NSString *)getPrefix { - if ([self respondsToSelector:@selector(prefix)]) { - return [self performSelector:@selector(prefix)]; +- (NSString *)_transformKey:(NSString *)key { + if ([self respondsToSelector:@selector(transformKey:)]) { + return [self performSelector:@selector(transformKey:) withObject:key]; } - return @""; + return key; } id accessorGetter(id self, SEL _cmd) { - NSString *key = [NSString stringWithFormat:@"%@%@", [self getPrefix], NSStringFromSelector(_cmd)]; + NSString *key = NSStringFromSelector(_cmd); + key = [self _transformKey:key]; return [[NSUserDefaults standardUserDefaults] objectForKey:key]; } @@ -52,7 +53,7 @@ void accessorSetter(id self, SEL _cmd, id newValue) { NSString *method = NSStringFromSelector(_cmd); NSString *key = [[method stringByReplacingCharactersInRange:NSMakeRange(0, 3) withString:@""] stringByReplacingOccurrencesOfString:@":" withString:@""]; key = [key stringByReplacingCharactersInRange:NSMakeRange(0,1) withString:[[key substringToIndex:1] lowercaseString]]; - key = [NSString stringWithFormat:@"%@%@", [self getPrefix], key]; + key = [self _transformKey:key]; // Set value of the key anID to newValue [[NSUserDefaults standardUserDefaults] setObject:newValue forKey:key]; diff --git a/README.md b/README.md index b56c78e..44d7da3 100644 --- a/README.md +++ b/README.md @@ -27,18 +27,19 @@ You can even save defaults by setting the property: At this moment only objects can be stored, so no integers or booleans. Just wrap them in an NSNumber. ### Key prefix -The keys in NSUserDefaults are the same name as your properties. If you'd like to prefix them, add a `prefix` method to your category: +The keys in NSUserDefaults are the same name as your properties. If you'd like to prefix or alter them, add a `transformKey:` method to your category. For example, to turn "userName" into "NSUserDefaultUserName": - - (NSString *)prefix { - return @"NSUSerDefault:"; + - (NSString *)transformKey:(NSString *)key { + key = [key stringByReplacingCharactersInRange:NSMakeRange(0,1) withString:[[key substringToIndex:1] uppercaseString]]; + return [NSString stringWithFormat:@"NSUserDefault%@", key]; } ### Registering defaults Registering defaults is done as usual, on NSUserDefaults directly (use the same prefix, if any!). NSDictionary *defaults = @{ - @"NSUSerDefault:userName": @"default", - @"NSUSerDefault:userId": @1 + @"NSUSerDefaultUserName": @"default", + @"NSUSerDefaultUserId": @1 }; [[NSUserDefaults standardUserDefaults] registerDefaults:defaults];