From 58784dda8a36dd938f6876be6efbcf7980eb9eb8 Mon Sep 17 00:00:00 2001 From: Giuseppe Nucifora Date: Sat, 16 Jan 2016 14:04:43 +0100 Subject: [PATCH] - Add save object --- Example/Pods/Pods.xcodeproj/project.pbxproj | 4 ++ Pod/Classes/PNObject.h | 1 + Pod/Classes/PNObject.m | 1 + Pod/Classes/PNObjectConfig.m | 1 + Pod/Classes/PNObjectConstants.h | 32 ++++++++++++ Pod/Classes/PNObjectModel.m | 55 +++++++++++++-------- Pod/Classes/PNObjectProperty.m | 1 + 7 files changed, 74 insertions(+), 21 deletions(-) create mode 100644 Pod/Classes/PNObjectConstants.h diff --git a/Example/Pods/Pods.xcodeproj/project.pbxproj b/Example/Pods/Pods.xcodeproj/project.pbxproj index b62a065..1a569f8 100644 --- a/Example/Pods/Pods.xcodeproj/project.pbxproj +++ b/Example/Pods/Pods.xcodeproj/project.pbxproj @@ -106,6 +106,7 @@ 66A27898E989A3FA5C15AA671C4536F0 /* EXPMatchers+beIdenticalTo.m in Sources */ = {isa = PBXBuildFile; fileRef = E7CB47106AF4B40907E0AC403B71A12D /* EXPMatchers+beIdenticalTo.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; 67459AD239EF669A365519E06B45DCFE /* EXPExpect.h in Headers */ = {isa = PBXBuildFile; fileRef = EDA6ADC12D0F7F372DAC9AA34A385C83 /* EXPExpect.h */; settings = {ATTRIBUTES = (Public, ); }; }; 68152D921ABF6A423C192C04FDF94F0F /* AFNetworkReachabilityManager.h in Headers */ = {isa = PBXBuildFile; fileRef = A9018295309C54342B542AF7EF6F6AD3 /* AFNetworkReachabilityManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6846FE0B1C4A724600FD46A7 /* PNObjectConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 6846FE0A1C4A724600FD46A7 /* PNObjectConstants.h */; }; 68A38977EBAE334DC3C22386D00D2622 /* AFNetworkReachabilityManager.m in Sources */ = {isa = PBXBuildFile; fileRef = DB6BF369FA7CF0E57D30200E38DD31FE /* AFNetworkReachabilityManager.m */; }; 6C6683061BF6E6BFABB75E4CE8D0C5EA /* PNObject-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 4D21BA597DC54DA5B79874658C865E54 /* PNObject-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; 6DAD2AD4B15B5665B1F434A1EDB9C5C5 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CAF17A9413D14E8EBEA17A44DF4A4E1F /* Foundation.framework */; }; @@ -532,6 +533,7 @@ 64F181C4266B43CBF7F66042F6B4EF46 /* Expecta+Snapshots.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = "Expecta+Snapshots.modulemap"; sourceTree = ""; }; 65A8FF91F982A99C2CC3DC728DDCDDA5 /* Specta.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = Specta.modulemap; sourceTree = ""; }; 66590AAD995CB7EE2733821FE60E2C5F /* FBSnapshotTestCase.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = FBSnapshotTestCase.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 6846FE0A1C4A724600FD46A7 /* PNObjectConstants.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PNObjectConstants.h; sourceTree = ""; }; 6B05EF3E8CCDE4C8342C989CA6DE8820 /* AFURLResponseSerialization.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFURLResponseSerialization.m; path = AFNetworking/AFURLResponseSerialization.m; sourceTree = ""; }; 6CBABE38C1F703FF64221A82A7BB552B /* nv-ios-http-status-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "nv-ios-http-status-dummy.m"; sourceTree = ""; }; 6F9A9085A2C4E4521E9014094D0BE101 /* EXPMatchers+postNotification.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+postNotification.m"; path = "Expecta/Matchers/EXPMatchers+postNotification.m"; sourceTree = ""; }; @@ -1256,6 +1258,7 @@ 9704B49B5CDDDC3EFE793A7E464FBAA6 /* PNObjectModel.m */, 00C1D1960D5C260186086329FF4D122C /* PNObjectProperty.h */, 735DCF449255661E1EABF73A78597DD4 /* PNObjectProperty.m */, + 6846FE0A1C4A724600FD46A7 /* PNObjectConstants.h */, F6CCAD15E2935EF6DA7FD0230FEA9FD4 /* User */, ); path = Classes; @@ -1583,6 +1586,7 @@ files = ( E08E4821C7EA5423B194BA3D6D8F5A08 /* PNAddress.h in Headers */, 60FD026D88EBBC2928E1EC08B6047225 /* PNLocation.h in Headers */, + 6846FE0B1C4A724600FD46A7 /* PNObjectConstants.h in Headers */, 6C6683061BF6E6BFABB75E4CE8D0C5EA /* PNObject-umbrella.h in Headers */, D209A2832E3A33F1A12EB9BDC5F17C61 /* PNObject.h in Headers */, 4FCC820B8951AFC4E77854084F3DBF39 /* PNObjectConfig.h in Headers */, diff --git a/Pod/Classes/PNObject.h b/Pod/Classes/PNObject.h index 5af8b1a..93ff77e 100644 --- a/Pod/Classes/PNObject.h +++ b/Pod/Classes/PNObject.h @@ -10,6 +10,7 @@ #import "PNObjectConfig.h" #import "PNObjectModel.h" + @protocol PNObjectSubclassing @required diff --git a/Pod/Classes/PNObject.m b/Pod/Classes/PNObject.m index e02f61e..0f1783b 100644 --- a/Pod/Classes/PNObject.m +++ b/Pod/Classes/PNObject.m @@ -11,6 +11,7 @@ #import #import #import "PNObject/PNUser.h" +#import "PNObjectConstants.h" #define PNOBJECT_DIR @"PNObjects" diff --git a/Pod/Classes/PNObjectConfig.m b/Pod/Classes/PNObjectConfig.m index c282bb9..d8dd0b1 100644 --- a/Pod/Classes/PNObjectConfig.m +++ b/Pod/Classes/PNObjectConfig.m @@ -7,6 +7,7 @@ // #import "PNObjectConfig.h" +#import "PNObjectConstants.h" NSString* const EnvironmentProduction = @"PNObjectConfigEnvProduction"; NSString* const EnvironmentStage = @"PNObjectConfigEnvStage"; diff --git a/Pod/Classes/PNObjectConstants.h b/Pod/Classes/PNObjectConstants.h new file mode 100644 index 0000000..c88b5c9 --- /dev/null +++ b/Pod/Classes/PNObjectConstants.h @@ -0,0 +1,32 @@ +// +// PNObjectConstants.h +// Pods +// +// Created by Giuseppe Nucifora on 16/01/16. +// +// + +#import "HTTPStatusCodes.h" + +#ifndef PNObjectConstants_h + +#define PNObjectConstants_h + +#pragma mark Constants + +#define DEF_DOCUMENT_ROOT @"Documents" + +#pragma mark - + +#pragma mark NSLogDebug Macro + +#define FORCE_NO_LOG 0 + +#if defined(FORCE_NO_LOG) && FORCE_NO_LOG == 0 +#define NSLogDebug(format, ...) NSLog(@"<%s:%d> %s, " format, strrchr("/" __FILE__, '/') + 1, __LINE__, __PRETTY_FUNCTION__, ## __VA_ARGS__) +#else +#define NSLogDebug(format, ...) +#endif + + +#endif diff --git a/Pod/Classes/PNObjectModel.m b/Pod/Classes/PNObjectModel.m index 154f3a9..b80f61b 100644 --- a/Pod/Classes/PNObjectModel.m +++ b/Pod/Classes/PNObjectModel.m @@ -9,8 +9,7 @@ #import "PNObjectModel.h" #import "PNObject.h" #import "PEARFileManager.h" - -#define DEF_DOCUMENT_ROOT @"Documents" +#import "PNObjectConstants.h" @interface PNObjectModel() @@ -118,30 +117,44 @@ static bool isFirstAccess = YES; if ([[object class] conformsToProtocol:@protocol(PNObjectSubclassing)]) { + id value; + + SEL selector = NSSelectorFromString(@"getObject"); + NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:[[PNObject class] instanceMethodSignatureForSelector:selector]]; + [invocation setSelector:selector]; + [invocation setTarget:value]; + [invocation invoke]; + + NSDictionary *objectDict; + [invocation getReturnValue:&objectDict]; + + NSLogDebug(@"%@",objectDict); + + NSData *objectData = [NSKeyedArchiver archivedDataWithRootObject:objectDict]; + if ([self issetPNObjectModelForObject:object]) { - - - id value; - - SEL selector = NSSelectorFromString(@"getObject"); - NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:[[PNObject class] instanceMethodSignatureForSelector:selector]]; - [invocation setSelector:selector]; - [invocation setTarget:value]; - [invocation invoke]; - - NSDictionary *objectDict; - [invocation getReturnValue:&objectDict]; - - NSLogDebug(@"%@",objectDict); - - NSData *objectData = [NSKeyedArchiver archivedDataWithRootObject:objectDict]; - - [_fileManager updateFileWithData:objectData filePath:[self objectName:object] permisson:@(0755)]; + if ([_fileManager updateFileWithData:objectData filePath:[self objectName:object] permisson:@(0755)]) { + return object; + } + else { + return [NSError errorWithDomain:NSLocalizedString(@"Object cannot be updated", @"") code:kHTTPStatusCodeBadRequest userInfo:nil]; + } } + else { + if ([_fileManager createFileWithData:objectData filePath:[self objectName:object] permisson:@(0755)]) { + return object; + } + else { + return [NSError errorWithDomain:NSLocalizedString(@"Object cannot be created", @"") code:kHTTPStatusCodeBadRequest userInfo:nil]; + } + } + } + else { + return [NSError errorWithDomain:NSLocalizedString(@"passed object is not conform to protocol PNObjectSubclassing", @"") code:kHTTPStatusCodeBadRequest userInfo:nil]; } } else { - return [NSError errorWithDomain:NSLocalizedString(@"", @"") code:<#(NSInteger)#> userInfo:<#(nullable NSDictionary *)#>] + return [NSError errorWithDomain:NSLocalizedString(@"passed object is not PNObject Subclass", @"") code:kHTTPStatusCodeBadRequest userInfo:nil]; } } diff --git a/Pod/Classes/PNObjectProperty.m b/Pod/Classes/PNObjectProperty.m index 567966c..eab60fb 100755 --- a/Pod/Classes/PNObjectProperty.m +++ b/Pod/Classes/PNObjectProperty.m @@ -8,6 +8,7 @@ #import "PNObjectProperty.h" #import "objc/runtime.h" +#import "PNObjectConstants.h" @implementation PNObjectProperty