diff --git a/CoreStore.xcodeproj/project.pbxproj b/CoreStore.xcodeproj/project.pbxproj index 269d8cb..94b9709 100644 --- a/CoreStore.xcodeproj/project.pbxproj +++ b/CoreStore.xcodeproj/project.pbxproj @@ -16,7 +16,6 @@ 82BA18A11C4BBD1D00A0916E /* CoreStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2F291E2619C6D3CF007AF63F /* CoreStore.swift */; }; 82BA18A21C4BBD1D00A0916E /* CoreStoreError.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5D1E22B19FA9FBC003B2874 /* CoreStoreError.swift */; }; 82BA18A31C4BBD2200A0916E /* DataStack.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E84EDB1AFF84500064E85B /* DataStack.swift */; }; - 82BA18A41C4BBD2200A0916E /* SetupResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E84EDE1AFF84500064E85B /* SetupResult.swift */; }; 82BA18A51C4BBD2200A0916E /* CoreStore+Setup.swift in Sources */ = {isa = PBXBuildFile; fileRef = B504D0D51B02362500B2BBB1 /* CoreStore+Setup.swift */; }; 82BA18A61C4BBD2900A0916E /* DefaultLogger.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E84EE31AFF84610064E85B /* DefaultLogger.swift */; }; 82BA18A71C4BBD2900A0916E /* CoreStore+Logging.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E84EE41AFF84610064E85B /* CoreStore+Logging.swift */; }; @@ -94,7 +93,6 @@ B52DD1941BE1F92500949AFE /* CoreStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2F291E2619C6D3CF007AF63F /* CoreStore.swift */; }; B52DD1951BE1F92500949AFE /* CoreStoreError.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5D1E22B19FA9FBC003B2874 /* CoreStoreError.swift */; }; B52DD1961BE1F92500949AFE /* DataStack.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E84EDB1AFF84500064E85B /* DataStack.swift */; }; - B52DD1971BE1F92500949AFE /* SetupResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E84EDE1AFF84500064E85B /* SetupResult.swift */; }; B52DD1981BE1F92500949AFE /* CoreStore+Setup.swift in Sources */ = {isa = PBXBuildFile; fileRef = B504D0D51B02362500B2BBB1 /* CoreStore+Setup.swift */; }; B52DD1991BE1F92800949AFE /* DefaultLogger.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E84EE31AFF84610064E85B /* DefaultLogger.swift */; }; B52DD19A1BE1F92800949AFE /* CoreStore+Logging.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E84EE41AFF84610064E85B /* CoreStore+Logging.swift */; }; @@ -157,6 +155,14 @@ B546F96F1C9B14AC00D5AC55 /* CSStorageInterface.swift in Sources */ = {isa = PBXBuildFile; fileRef = B546F96D1C9B14AC00D5AC55 /* CSStorageInterface.swift */; }; B546F9701C9B14AC00D5AC55 /* CSStorageInterface.swift in Sources */ = {isa = PBXBuildFile; fileRef = B546F96D1C9B14AC00D5AC55 /* CSStorageInterface.swift */; }; B546F9711C9B14AC00D5AC55 /* CSStorageInterface.swift in Sources */ = {isa = PBXBuildFile; fileRef = B546F96D1C9B14AC00D5AC55 /* CSStorageInterface.swift */; }; + B546F9731C9C553300D5AC55 /* SetupResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = B546F9721C9C553300D5AC55 /* SetupResult.swift */; }; + B546F9741C9C553300D5AC55 /* SetupResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = B546F9721C9C553300D5AC55 /* SetupResult.swift */; }; + B546F9751C9C553300D5AC55 /* SetupResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = B546F9721C9C553300D5AC55 /* SetupResult.swift */; }; + B546F9761C9C553300D5AC55 /* SetupResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = B546F9721C9C553300D5AC55 /* SetupResult.swift */; }; + B546F9781C9CD1F800D5AC55 /* CSCoreStoreLogger.swift in Sources */ = {isa = PBXBuildFile; fileRef = B546F9771C9CD1F800D5AC55 /* CSCoreStoreLogger.swift */; }; + B546F9791C9CD1F800D5AC55 /* CSCoreStoreLogger.swift in Sources */ = {isa = PBXBuildFile; fileRef = B546F9771C9CD1F800D5AC55 /* CSCoreStoreLogger.swift */; }; + B546F97A1C9CD1F800D5AC55 /* CSCoreStoreLogger.swift in Sources */ = {isa = PBXBuildFile; fileRef = B546F9771C9CD1F800D5AC55 /* CSCoreStoreLogger.swift */; }; + B546F97B1C9CD1F800D5AC55 /* CSCoreStoreLogger.swift in Sources */ = {isa = PBXBuildFile; fileRef = B546F9771C9CD1F800D5AC55 /* CSCoreStoreLogger.swift */; }; B54A6A551BA15F2A007870FD /* FetchedResultsControllerDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = B54A6A541BA15F2A007870FD /* FetchedResultsControllerDelegate.swift */; }; B5598BCC1BE2093D0092EFCE /* Model.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = B5D372821A39CD6900F583D9 /* Model.xcdatamodeld */; }; B56007111B3F6BD500A9A8F9 /* Into.swift in Sources */ = {isa = PBXBuildFile; fileRef = B56007101B3F6BD500A9A8F9 /* Into.swift */; }; @@ -168,7 +174,6 @@ B563217F1BD65216006C9394 /* CoreStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2F291E2619C6D3CF007AF63F /* CoreStore.swift */; }; B56321801BD65216006C9394 /* CoreStoreError.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5D1E22B19FA9FBC003B2874 /* CoreStoreError.swift */; }; B56321811BD65216006C9394 /* DataStack.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E84EDB1AFF84500064E85B /* DataStack.swift */; }; - B56321821BD65216006C9394 /* SetupResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E84EDE1AFF84500064E85B /* SetupResult.swift */; }; B56321831BD65216006C9394 /* CoreStore+Setup.swift in Sources */ = {isa = PBXBuildFile; fileRef = B504D0D51B02362500B2BBB1 /* CoreStore+Setup.swift */; }; B56321841BD65216006C9394 /* DefaultLogger.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E84EE31AFF84610064E85B /* DefaultLogger.swift */; }; B56321851BD65216006C9394 /* CoreStore+Logging.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E84EE41AFF84610064E85B /* CoreStore+Logging.swift */; }; @@ -268,7 +273,6 @@ B5E834B91B76311F001D3D50 /* BaseDataTransaction+Importing.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E834B81B76311F001D3D50 /* BaseDataTransaction+Importing.swift */; }; B5E834BB1B7691F3001D3D50 /* Functions.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E834BA1B7691F3001D3D50 /* Functions.swift */; }; B5E84EDF1AFF84500064E85B /* DataStack.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E84EDB1AFF84500064E85B /* DataStack.swift */; }; - B5E84EE11AFF84500064E85B /* SetupResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E84EDE1AFF84500064E85B /* SetupResult.swift */; }; B5E84EE61AFF84610064E85B /* DefaultLogger.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E84EE31AFF84610064E85B /* DefaultLogger.swift */; }; B5E84EE71AFF84610064E85B /* CoreStore+Logging.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E84EE41AFF84610064E85B /* CoreStore+Logging.swift */; }; B5E84EE81AFF84610064E85B /* CoreStoreLogger.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E84EE51AFF84610064E85B /* CoreStoreLogger.swift */; }; @@ -375,6 +379,8 @@ B546F95C1C9A12B800D5AC55 /* CSSQliteStore.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CSSQliteStore.swift; sourceTree = ""; }; B546F9681C9AF26D00D5AC55 /* CSInMemoryStore.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CSInMemoryStore.swift; sourceTree = ""; }; B546F96D1C9B14AC00D5AC55 /* CSStorageInterface.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CSStorageInterface.swift; sourceTree = ""; }; + B546F9721C9C553300D5AC55 /* SetupResult.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SetupResult.swift; sourceTree = ""; }; + B546F9771C9CD1F800D5AC55 /* CSCoreStoreLogger.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CSCoreStoreLogger.swift; sourceTree = ""; }; B54A6A541BA15F2A007870FD /* FetchedResultsControllerDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FetchedResultsControllerDelegate.swift; sourceTree = ""; }; B5548CD51BD65AE00077652A /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; B5548CD71BD65AE50077652A /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/System/Library/Frameworks/CoreData.framework; sourceTree = DEVELOPER_DIR; }; @@ -414,7 +420,6 @@ B5E84ED81AFF82360064E85B /* README.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = SOURCE_ROOT; }; B5E84ED91AFF82360064E85B /* LICENSE */ = {isa = PBXFileReference; lastKnownFileType = text; path = LICENSE; sourceTree = SOURCE_ROOT; }; B5E84EDB1AFF84500064E85B /* DataStack.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DataStack.swift; sourceTree = ""; }; - B5E84EDE1AFF84500064E85B /* SetupResult.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SetupResult.swift; sourceTree = ""; }; B5E84EE31AFF84610064E85B /* DefaultLogger.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DefaultLogger.swift; sourceTree = ""; }; B5E84EE41AFF84610064E85B /* CoreStore+Logging.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "CoreStore+Logging.swift"; sourceTree = ""; }; B5E84EE51AFF84610064E85B /* CoreStoreLogger.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CoreStoreLogger.swift; sourceTree = ""; }; @@ -558,7 +563,7 @@ 2F03A53519C5C6DA005002A5 /* CoreStore.h */, 2F291E2619C6D3CF007AF63F /* CoreStore.swift */, B5D1E22B19FA9FBC003B2874 /* CoreStoreError.swift */, - B5E84EDA1AFF84500064E85B /* Setting Up */, + B5E84EDA1AFF84500064E85B /* Setup */, B51F25981C5747790083A5DD /* iCloud */, B5E84EE21AFF84610064E85B /* Logging */, B5E84EE91AFF846E0064E85B /* Saving and Processing */, @@ -662,6 +667,7 @@ children = ( B56964D31B22FFAD0075EE4A /* DataStack+Migration.swift */, B5FAD6AD1B518DCB00714891 /* CoreStore+Migration.swift */, + B546F9721C9C553300D5AC55 /* SetupResult.swift */, B56007151B4018AB00A9A8F9 /* MigrationChain.swift */, B5A261201B64BFDB006EB6D3 /* MigrationType.swift */, B56965231B356B820075EE4A /* MigrationResult.swift */, @@ -674,6 +680,7 @@ children = ( B5AEFAB41C9962AE00AD137F /* CoreStoreBridge.swift */, B5DBE2CC1C9914A900B5CEFA /* CSCoreStore.swift */, + B546F9771C9CD1F800D5AC55 /* CSCoreStoreLogger.swift */, B546F9611C9A13F400D5AC55 /* Setup */, ); path = ObjectiveC; @@ -689,15 +696,14 @@ path = "Importing Data"; sourceTree = ""; }; - B5E84EDA1AFF84500064E85B /* Setting Up */ = { + B5E84EDA1AFF84500064E85B /* Setup */ = { isa = PBXGroup; children = ( B504D0D51B02362500B2BBB1 /* CoreStore+Setup.swift */, B5E84EDB1AFF84500064E85B /* DataStack.swift */, - B5E84EDE1AFF84500064E85B /* SetupResult.swift */, B5FE4DA01C84818B00FA6A91 /* StorageInterfaces */, ); - path = "Setting Up"; + path = Setup; sourceTree = ""; }; B5E84EE21AFF84610064E85B /* Logging */ = { @@ -1115,6 +1121,7 @@ B5E84F361AFF85470064E85B /* NSManagedObjectContext+Setup.swift in Sources */, B5FAD6AE1B518DCB00714891 /* CoreStore+Migration.swift in Sources */, B5E84EE71AFF84610064E85B /* CoreStore+Logging.swift in Sources */, + B546F9731C9C553300D5AC55 /* SetupResult.swift in Sources */, B56007111B3F6BD500A9A8F9 /* Into.swift in Sources */, B5E84F111AFF847B0064E85B /* Select.swift in Sources */, B5FE4DA21C8481E100FA6A91 /* StorageInterface.swift in Sources */, @@ -1122,7 +1129,6 @@ B50392F91C478FF3009900CA /* NSManagedObject+Transaction.swift in Sources */, B5202CFA1C04688100DED140 /* NSFetchedResultsController+Convenience.swift in Sources */, B546F96E1C9B14AC00D5AC55 /* CSStorageInterface.swift in Sources */, - B5E84EE11AFF84500064E85B /* SetupResult.swift in Sources */, B5E84F251AFF84860064E85B /* ObjectObserver.swift in Sources */, B5E84F2F1AFF849C0064E85B /* NotificationObserver.swift in Sources */, B5F1DA8D1B9AA97D007C5CBB /* ImportableObject.swift in Sources */, @@ -1155,6 +1161,7 @@ B5E84F101AFF847B0064E85B /* GroupBy.swift in Sources */, B5E84F201AFF84860064E85B /* DataStack+Observing.swift in Sources */, B5E84EF81AFF846E0064E85B /* CoreStore+Transaction.swift in Sources */, + B546F9781C9CD1F800D5AC55 /* CSCoreStoreLogger.swift in Sources */, B5E84F301AFF849C0064E85B /* NSManagedObjectContext+CoreStore.swift in Sources */, B546F9691C9AF26D00D5AC55 /* CSInMemoryStore.swift in Sources */, B5E84F211AFF84860064E85B /* CoreStore+Observing.swift in Sources */, @@ -1208,6 +1215,7 @@ 82BA18CF1C4BBD7100A0916E /* Functions.swift in Sources */, 82BA18A31C4BBD2200A0916E /* DataStack.swift in Sources */, 82BA18C81C4BBD5900A0916E /* MigrationChain.swift in Sources */, + B546F9741C9C553300D5AC55 /* SetupResult.swift in Sources */, 82BA18B11C4BBD3100A0916E /* SaveResult.swift in Sources */, 82BA18DD1C4BBE1400A0916E /* NSFetchedResultsController+Convenience.swift in Sources */, B5FE4DA81C84FB4400FA6A91 /* InMemoryStore.swift in Sources */, @@ -1228,7 +1236,6 @@ B59851491C90289D00C99590 /* NSPersistentStoreCoordinator+Setup.swift in Sources */, B5FEC18F1C9166E600532541 /* NSPersistentStore+Setup.swift in Sources */, 82BA18B71C4BBD3F00A0916E /* CoreStore+Querying.swift in Sources */, - 82BA18A41C4BBD2200A0916E /* SetupResult.swift in Sources */, 82BA18AA1C4BBD3100A0916E /* BaseDataTransaction.swift in Sources */, 82BA18A91C4BBD3100A0916E /* Into.swift in Sources */, 82BA18D11C4BBD7100A0916E /* NotificationObserver.swift in Sources */, @@ -1248,6 +1255,7 @@ 82BA18CB1C4BBD6400A0916E /* NSManagedObject+Convenience.swift in Sources */, 82BA18B51C4BBD3F00A0916E /* BaseDataTransaction+Querying.swift in Sources */, 82BA18D31C4BBD7100A0916E /* NSManagedObjectContext+CoreStore.swift in Sources */, + B546F9791C9CD1F800D5AC55 /* CSCoreStoreLogger.swift in Sources */, 82BA18AD1C4BBD3100A0916E /* UnsafeDataTransaction.swift in Sources */, B546F96A1C9AF26D00D5AC55 /* CSInMemoryStore.swift in Sources */, 82BA18A81C4BBD2900A0916E /* CoreStoreLogger.swift in Sources */, @@ -1283,6 +1291,7 @@ files = ( B5DBE2D01C9914A900B5CEFA /* CSCoreStore.swift in Sources */, B52DD1BE1BE1F94300949AFE /* NSProgress+Convenience.swift in Sources */, + B546F9761C9C553300D5AC55 /* SetupResult.swift in Sources */, B52DD1951BE1F92500949AFE /* CoreStoreError.swift in Sources */, B546F9601C9A12B800D5AC55 /* CSSQliteStore.swift in Sources */, B52DD1C21BE1F94600949AFE /* MigrationManager.swift in Sources */, @@ -1303,7 +1312,6 @@ B52DD1C41BE1F94600949AFE /* NSFileManager+Setup.swift in Sources */, B52DD1AC1BE1F93900949AFE /* Select.swift in Sources */, B5FE4DAF1C85D44E00FA6A91 /* SQLiteStore.swift in Sources */, - B52DD1971BE1F92500949AFE /* SetupResult.swift in Sources */, B52DD1C71BE1F94600949AFE /* NSManagedObjectContext+Querying.swift in Sources */, B52DD1C81BE1F94600949AFE /* NSManagedObjectContext+Setup.swift in Sources */, B52DD1C31BE1F94600949AFE /* NotificationObserver.swift in Sources */, @@ -1337,6 +1345,7 @@ B52DD1C91BE1F94600949AFE /* NSManagedObjectContext+Transaction.swift in Sources */, B52DD19B1BE1F92800949AFE /* CoreStoreLogger.swift in Sources */, B52DD1991BE1F92800949AFE /* DefaultLogger.swift in Sources */, + B546F97B1C9CD1F800D5AC55 /* CSCoreStoreLogger.swift in Sources */, B52DD1B91BE1F94000949AFE /* CoreStore+Migration.swift in Sources */, B5DBE2D51C991B3E00B5CEFA /* CSDataStack.swift in Sources */, B5AEFAB81C9962AE00AD137F /* CoreStoreBridge.swift in Sources */, @@ -1383,6 +1392,7 @@ B56321941BD65216006C9394 /* CoreStore+Querying.swift in Sources */, B56321811BD65216006C9394 /* DataStack.swift in Sources */, B56321A81BD65219006C9394 /* NSManagedObject+Convenience.swift in Sources */, + B546F9751C9C553300D5AC55 /* SetupResult.swift in Sources */, B56321981BD65216006C9394 /* Where.swift in Sources */, B5202CFD1C046E8400DED140 /* NSFetchedResultsController+Convenience.swift in Sources */, B5FE4DA91C84FB4400FA6A91 /* InMemoryStore.swift in Sources */, @@ -1392,7 +1402,6 @@ B546F9701C9B14AC00D5AC55 /* CSStorageInterface.swift in Sources */, B56321971BD65216006C9394 /* Select.swift in Sources */, B56321AB1BD6521C006C9394 /* FetchedResultsControllerDelegate.swift in Sources */, - B56321821BD65216006C9394 /* SetupResult.swift in Sources */, B563219C1BD65216006C9394 /* SectionBy.swift in Sources */, B56321B21BD6521C006C9394 /* NSManagedObjectContext+Querying.swift in Sources */, B5FE4DA41C8481E100FA6A91 /* StorageInterface.swift in Sources */, @@ -1423,6 +1432,7 @@ B56321851BD65216006C9394 /* CoreStore+Logging.swift in Sources */, B56321921BD65216006C9394 /* BaseDataTransaction+Querying.swift in Sources */, B56321B11BD6521C006C9394 /* NSManagedObjectContext+CoreStore.swift in Sources */, + B546F97A1C9CD1F800D5AC55 /* CSCoreStoreLogger.swift in Sources */, B563218D1BD65216006C9394 /* CoreStore+Transaction.swift in Sources */, B546F96B1C9AF26D00D5AC55 /* CSInMemoryStore.swift in Sources */, B563218B1BD65216006C9394 /* UnsafeDataTransaction.swift in Sources */, diff --git a/CoreStoreTests/CoreStoreTests.swift b/CoreStoreTests/CoreStoreTests.swift index e4bb3c1..c46920f 100644 --- a/CoreStoreTests/CoreStoreTests.swift +++ b/CoreStoreTests/CoreStoreTests.swift @@ -44,6 +44,10 @@ class CoreStoreTests: XCTestCase { func testExample() { + let err = CoreStoreError.DifferentStorageExistsAtURL(existingPersistentStoreURL: NSURL(string: "http://google.com")!) + let err1 = err as NSError + let err2 = err1 as! CoreStoreError + let stack = DataStack(modelName: "Model", bundle: NSBundle(forClass: self.dynamicType)) CoreStore.defaultStack = stack XCTAssert(CoreStore.defaultStack === stack, "CoreStore.defaultStack === stack") @@ -168,7 +172,7 @@ class CoreStoreTests: XCTestCase { createExpectation.fulfill() case .Failure(let error): - XCTFail(error.description) + XCTFail("\(error)") } } } @@ -210,7 +214,7 @@ class CoreStoreTests: XCTestCase { queryExpectation.fulfill() case .Failure(let error): - XCTFail(error.description) + XCTFail("\(error)") } } } @@ -339,12 +343,12 @@ class CoreStoreTests: XCTestCase { unsafeExpectation.fulfill() case .Failure(let error): - XCTFail(error.description) + XCTFail("\(error)") } } case .Failure(let error): - XCTFail(error.description) + XCTFail("\(error)") } } diff --git a/Sources/CoreStoreError.swift b/Sources/CoreStoreError.swift index 6e23a99..e63305d 100644 --- a/Sources/CoreStoreError.swift +++ b/Sources/CoreStoreError.swift @@ -54,7 +54,7 @@ public enum CoreStoreError: ErrorType, CustomStringConvertible, CustomDebugStrin /** An internal SDK call failed with the specified `NSError`. */ - case InternalError(NSError) + case InternalError(NSError: NSError) // MARK: ErrorType @@ -68,14 +68,19 @@ public enum CoreStoreError: ErrorType, CustomStringConvertible, CustomDebugStrin switch self { - case .Unknown: return 1 - case .DifferentStorageExistsAtURL: return 2 - case .MappingModelNotFound: return 3 - case .ProgressiveMigrationRequired: return 4 - case .InternalError: return 5 + case .Unknown: return Code.Unknown.rawValue + case .DifferentStorageExistsAtURL: return Code.DifferentStorageExistsAtURL.rawValue + case .MappingModelNotFound: return Code.MappingModelNotFound.rawValue + case .ProgressiveMigrationRequired: return Code.ProgressiveMigrationRequired.rawValue + case .InternalError: return Code.InternalError.rawValue } } + public var _userInfo: [NSObject: AnyObject] { + + return ["test": 1] + } + // MARK: CustomStringConvertible @@ -98,17 +103,19 @@ public enum CoreStoreError: ErrorType, CustomStringConvertible, CustomDebugStrin internal init(_ error: ErrorType?) { - switch error { - - case (let error as CoreStoreError)?: - self = error - - case (let error as NSError)?: - self = .InternalError(error) - - default: - self = .Unknown - } + self = error.flatMap { $0.swift } ?? .Unknown + } + + + // MARK: Private + + private enum Code: Int { + + case Unknown + case DifferentStorageExistsAtURL + case MappingModelNotFound + case ProgressiveMigrationRequired + case InternalError } } @@ -178,3 +185,121 @@ public extension NSError { : nil) } } + + +// MARK: Internal + +internal extension ErrorType { + + internal var swift: CoreStoreError { + + if case let error as CoreStoreError = self { + + return error + } + + let error = self as NSError + guard error.domain == "com.corestore.error" else { + + return .InternalError(NSError: error) + } + + guard let code = CoreStoreError.Code(rawValue: error.code) else { + + return .Unknown + } + + let info = error.userInfo + switch code { + + case .Unknown: + return .Unknown + + case .DifferentStorageExistsAtURL: + guard case let existingPersistentStoreURL as NSURL = info["existingPersistentStoreURL"] else { + + return .Unknown + } + return .DifferentStorageExistsAtURL(existingPersistentStoreURL: existingPersistentStoreURL) + + case .MappingModelNotFound: + guard let persistentStore = info["persistentStore"] as? NSPersistentStore, + let storage = persistentStore.storageInterface as? LocalStorage, + let targetModel = info["targetModel"] as? NSManagedObjectModel, + let targetModelVersion = info["targetModelVersion"] as? String else { + + return .Unknown + } + return .MappingModelNotFound(storage: storage, targetModel: targetModel, targetModelVersion: targetModelVersion) + + case .ProgressiveMigrationRequired: + guard let persistentStore = info["persistentStore"] as? NSPersistentStore, + let storage = persistentStore.storageInterface as? LocalStorage else { + + return .Unknown + } + return .ProgressiveMigrationRequired(storage: storage) + + case .InternalError: + guard case let NSError as NSError = info["NSError"] else { + + return .Unknown + } + return .InternalError(NSError: NSError) + + default: + return .Unknown + } + } + + internal var objc: NSError { + + guard let error = self as? CoreStoreError else { + + return self as NSError + } + + let domain = "com.corestore.error" + let code: CoreStoreError.Code + let info: [NSObject: AnyObject] + switch error { + + case .Unknown: + return self as NSError + + case .DifferentStorageExistsAtURL(let existingPersistentStoreURL): + code = .DifferentStorageExistsAtURL + info = [ + "existingPersistentStoreURL": existingPersistentStoreURL + ] + + case .MappingModelNotFound(let storage, let targetModel, let targetModelVersion): + code = .MappingModelNotFound + info = [ + "storage": storage.objc, + "targetModel": targetModel, + "targetModelVersion": targetModelVersion + ] + + case .ProgressiveMigrationRequired: + guard let persistentStore = info["persistentStore"] as? NSPersistentStore, + let storage = persistentStore.storageInterface as? LocalStorage else { + + return .Unknown + } + return .ProgressiveMigrationRequired(storage: storage) + + case .InternalError: + guard case let NSError as NSError = info["NSError"] else { + + return .Unknown + } + return .InternalError(NSError: NSError) + + default: + return self as NSError + } + + return NSError(domain: domain, code: code.rawValue, userInfo: info) + } +} diff --git a/Sources/Logging/CoreStoreLogger.swift b/Sources/Logging/CoreStoreLogger.swift index 83c34c8..4c86333 100644 --- a/Sources/Logging/CoreStoreLogger.swift +++ b/Sources/Logging/CoreStoreLogger.swift @@ -96,7 +96,10 @@ extension CoreStoreLogger { Deprecated. Use `log(error:message:fileName:lineNumber:functionName:)` instead. */ @available(*, deprecated=2.0.0, message="Use log(error:message:fileName:lineNumber:functionName:) instead.") - public func handleError(error error: NSError, message: String, fileName: StaticString, lineNumber: Int, functionName: StaticString) {} + public func handleError(error error: NSError, message: String, fileName: StaticString, lineNumber: Int, functionName: StaticString) { + + self.log(error: (error as ErrorType) as! CoreStoreError, message: message, fileName: fileName, lineNumber: lineNumber, functionName: functionName) + } } diff --git a/Sources/Setting Up/SetupResult.swift b/Sources/Migrating/SetupResult.swift similarity index 100% rename from Sources/Setting Up/SetupResult.swift rename to Sources/Migrating/SetupResult.swift diff --git a/Sources/ObjectiveC/CSCoreStoreLogger.swift b/Sources/ObjectiveC/CSCoreStoreLogger.swift new file mode 100644 index 0000000..6fdead9 --- /dev/null +++ b/Sources/ObjectiveC/CSCoreStoreLogger.swift @@ -0,0 +1,13 @@ +// +// CSCoreStoreLogger.swift +// CoreStore +// +// Created by John Rommel Estropia on 2016/03/19. +// Copyright © 2016 John Rommel Estropia. All rights reserved. +// + +import UIKit + +class CSCoreStoreLogger: NSObject { + +} diff --git a/Sources/Setting Up/CoreStore+Setup.swift b/Sources/Setup/CoreStore+Setup.swift similarity index 100% rename from Sources/Setting Up/CoreStore+Setup.swift rename to Sources/Setup/CoreStore+Setup.swift diff --git a/Sources/Setting Up/DataStack.swift b/Sources/Setup/DataStack.swift similarity index 100% rename from Sources/Setting Up/DataStack.swift rename to Sources/Setup/DataStack.swift diff --git a/Sources/Setting Up/StorageInterfaces/InMemoryStore.swift b/Sources/Setup/StorageInterfaces/InMemoryStore.swift similarity index 100% rename from Sources/Setting Up/StorageInterfaces/InMemoryStore.swift rename to Sources/Setup/StorageInterfaces/InMemoryStore.swift diff --git a/Sources/Setting Up/StorageInterfaces/LegacySQLiteStore.swift b/Sources/Setup/StorageInterfaces/LegacySQLiteStore.swift similarity index 100% rename from Sources/Setting Up/StorageInterfaces/LegacySQLiteStore.swift rename to Sources/Setup/StorageInterfaces/LegacySQLiteStore.swift diff --git a/Sources/Setting Up/StorageInterfaces/SQLiteStore.swift b/Sources/Setup/StorageInterfaces/SQLiteStore.swift similarity index 100% rename from Sources/Setting Up/StorageInterfaces/SQLiteStore.swift rename to Sources/Setup/StorageInterfaces/SQLiteStore.swift diff --git a/Sources/Setting Up/StorageInterfaces/StorageInterface.swift b/Sources/Setup/StorageInterfaces/StorageInterface.swift similarity index 100% rename from Sources/Setting Up/StorageInterfaces/StorageInterface.swift rename to Sources/Setup/StorageInterfaces/StorageInterface.swift