From e115820635bf56e0834e37733e1b68436390d15a Mon Sep 17 00:00:00 2001 From: John Rommel Estropia Date: Tue, 28 Apr 2015 01:26:34 +0900 Subject: [PATCH] FROM clause, list controller --- HardcoreData.xcodeproj/project.pbxproj | 12 ++- .../BaseDataTransaction+Querying.swift | 64 ++++++------- HardcoreData/DataStack+Querying.swift | 64 ++++++------- HardcoreData/From.swift | 19 ++++ HardcoreData/GroupBy.swift | 16 ---- HardcoreData/HardcoreData+Querying.swift | 64 ++++++------- .../ManagedObjectListController.swift | 89 +++++++++++++++++-- .../NSManagedObjectContext+Querying.swift | 64 ++++++------- HardcoreDataTests/HardcoreDataTests.swift | 32 +++---- Libraries/GCDKit | 2 +- 10 files changed, 253 insertions(+), 173 deletions(-) create mode 100644 HardcoreData/From.swift diff --git a/HardcoreData.xcodeproj/project.pbxproj b/HardcoreData.xcodeproj/project.pbxproj index b98ce96..3cb2e13 100644 --- a/HardcoreData.xcodeproj/project.pbxproj +++ b/HardcoreData.xcodeproj/project.pbxproj @@ -11,6 +11,7 @@ 2F03A54019C5C6DA005002A5 /* HardcoreDataTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2F03A53F19C5C6DA005002A5 /* HardcoreDataTests.swift */; }; 2F03A54D19C5C872005002A5 /* CoreData.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2F03A54C19C5C872005002A5 /* CoreData.framework */; }; 2F291E2719C6D3CF007AF63F /* HardcoreData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2F291E2619C6D3CF007AF63F /* HardcoreData.swift */; }; + B50DD9DD1ABD34F800D62F2B /* From.swift in Sources */ = {isa = PBXBuildFile; fileRef = B50DD9DC1ABD34F800D62F2B /* From.swift */; }; B52B68BA1AAB46AD00CE7F48 /* ManagedObjectController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B52B68B91AAB46AD00CE7F48 /* ManagedObjectController.swift */; }; B52B68BC1AAB46BD00CE7F48 /* ManagedObjectListController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B52B68BB1AAB46BD00CE7F48 /* ManagedObjectListController.swift */; }; B52B68BE1AAB484C00CE7F48 /* DataStack+Observing.swift in Sources */ = {isa = PBXBuildFile; fileRef = B52B68BD1AAB484C00CE7F48 /* DataStack+Observing.swift */; }; @@ -88,6 +89,7 @@ 2F03A53F19C5C6DA005002A5 /* HardcoreDataTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = HardcoreDataTests.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; 2F03A54C19C5C872005002A5 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = System/Library/Frameworks/CoreData.framework; sourceTree = SDKROOT; }; 2F291E2619C6D3CF007AF63F /* HardcoreData.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = HardcoreData.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; + B50DD9DC1ABD34F800D62F2B /* From.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = From.swift; sourceTree = ""; }; B52B68B91AAB46AD00CE7F48 /* ManagedObjectController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ManagedObjectController.swift; sourceTree = ""; }; B52B68BB1AAB46BD00CE7F48 /* ManagedObjectListController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ManagedObjectListController.swift; sourceTree = ""; }; B52B68BD1AAB484C00CE7F48 /* DataStack+Observing.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "DataStack+Observing.swift"; sourceTree = ""; }; @@ -108,6 +110,7 @@ B5D022651A90CD340070CA63 /* DataStack+Transaction.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "DataStack+Transaction.swift"; sourceTree = ""; }; B5D10DBF1AB42C85004B4EEA /* GroupBy.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GroupBy.swift; sourceTree = ""; }; B5D10DC11AB4590F004B4EEA /* Select.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Select.swift; sourceTree = ""; }; + B5D10DC41AB9C747004B4EEA /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = ""; }; B5D19BFA1AA14063001D1A99 /* AsynchronousDataTransaction.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AsynchronousDataTransaction.swift; sourceTree = ""; }; B5D19BFE1AA14351001D1A99 /* SynchronousDataTransaction.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SynchronousDataTransaction.swift; sourceTree = ""; }; B5D19C001AA15E1F001D1A99 /* HardcoreData+Logging.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "HardcoreData+Logging.swift"; sourceTree = ""; }; @@ -196,6 +199,7 @@ isa = PBXGroup; children = ( B5F3D98419F3EB8E009690A6 /* LICENSE */, + B5D10DC41AB9C747004B4EEA /* README.md */, 2F03A53419C5C6DA005002A5 /* Info.plist */, ); name = "Supporting Files"; @@ -234,10 +238,10 @@ B52B68B61AAB45FB00CE7F48 /* Observing */ = { isa = PBXGroup; children = ( - B52B68B91AAB46AD00CE7F48 /* ManagedObjectController.swift */, - B52B68BB1AAB46BD00CE7F48 /* ManagedObjectListController.swift */, - B52B68C11AAF554600CE7F48 /* ManagedObjectListSectionInfo.swift */, B52B68BF1AAB9DAD00CE7F48 /* ManagedObjectListObserver.swift */, + B52B68BB1AAB46BD00CE7F48 /* ManagedObjectListController.swift */, + B52B68B91AAB46AD00CE7F48 /* ManagedObjectController.swift */, + B52B68C11AAF554600CE7F48 /* ManagedObjectListSectionInfo.swift */, B52B68BD1AAB484C00CE7F48 /* DataStack+Observing.swift */, ); name = Observing; @@ -255,6 +259,7 @@ isa = PBXGroup; children = ( B57078AF1A50392D007E33F2 /* FetchClause.swift */, + B50DD9DC1ABD34F800D62F2B /* From.swift */, B5E126541A7DCE1400AD8B39 /* Where.swift */, B5E126561A7DCE5900AD8B39 /* SortedBy.swift */, B5F409F01A8B27A600A228EA /* CustomizeFetch.swift */, @@ -511,6 +516,7 @@ B582DF861A98B11B003F09C6 /* HardcoreData+Transaction.swift in Sources */, B5D1E22C19FA9FBC003B2874 /* NSError+HardcoreData.swift in Sources */, B595CAC61A9A1260009A397F /* NSManagedObjectContext+Transaction.swift in Sources */, + B50DD9DD1ABD34F800D62F2B /* From.swift in Sources */, B5CFF23E19FD1D1C00D6DFC4 /* NSManagedObjectContext+HardcoreData.swift in Sources */, B54A9F071AA7654400AFEC05 /* DataStack+Querying.swift in Sources */, B5E126571A7DCE5900AD8B39 /* SortedBy.swift in Sources */, diff --git a/HardcoreData/BaseDataTransaction+Querying.swift b/HardcoreData/BaseDataTransaction+Querying.swift index cdf980e..afd2764 100644 --- a/HardcoreData/BaseDataTransaction+Querying.swift +++ b/HardcoreData/BaseDataTransaction+Querying.swift @@ -33,115 +33,115 @@ public extension BaseDataTransaction { // MARK: Public - public func fetchOne(entity: T.Type, _ queryClauses: FetchClause...) -> T? { + public func fetchOne(from: From, _ queryClauses: FetchClause...) -> T? { HardcoreData.assert(self.transactionQueue.isCurrentExecutionContext(), "Attempted to fetch from a <\(self.dynamicType)> outside its designated queue.") - return self.context.fetchOne(entity, queryClauses) + return self.context.fetchOne(from, queryClauses) } - public func fetchOne(entity: T.Type, _ queryClauses: [FetchClause]) -> T? { + public func fetchOne(from: From, _ queryClauses: [FetchClause]) -> T? { HardcoreData.assert(self.transactionQueue.isCurrentExecutionContext(), "Attempted to fetch from a <\(self.dynamicType)> outside its designated queue.") - return self.context.fetchOne(entity, queryClauses) + return self.context.fetchOne(from, queryClauses) } - public func fetchAll(entity: T.Type, _ queryClauses: FetchClause...) -> [T]? { + public func fetchAll(from: From, _ queryClauses: FetchClause...) -> [T]? { HardcoreData.assert(self.transactionQueue.isCurrentExecutionContext(), "Attempted to fetch from a <\(self.dynamicType)> outside its designated queue.") - return self.context.fetchAll(entity, queryClauses) + return self.context.fetchAll(from, queryClauses) } - public func fetchAll(entity: T.Type, _ queryClauses: [FetchClause]) -> [T]? { + public func fetchAll(from: From, _ queryClauses: [FetchClause]) -> [T]? { HardcoreData.assert(self.transactionQueue.isCurrentExecutionContext(), "Attempted to fetch from a <\(self.dynamicType)> outside its designated queue.") - return self.context.fetchAll(entity, queryClauses) + return self.context.fetchAll(from, queryClauses) } - public func fetchCount(entity: T.Type, _ queryClauses: FetchClause...) -> Int? { + public func fetchCount(from: From, _ queryClauses: FetchClause...) -> Int? { HardcoreData.assert(self.transactionQueue.isCurrentExecutionContext(), "Attempted to fetch from a <\(self.dynamicType)> outside its designated queue.") - return self.context.fetchCount(entity, queryClauses) + return self.context.fetchCount(from, queryClauses) } - public func fetchCount(entity: T.Type, _ queryClauses: [FetchClause]) -> Int? { + public func fetchCount(from: From, _ queryClauses: [FetchClause]) -> Int? { HardcoreData.assert(self.transactionQueue.isCurrentExecutionContext(), "Attempted to fetch from a <\(self.dynamicType)> outside its designated queue.") - return self.context.fetchCount(entity, queryClauses) + return self.context.fetchCount(from, queryClauses) } - public func fetchObjectID(entity: T.Type, _ queryClauses: FetchClause...) -> NSManagedObjectID? { + public func fetchObjectID(from: From, _ queryClauses: FetchClause...) -> NSManagedObjectID? { HardcoreData.assert(self.transactionQueue.isCurrentExecutionContext(), "Attempted to fetch from a <\(self.dynamicType)> outside its designated queue.") - return self.context.fetchObjectID(entity, queryClauses) + return self.context.fetchObjectID(from, queryClauses) } - public func fetchObjectID(entity: T.Type, _ queryClauses: [FetchClause]) -> NSManagedObjectID? { + public func fetchObjectID(from: From, _ queryClauses: [FetchClause]) -> NSManagedObjectID? { HardcoreData.assert(self.transactionQueue.isCurrentExecutionContext(), "Attempted to fetch from a <\(self.dynamicType)> outside its designated queue.") - return self.context.fetchObjectID(entity, queryClauses) + return self.context.fetchObjectID(from, queryClauses) } - public func fetchObjectIDs(entity: T.Type, _ queryClauses: FetchClause...) -> [NSManagedObjectID]? { + public func fetchObjectIDs(from: From, _ queryClauses: FetchClause...) -> [NSManagedObjectID]? { HardcoreData.assert(self.transactionQueue.isCurrentExecutionContext(), "Attempted to fetch from a <\(self.dynamicType)> outside its designated queue.") - return self.context.fetchObjectIDs(entity, queryClauses) + return self.context.fetchObjectIDs(from, queryClauses) } - public func fetchObjectIDs(entity: T.Type, _ queryClauses: [FetchClause]) -> [NSManagedObjectID]? { + public func fetchObjectIDs(from: From, _ queryClauses: [FetchClause]) -> [NSManagedObjectID]? { HardcoreData.assert(self.transactionQueue.isCurrentExecutionContext(), "Attempted to fetch from a <\(self.dynamicType)> outside its designated queue.") - return self.context.fetchObjectIDs(entity, queryClauses) + return self.context.fetchObjectIDs(from, queryClauses) } - public func deleteAll(entity: T.Type, _ queryClauses: FetchClause...) -> Int? { + public func deleteAll(from: From, _ queryClauses: FetchClause...) -> Int? { HardcoreData.assert(self.transactionQueue.isCurrentExecutionContext(), "Attempted to delete from a <\(self.dynamicType)> outside its designated queue.") - return self.context.deleteAll(entity, queryClauses) + return self.context.deleteAll(from, queryClauses) } - public func deleteAll(entity: T.Type, _ queryClauses: [FetchClause]) -> Int? { + public func deleteAll(from: From, _ queryClauses: [FetchClause]) -> Int? { HardcoreData.assert(self.transactionQueue.isCurrentExecutionContext(), "Attempted to delete from a <\(self.dynamicType)> outside its designated queue.") - return self.context.deleteAll(entity, queryClauses) + return self.context.deleteAll(from, queryClauses) } - public func queryValue(entity: T.Type, _ selectClause: Select, _ queryClauses: FetchClause...) -> U? { + public func queryValue(from: From, _ selectClause: Select, _ queryClauses: FetchClause...) -> U? { HardcoreData.assert(self.transactionQueue.isCurrentExecutionContext(), "Attempted to query from a <\(self.dynamicType)> outside its designated queue.") - return self.context.queryValue(entity, selectClause, queryClauses) + return self.context.queryValue(from, selectClause, queryClauses) } - public func queryValue(entity: T.Type, _ selectClause: Select, _ queryClauses: [FetchClause]) -> U? { + public func queryValue(from: From, _ selectClause: Select, _ queryClauses: [FetchClause]) -> U? { HardcoreData.assert(self.transactionQueue.isCurrentExecutionContext(), "Attempted to query from a <\(self.dynamicType)> outside its designated queue.") - return self.context.queryValue(entity, selectClause, queryClauses) + return self.context.queryValue(from, selectClause, queryClauses) } - public func queryAttributes(entity: T.Type, _ selectClause: Select, _ queryClauses: QueryClause...) -> [[NSString: AnyObject]]? { + public func queryAttributes(from: From, _ selectClause: Select, _ queryClauses: QueryClause...) -> [[NSString: AnyObject]]? { HardcoreData.assert(self.transactionQueue.isCurrentExecutionContext(), "Attempted to query from a <\(self.dynamicType)> outside its designated queue.") - return self.context.queryAttributes(entity, selectClause, queryClauses) + return self.context.queryAttributes(from, selectClause, queryClauses) } - public func queryAttributes(entity: T.Type, _ selectClause: Select, _ queryClauses: [QueryClause]) -> [[NSString: AnyObject]]? { + public func queryAttributes(from: From, _ selectClause: Select, _ queryClauses: [QueryClause]) -> [[NSString: AnyObject]]? { HardcoreData.assert(self.transactionQueue.isCurrentExecutionContext(), "Attempted to query from a <\(self.dynamicType)> outside its designated queue.") - return self.context.queryAttributes(entity, selectClause, queryClauses) + return self.context.queryAttributes(from, selectClause, queryClauses) } } \ No newline at end of file diff --git a/HardcoreData/DataStack+Querying.swift b/HardcoreData/DataStack+Querying.swift index e2dfa44..4a19477 100644 --- a/HardcoreData/DataStack+Querying.swift +++ b/HardcoreData/DataStack+Querying.swift @@ -34,115 +34,115 @@ public extension DataStack { // MARK: Public - public func fetchOne(entity: T.Type, _ queryClauses: FetchClause...) -> T? { + public func fetchOne(from: From, _ queryClauses: FetchClause...) -> T? { HardcoreData.assert(GCDQueue.Main.isCurrentExecutionContext(), "Attempted to fetch from a <\(self.dynamicType)> outside the main queue.") - return self.mainContext.fetchOne(entity, queryClauses) + return self.mainContext.fetchOne(from, queryClauses) } - public func fetchOne(entity: T.Type, _ queryClauses: [FetchClause]) -> T? { + public func fetchOne(from: From, _ queryClauses: [FetchClause]) -> T? { HardcoreData.assert(GCDQueue.Main.isCurrentExecutionContext(), "Attempted to fetch from a <\(self.dynamicType)> outside the main queue.") - return self.mainContext.fetchOne(entity, queryClauses) + return self.mainContext.fetchOne(from, queryClauses) } - public func fetchAll(entity: T.Type, _ queryClauses: FetchClause...) -> [T]? { + public func fetchAll(from: From, _ queryClauses: FetchClause...) -> [T]? { HardcoreData.assert(GCDQueue.Main.isCurrentExecutionContext(), "Attempted to fetch from a <\(self.dynamicType)> outside the main queue.") - return self.mainContext.fetchAll(entity, queryClauses) + return self.mainContext.fetchAll(from, queryClauses) } - public func fetchAll(entity: T.Type, _ queryClauses: [FetchClause]) -> [T]? { + public func fetchAll(from: From, _ queryClauses: [FetchClause]) -> [T]? { HardcoreData.assert(GCDQueue.Main.isCurrentExecutionContext(), "Attempted to fetch from a <\(self.dynamicType)> outside the main queue.") - return self.mainContext.fetchAll(entity, queryClauses) + return self.mainContext.fetchAll(from, queryClauses) } - public func fetchCount(entity: T.Type, _ queryClauses: FetchClause...) -> Int? { + public func fetchCount(from: From, _ queryClauses: FetchClause...) -> Int? { HardcoreData.assert(GCDQueue.Main.isCurrentExecutionContext(), "Attempted to fetch from a <\(self.dynamicType)> outside the main queue.") - return self.mainContext.fetchCount(entity, queryClauses) + return self.mainContext.fetchCount(from, queryClauses) } - public func fetchCount(entity: T.Type, _ queryClauses: [FetchClause]) -> Int? { + public func fetchCount(from: From, _ queryClauses: [FetchClause]) -> Int? { HardcoreData.assert(GCDQueue.Main.isCurrentExecutionContext(), "Attempted to fetch from a <\(self.dynamicType)> outside the main queue.") - return self.mainContext.fetchCount(entity, queryClauses) + return self.mainContext.fetchCount(from, queryClauses) } - public func fetchObjectID(entity: T.Type, _ queryClauses: FetchClause...) -> NSManagedObjectID? { + public func fetchObjectID(from: From, _ queryClauses: FetchClause...) -> NSManagedObjectID? { HardcoreData.assert(GCDQueue.Main.isCurrentExecutionContext(), "Attempted to fetch from a <\(self.dynamicType)> outside the main queue.") - return self.mainContext.fetchObjectID(entity, queryClauses) + return self.mainContext.fetchObjectID(from, queryClauses) } - public func fetchObjectID(entity: T.Type, _ queryClauses: [FetchClause]) -> NSManagedObjectID? { + public func fetchObjectID(from: From, _ queryClauses: [FetchClause]) -> NSManagedObjectID? { HardcoreData.assert(GCDQueue.Main.isCurrentExecutionContext(), "Attempted to fetch from a <\(self.dynamicType)> outside the main queue.") - return self.mainContext.fetchObjectID(entity, queryClauses) + return self.mainContext.fetchObjectID(from, queryClauses) } - public func fetchObjectIDs(entity: T.Type, _ queryClauses: FetchClause...) -> [NSManagedObjectID]? { + public func fetchObjectIDs(from: From, _ queryClauses: FetchClause...) -> [NSManagedObjectID]? { HardcoreData.assert(GCDQueue.Main.isCurrentExecutionContext(), "Attempted to fetch from a <\(self.dynamicType)> outside the main queue.") - return self.mainContext.fetchObjectIDs(entity, queryClauses) + return self.mainContext.fetchObjectIDs(from, queryClauses) } - public func fetchObjectIDs(entity: T.Type, _ queryClauses: [FetchClause]) -> [NSManagedObjectID]? { + public func fetchObjectIDs(from: From, _ queryClauses: [FetchClause]) -> [NSManagedObjectID]? { HardcoreData.assert(GCDQueue.Main.isCurrentExecutionContext(), "Attempted to fetch from a <\(self.dynamicType)> outside the main queue.") - return self.mainContext.fetchObjectIDs(entity, queryClauses) + return self.mainContext.fetchObjectIDs(from, queryClauses) } - public func deleteAll(entity: T.Type, _ queryClauses: FetchClause...) -> Int? { + public func deleteAll(from: From, _ queryClauses: FetchClause...) -> Int? { HardcoreData.assert(GCDQueue.Main.isCurrentExecutionContext(), "Attempted to delete from a <\(self.dynamicType)> outside the main queue.") - return self.mainContext.deleteAll(entity, queryClauses) + return self.mainContext.deleteAll(from, queryClauses) } - public func deleteAll(entity: T.Type, _ queryClauses: [FetchClause]) -> Int? { + public func deleteAll(from: From, _ queryClauses: [FetchClause]) -> Int? { HardcoreData.assert(GCDQueue.Main.isCurrentExecutionContext(), "Attempted to delete from a <\(self.dynamicType)> outside the main queue.") - return self.mainContext.deleteAll(entity, queryClauses) + return self.mainContext.deleteAll(from, queryClauses) } - public func queryValue(entity: T.Type, _ selectClause: Select, _ queryClauses: FetchClause...) -> U? { + public func queryValue(from: From, _ selectClause: Select, _ queryClauses: FetchClause...) -> U? { HardcoreData.assert(GCDQueue.Main.isCurrentExecutionContext(), "Attempted to query from a <\(self.dynamicType)> outside the main queue.") - return self.mainContext.queryValue(entity, selectClause, queryClauses) + return self.mainContext.queryValue(from, selectClause, queryClauses) } - public func queryValue(entity: T.Type, _ selectClause: Select, _ queryClauses: [FetchClause]) -> U? { + public func queryValue(from: From, _ selectClause: Select, _ queryClauses: [FetchClause]) -> U? { HardcoreData.assert(GCDQueue.Main.isCurrentExecutionContext(), "Attempted to query from a <\(self.dynamicType)> outside the main queue.") - return self.mainContext.queryValue(entity, selectClause, queryClauses) + return self.mainContext.queryValue(from, selectClause, queryClauses) } - public func queryAttributes(entity: T.Type, _ selectClause: Select, _ queryClauses: QueryClause...) -> [[NSString: AnyObject]]? { + public func queryAttributes(from: From, _ selectClause: Select, _ queryClauses: QueryClause...) -> [[NSString: AnyObject]]? { HardcoreData.assert(GCDQueue.Main.isCurrentExecutionContext(), "Attempted to query from a <\(self.dynamicType)> outside the main queue.") - return self.mainContext.queryAttributes(entity, selectClause, queryClauses) + return self.mainContext.queryAttributes(from, selectClause, queryClauses) } - public func queryAttributes(entity: T.Type, _ selectClause: Select, _ queryClauses: [QueryClause]) -> [[NSString: AnyObject]]? { + public func queryAttributes(from: From, _ selectClause: Select, _ queryClauses: [QueryClause]) -> [[NSString: AnyObject]]? { HardcoreData.assert(GCDQueue.Main.isCurrentExecutionContext(), "Attempted to query from a <\(self.dynamicType)> outside the main queue.") - return self.mainContext.queryAttributes(entity, selectClause, queryClauses) + return self.mainContext.queryAttributes(from, selectClause, queryClauses) } } diff --git a/HardcoreData/From.swift b/HardcoreData/From.swift new file mode 100644 index 0000000..25e5729 --- /dev/null +++ b/HardcoreData/From.swift @@ -0,0 +1,19 @@ +// +// From.swift +// HardcoreData +// +// Created by John Rommel Estropia on 2015/03/21. +// Copyright (c) 2015 John Rommel Estropia. All rights reserved. +// + +import Foundation +import CoreData + + +// MARK: - From + +public struct From { + + public init(){ } + public init(_ entity: T.Type) { } +} diff --git a/HardcoreData/GroupBy.swift b/HardcoreData/GroupBy.swift index 5f463a3..5e400b7 100644 --- a/HardcoreData/GroupBy.swift +++ b/HardcoreData/GroupBy.swift @@ -60,21 +60,5 @@ public struct GroupBy: QueryClause { } fetchRequest.propertiesToGroupBy = self.keyPaths - -// let entityDescription = fetchRequest.entity! -// let propertyMapping = entityDescription.propertiesByName -// fetchRequest.propertiesToGroupBy = self.keyPaths.reduce([AnyObject]()) { (var properties, keyPath) -> [AnyObject] in -// -// if let propertyDescription: AnyObject = propertyMapping[keyPath] { -// -// properties.append(propertyDescription) -// } -// else { -// -// HardcoreData.log(.Warning, message: "The property \"\(keyPath)\" does not exist in entity <\(entityDescription.managedObjectClassName)> and will be ignored by <\(self.dynamicType)> query clause.") -// } -// -// return properties -// } } } diff --git a/HardcoreData/HardcoreData+Querying.swift b/HardcoreData/HardcoreData+Querying.swift index 7a1be62..2ce7fa6 100644 --- a/HardcoreData/HardcoreData+Querying.swift +++ b/HardcoreData/HardcoreData+Querying.swift @@ -31,83 +31,83 @@ public extension HardcoreData { // MARK: Public - public static func fetchOne(entity: T.Type, _ queryClauses: FetchClause...) -> T? { + public static func fetchOne(from: From, _ queryClauses: FetchClause...) -> T? { - return self.defaultStack.fetchOne(entity, queryClauses) + return self.defaultStack.fetchOne(from, queryClauses) } - public static func fetchOne(entity: T.Type, _ queryClauses: [FetchClause]) -> T? { + public static func fetchOne(from: From, _ queryClauses: [FetchClause]) -> T? { - return self.defaultStack.fetchOne(entity, queryClauses) + return self.defaultStack.fetchOne(from, queryClauses) } - public static func fetchAll(entity: T.Type, _ queryClauses: FetchClause...) -> [T]? { + public static func fetchAll(from: From, _ queryClauses: FetchClause...) -> [T]? { - return self.defaultStack.fetchAll(entity, queryClauses) + return self.defaultStack.fetchAll(from, queryClauses) } - public static func fetchAll(entity: T.Type, _ queryClauses: [FetchClause]) -> [T]? { + public static func fetchAll(from: From, _ queryClauses: [FetchClause]) -> [T]? { - return self.defaultStack.fetchAll(entity, queryClauses) + return self.defaultStack.fetchAll(from, queryClauses) } - public static func fetchCount(entity: T.Type, _ queryClauses: FetchClause...) -> Int? { + public static func fetchCount(from: From, _ queryClauses: FetchClause...) -> Int? { - return self.defaultStack.fetchCount(entity, queryClauses) + return self.defaultStack.fetchCount(from, queryClauses) } - public static func fetchCount(entity: T.Type, _ queryClauses: [FetchClause]) -> Int? { + public static func fetchCount(from: From, _ queryClauses: [FetchClause]) -> Int? { - return self.defaultStack.fetchCount(entity, queryClauses) + return self.defaultStack.fetchCount(from, queryClauses) } - public static func fetchObjectID(entity: T.Type, _ queryClauses: FetchClause...) -> NSManagedObjectID? { + public static func fetchObjectID(from: From, _ queryClauses: FetchClause...) -> NSManagedObjectID? { - return self.defaultStack.fetchObjectID(entity, queryClauses) + return self.defaultStack.fetchObjectID(from, queryClauses) } - public static func fetchObjectID(entity: T.Type, _ queryClauses: [FetchClause]) -> NSManagedObjectID? { + public static func fetchObjectID(from: From, _ queryClauses: [FetchClause]) -> NSManagedObjectID? { - return self.defaultStack.fetchObjectID(entity, queryClauses) + return self.defaultStack.fetchObjectID(from, queryClauses) } - public static func fetchObjectIDs(entity: T.Type, _ queryClauses: FetchClause...) -> [NSManagedObjectID]? { + public static func fetchObjectIDs(from: From, _ queryClauses: FetchClause...) -> [NSManagedObjectID]? { - return self.defaultStack.fetchObjectIDs(entity, queryClauses) + return self.defaultStack.fetchObjectIDs(from, queryClauses) } - public static func fetchObjectIDs(entity: T.Type, _ queryClauses: [FetchClause]) -> [NSManagedObjectID]? { + public static func fetchObjectIDs(from: From, _ queryClauses: [FetchClause]) -> [NSManagedObjectID]? { - return self.defaultStack.fetchObjectIDs(entity, queryClauses) + return self.defaultStack.fetchObjectIDs(from, queryClauses) } - public static func deleteAll(entity: T.Type, _ queryClauses: FetchClause...) -> Int? { + public static func deleteAll(from: From, _ queryClauses: FetchClause...) -> Int? { - return self.defaultStack.deleteAll(entity, queryClauses) + return self.defaultStack.deleteAll(from, queryClauses) } - public static func deleteAll(entity: T.Type, _ queryClauses: [FetchClause]) -> Int? { + public static func deleteAll(from: From, _ queryClauses: [FetchClause]) -> Int? { - return self.defaultStack.deleteAll(entity, queryClauses) + return self.defaultStack.deleteAll(from, queryClauses) } - public static func queryValue(entity: T.Type, _ selectClause: Select, _ queryClauses: FetchClause...) -> U? { + public static func queryValue(from: From, _ selectClause: Select, _ queryClauses: FetchClause...) -> U? { - return self.defaultStack.queryValue(entity, selectClause, queryClauses) + return self.defaultStack.queryValue(from, selectClause, queryClauses) } - public static func queryValue(entity: T.Type, _ selectClause: Select, _ queryClauses: [FetchClause]) -> U? { + public static func queryValue(from: From, _ selectClause: Select, _ queryClauses: [FetchClause]) -> U? { - return self.defaultStack.queryValue(entity, selectClause, queryClauses) + return self.defaultStack.queryValue(from, selectClause, queryClauses) } - public static func queryAttributes(entity: T.Type, _ selectClause: Select, _ queryClauses: QueryClause...) -> [[NSString: AnyObject]]? { + public static func queryAttributes(from: From, _ selectClause: Select, _ queryClauses: QueryClause...) -> [[NSString: AnyObject]]? { - return self.defaultStack.queryAttributes(entity, selectClause, queryClauses) + return self.defaultStack.queryAttributes(from, selectClause, queryClauses) } - public static func queryAttributes(entity: T.Type, _ selectClause: Select, _ queryClauses: [QueryClause]) -> [[NSString: AnyObject]]? { + public static func queryAttributes(from: From, _ selectClause: Select, _ queryClauses: [QueryClause]) -> [[NSString: AnyObject]]? { - return self.defaultStack.queryAttributes(entity, selectClause, queryClauses) + return self.defaultStack.queryAttributes(from, selectClause, queryClauses) } } \ No newline at end of file diff --git a/HardcoreData/ManagedObjectListController.swift b/HardcoreData/ManagedObjectListController.swift index 41e8504..9d4898d 100644 --- a/HardcoreData/ManagedObjectListController.swift +++ b/HardcoreData/ManagedObjectListController.swift @@ -30,7 +30,7 @@ import GCDKit // MARK: - ManagedObjectListController -public final class ManagedObjectListController: NSFetchedResultsControllerDelegate { +public final class ManagedObjectListController: FetchedResultsControllerHandler { // MARK: Public @@ -51,25 +51,25 @@ public final class ManagedObjectListController: NSFetchedRes } - // MARK: NSFetchedResultsControllerDelegate + // MARK: FetchedResultsControllerHandler - private func controller(controller: NSFetchedResultsController, didChangeObject anObject: AnyObject, atIndexPath indexPath: NSIndexPath?, forChangeType type: NSFetchedResultsChangeType, newIndexPath: NSIndexPath?) { + func controller(controller: NSFetchedResultsController, didChangeObject anObject: AnyObject, atIndexPath indexPath: NSIndexPath?, forChangeType type: NSFetchedResultsChangeType, newIndexPath: NSIndexPath?) { } - private func controller(controller: NSFetchedResultsController, didChangeSection sectionInfo: NSFetchedResultsSectionInfo, atIndex sectionIndex: Int, forChangeType type: NSFetchedResultsChangeType) { + func controller(controller: NSFetchedResultsController, didChangeSection sectionInfo: NSFetchedResultsSectionInfo, atIndex sectionIndex: Int, forChangeType type: NSFetchedResultsChangeType) { } - private func controllerWillChangeContent(controller: NSFetchedResultsController) { + func controllerWillChangeContent(controller: NSFetchedResultsController) { } - private func controllerDidChangeContent(controller: NSFetchedResultsController) { + func controllerDidChangeContent(controller: NSFetchedResultsController) { } - private func controller(controller: NSFetchedResultsController, sectionIndexTitleForSectionName sectionName: String?) -> String? { + func controller(controller: NSFetchedResultsController, sectionIndexTitleForSectionName sectionName: String?) -> String? { return nil } @@ -100,19 +100,22 @@ public final class ManagedObjectListController: NSFetchedRes : nil) ) + let fetchedResultsControllerDelegate = FetchedResultsControllerDelegate() self.fetchedResultsController = fetchedResultsController + self.fetchedResultsControllerDelegate = fetchedResultsControllerDelegate self.parentStack = dataStack self.observers = NSHashTable.weakObjectsHashTable() - fetchedResultsController.delegate = self + fetchedResultsControllerDelegate.handler = self + fetchedResultsControllerDelegate.fetchedResultsController = fetchedResultsController var error: NSError? if !fetchedResultsController.performFetch(&error) { HardcoreData.handleError( error ?? NSError(hardcoreDataErrorCode: .UnknownError), - "Failed to perform fetch on \(NSFetchedResultsController.self)") + "Failed to perform fetch on <\(NSFetchedResultsController.self)>.") } } @@ -120,6 +123,74 @@ public final class ManagedObjectListController: NSFetchedRes // MARK: Private private let fetchedResultsController: NSFetchedResultsController + private let fetchedResultsControllerDelegate: FetchedResultsControllerDelegate private weak var parentStack: DataStack? private let observers: NSHashTable } + + +// MARK: - FetchedResultsControllerHandler + +private protocol FetchedResultsControllerHandler: class { + + func controller(controller: NSFetchedResultsController, didChangeObject anObject: AnyObject, atIndexPath indexPath: NSIndexPath?, forChangeType type: NSFetchedResultsChangeType, newIndexPath: NSIndexPath?) + + func controller(controller: NSFetchedResultsController, didChangeSection sectionInfo: NSFetchedResultsSectionInfo, atIndex sectionIndex: Int, forChangeType type: NSFetchedResultsChangeType) + + func controllerWillChangeContent(controller: NSFetchedResultsController) + + func controllerDidChangeContent(controller: NSFetchedResultsController) + + func controller(controller: NSFetchedResultsController, sectionIndexTitleForSectionName sectionName: String?) -> String? +} + + +// MARK: - FetchedResultsControllerDelegate + +private final class FetchedResultsControllerDelegate: NSFetchedResultsControllerDelegate { + + // MARK: NSFetchedResultsControllerDelegate + + @objc func controller(controller: NSFetchedResultsController, didChangeObject anObject: AnyObject, atIndexPath indexPath: NSIndexPath?, forChangeType type: NSFetchedResultsChangeType, newIndexPath: NSIndexPath?) { + + self.handler?.controller(controller, didChangeObject: anObject, atIndexPath: indexPath, forChangeType: type, newIndexPath: newIndexPath) + } + + @objc func controller(controller: NSFetchedResultsController, didChangeSection sectionInfo: NSFetchedResultsSectionInfo, atIndex sectionIndex: Int, forChangeType type: NSFetchedResultsChangeType) { + + self.handler?.controller(controller, didChangeSection: sectionInfo, atIndex: sectionIndex, forChangeType: type) + } + + @objc func controllerWillChangeContent(controller: NSFetchedResultsController) { + + self.handler?.controllerWillChangeContent(controller) + } + + @objc func controllerDidChangeContent(controller: NSFetchedResultsController) { + + self.handler?.controllerDidChangeContent(controller) + } + + @objc func controller(controller: NSFetchedResultsController, sectionIndexTitleForSectionName sectionName: String?) -> String? { + + return self.handler?.controller(controller, sectionIndexTitleForSectionName: sectionName) + } + + + // MARK: Private + + weak var handler: FetchedResultsControllerHandler? + weak var fetchedResultsController: NSFetchedResultsController? { + + didSet { + + oldValue?.delegate = nil + self.fetchedResultsController?.delegate = self + } + } + + deinit { + + self.fetchedResultsController?.delegate = nil + } +} diff --git a/HardcoreData/NSManagedObjectContext+Querying.swift b/HardcoreData/NSManagedObjectContext+Querying.swift index dadda8e..bec1966 100644 --- a/HardcoreData/NSManagedObjectContext+Querying.swift +++ b/HardcoreData/NSManagedObjectContext+Querying.swift @@ -33,15 +33,15 @@ internal extension NSManagedObjectContext { // MARK: Public - internal func fetchOne(entity: T.Type, _ queryClauses: FetchClause...) -> T? { + internal func fetchOne(from: From, _ queryClauses: FetchClause...) -> T? { - return self.fetchOne(entity, queryClauses) + return self.fetchOne(from, queryClauses) } - internal func fetchOne(entity: T.Type, _ queryClauses: [FetchClause]) -> T? { + internal func fetchOne(from: From, _ queryClauses: [FetchClause]) -> T? { let fetchRequest = NSFetchRequest() - fetchRequest.entity = self.entityDescriptionForEntityClass(entity) + fetchRequest.entity = self.entityDescriptionForEntityClass(T) fetchRequest.fetchLimit = 1 fetchRequest.resultType = .ManagedObjectResultType @@ -67,15 +67,15 @@ internal extension NSManagedObjectContext { return fetchResults?.first } - internal func fetchAll(entity: T.Type, _ queryClauses: FetchClause...) -> [T]? { + internal func fetchAll(from: From, _ queryClauses: FetchClause...) -> [T]? { - return self.fetchAll(entity, queryClauses) + return self.fetchAll(from, queryClauses) } - internal func fetchAll(entity: T.Type, _ queryClauses: [FetchClause]) -> [T]? { + internal func fetchAll(from: From, _ queryClauses: [FetchClause]) -> [T]? { let fetchRequest = NSFetchRequest() - fetchRequest.entity = self.entityDescriptionForEntityClass(entity) + fetchRequest.entity = self.entityDescriptionForEntityClass(T) fetchRequest.fetchLimit = 0 fetchRequest.resultType = .ManagedObjectResultType @@ -101,15 +101,15 @@ internal extension NSManagedObjectContext { return fetchResults } - internal func fetchCount(entity: T.Type, _ queryClauses: FetchClause...) -> Int? { + internal func fetchCount(from: From, _ queryClauses: FetchClause...) -> Int? { - return self.fetchCount(entity, queryClauses) + return self.fetchCount(from, queryClauses) } - internal func fetchCount(entity: T.Type, _ queryClauses: [FetchClause]) -> Int? { + internal func fetchCount(from: From, _ queryClauses: [FetchClause]) -> Int? { let fetchRequest = NSFetchRequest() - fetchRequest.entity = self.entityDescriptionForEntityClass(entity) + fetchRequest.entity = self.entityDescriptionForEntityClass(T) for clause in queryClauses { @@ -133,15 +133,15 @@ internal extension NSManagedObjectContext { return count } - internal func fetchObjectID(entity: T.Type, _ queryClauses: FetchClause...) -> NSManagedObjectID? { + internal func fetchObjectID(from: From, _ queryClauses: FetchClause...) -> NSManagedObjectID? { - return self.fetchObjectID(entity, queryClauses) + return self.fetchObjectID(from, queryClauses) } - internal func fetchObjectID(entity: T.Type, _ queryClauses: [FetchClause]) -> NSManagedObjectID? { + internal func fetchObjectID(from: From, _ queryClauses: [FetchClause]) -> NSManagedObjectID? { let fetchRequest = NSFetchRequest() - fetchRequest.entity = self.entityDescriptionForEntityClass(entity) + fetchRequest.entity = self.entityDescriptionForEntityClass(T) fetchRequest.fetchLimit = 1 fetchRequest.resultType = .ManagedObjectIDResultType @@ -167,15 +167,15 @@ internal extension NSManagedObjectContext { return fetchResults?.first } - internal func fetchObjectIDs(entity: T.Type, _ queryClauses: FetchClause...) -> [NSManagedObjectID]? { + internal func fetchObjectIDs(from: From, _ queryClauses: FetchClause...) -> [NSManagedObjectID]? { - return self.fetchObjectIDs(entity, queryClauses) + return self.fetchObjectIDs(from, queryClauses) } - internal func fetchObjectIDs(entity: T.Type, _ queryClauses: [FetchClause]) -> [NSManagedObjectID]? { + internal func fetchObjectIDs(from: From, _ queryClauses: [FetchClause]) -> [NSManagedObjectID]? { let fetchRequest = NSFetchRequest() - fetchRequest.entity = self.entityDescriptionForEntityClass(entity) + fetchRequest.entity = self.entityDescriptionForEntityClass(T) fetchRequest.fetchLimit = 0 fetchRequest.resultType = .ManagedObjectIDResultType @@ -201,15 +201,15 @@ internal extension NSManagedObjectContext { return fetchResults } - internal func deleteAll(entity: T.Type, _ queryClauses: FetchClause...) -> Int? { + internal func deleteAll(from: From, _ queryClauses: FetchClause...) -> Int? { - return self.deleteAll(entity, queryClauses) + return self.deleteAll(from, queryClauses) } - internal func deleteAll(entity: T.Type, _ queryClauses: [FetchClause]) -> Int? { + internal func deleteAll(from: From, _ queryClauses: [FetchClause]) -> Int? { let fetchRequest = NSFetchRequest() - fetchRequest.entity = self.entityDescriptionForEntityClass(entity) + fetchRequest.entity = self.entityDescriptionForEntityClass(T) fetchRequest.fetchLimit = 0 fetchRequest.resultType = .ManagedObjectResultType fetchRequest.returnsObjectsAsFaults = true @@ -246,15 +246,15 @@ internal extension NSManagedObjectContext { return numberOfDeletedObjects } - internal func queryValue(entity: T.Type, _ selectClause: Select, _ queryClauses: FetchClause...) -> U? { + internal func queryValue(from: From, _ selectClause: Select, _ queryClauses: FetchClause...) -> U? { - return self.queryValue(entity, selectClause, queryClauses) + return self.queryValue(from, selectClause, queryClauses) } - internal func queryValue(entity: T.Type, _ selectClause: Select, _ queryClauses: [FetchClause]) -> U? { + internal func queryValue(from: From, _ selectClause: Select, _ queryClauses: [FetchClause]) -> U? { let fetchRequest = NSFetchRequest() - fetchRequest.entity = self.entityDescriptionForEntityClass(entity) + fetchRequest.entity = self.entityDescriptionForEntityClass(T) fetchRequest.fetchLimit = 0 selectClause.applyToFetchRequest(fetchRequest) @@ -286,15 +286,15 @@ internal extension NSManagedObjectContext { return nil } - internal func queryAttributes(entity: T.Type, _ selectClause: Select, _ queryClauses: QueryClause...) -> [[NSString: AnyObject]]? { + internal func queryAttributes(from: From, _ selectClause: Select, _ queryClauses: QueryClause...) -> [[NSString: AnyObject]]? { - return self.queryAttributes(entity, selectClause, queryClauses) + return self.queryAttributes(from, selectClause, queryClauses) } - internal func queryAttributes(entity: T.Type, _ selectClause: Select, _ queryClauses: [QueryClause]) -> [[NSString: AnyObject]]? { + internal func queryAttributes(from: From, _ selectClause: Select, _ queryClauses: [QueryClause]) -> [[NSString: AnyObject]]? { let fetchRequest = NSFetchRequest() - fetchRequest.entity = self.entityDescriptionForEntityClass(entity) + fetchRequest.entity = self.entityDescriptionForEntityClass(T) fetchRequest.fetchLimit = 0 selectClause.applyToFetchRequest(fetchRequest) diff --git a/HardcoreDataTests/HardcoreDataTests.swift b/HardcoreDataTests/HardcoreDataTests.swift index e249e06..94de683 100644 --- a/HardcoreDataTests/HardcoreDataTests.swift +++ b/HardcoreDataTests/HardcoreDataTests.swift @@ -77,7 +77,7 @@ class HardcoreDataTests: XCTestCase { obj1.testDate = NSDate() let count = transaction.queryValue( - TestEntity1.self, + From(TestEntity1), Select(.Count("testNumber")) ) XCTAssertTrue(count == 0, "count == 0 (actual: \(count))") // counts only objects in store @@ -110,7 +110,7 @@ class HardcoreDataTests: XCTestCase { obj4.testDate = NSDate() let objs4test = transaction.fetchOne( - TestEntity2.self, + From(TestEntity2), Where("testEntityID", isEqualTo: 4), CustomizeFetch { (fetchRequest) -> Void in @@ -120,7 +120,7 @@ class HardcoreDataTests: XCTestCase { XCTAssertNotNil(objs4test, "objs4test != nil") let objs5test = transaction.fetchOne( - TestEntity2.self, + From(TestEntity2), Where("testEntityID", isEqualTo: 4), CustomizeFetch { (fetchRequest) -> Void in @@ -135,7 +135,7 @@ class HardcoreDataTests: XCTestCase { transaction.commit { (result) -> Void in let objs4test = HardcoreData.fetchOne( - TestEntity2.self, + From(TestEntity2), Where("testEntityID", isEqualTo: 4), CustomizeFetch { (fetchRequest) -> Void in @@ -144,7 +144,7 @@ class HardcoreDataTests: XCTestCase { ) XCTAssertNil(objs4test, "objs4test == nil") - let objs5test = detachedTransaction.fetchCount(TestEntity2) + let objs5test = detachedTransaction.fetchCount(From(TestEntity2)) XCTAssertTrue(objs5test == 3, "objs5test == 3") XCTAssertTrue(NSThread.isMainThread(), "NSThread.isMainThread()") @@ -163,11 +163,11 @@ class HardcoreDataTests: XCTestCase { let queryExpectation = self.expectationWithDescription("Query creation") HardcoreData.beginAsynchronous { (transaction) -> Void in - let obj1 = transaction.fetchOne(TestEntity1) + let obj1 = transaction.fetchOne(From(TestEntity1)) XCTAssertNotNil(obj1, "obj1 != nil") let objs2 = transaction.fetchAll( - TestEntity2.self, + From(TestEntity2), Where("testNumber", isEqualTo: 100) || Where("%K == %@", "testNumber", 90), SortedBy(.Ascending("testEntityID"), .Descending("testString")), CustomizeFetch { (fetchRequest) -> Void in @@ -181,7 +181,7 @@ class HardcoreDataTests: XCTestCase { transaction.commit { (result) -> Void in let counts = HardcoreData.queryAttributes( - TestEntity2.self, + From(TestEntity2), Select(.Count("testString", As: "count"), "testString"), GroupBy("testString") ) @@ -203,13 +203,13 @@ class HardcoreDataTests: XCTestCase { self.waitForExpectationsWithTimeout(100, handler: nil) let max1 = HardcoreData.queryValue( - TestEntity2.self, + From(TestEntity2), Select(.Maximum("testNumber")) ) XCTAssertTrue(max1 == 100, "max == 100 (actual: \(max1))") let max2 = HardcoreData.queryValue( - TestEntity2.self, + From(TestEntity2), Select(.Maximum("testNumber")), Where("%K > %@", "testEntityID", 2) ) @@ -217,11 +217,11 @@ class HardcoreDataTests: XCTestCase { HardcoreData.beginSynchronous { (transaction) -> Void in - let numberOfDeletedObjects1 = transaction.deleteAll(TestEntity1) + let numberOfDeletedObjects1 = transaction.deleteAll(From(TestEntity1)) XCTAssertTrue(numberOfDeletedObjects1 == 1, "numberOfDeletedObjects1 == 1 (actual: \(numberOfDeletedObjects1))") let numberOfDeletedObjects2 = transaction.deleteAll( - TestEntity2.self, + From(TestEntity2), Where("%K > %@", "testEntityID", 2) ) XCTAssertTrue(numberOfDeletedObjects2 == 2, "numberOfDeletedObjects2 == 2 (actual: \(numberOfDeletedObjects2))") @@ -229,11 +229,11 @@ class HardcoreDataTests: XCTestCase { transaction.commitAndWait() } - let objs1 = HardcoreData.fetchAll(TestEntity1) + let objs1 = HardcoreData.fetchAll(From(TestEntity1)) XCTAssertNotNil(objs1, "objs1 != nil") XCTAssertTrue(objs1?.count == 0, "objs1?.count == 0") - let objs2 = HardcoreData.fetchAll(TestEntity2) + let objs2 = HardcoreData.fetchAll(From(TestEntity2)) XCTAssertNotNil(objs2, "objs2 != nil") XCTAssertTrue(objs2?.count == 1, "objs2?.count == 1") @@ -254,7 +254,7 @@ class HardcoreDataTests: XCTestCase { XCTAssertTrue(hasChanges, "hasChanges == true") let count: Int? = HardcoreData.queryValue( - TestEntity1.self, + From(TestEntity1), Select(.Count("testNumber")) ) XCTAssertTrue(count == 1, "count == 1 (actual: \(count))") @@ -274,7 +274,7 @@ class HardcoreDataTests: XCTestCase { XCTAssertTrue(hasChanges, "hasChanges == true") let count = HardcoreData.queryValue( - TestEntity1.self, + From(TestEntity1), Select(.Count("testNumber")) ) XCTAssertTrue(count == 2, "count == 2 (actual: \(count))") diff --git a/Libraries/GCDKit b/Libraries/GCDKit index d8dabc0..a11a07a 160000 --- a/Libraries/GCDKit +++ b/Libraries/GCDKit @@ -1 +1 @@ -Subproject commit d8dabc024eaa02f786a2a4428247eeefb2c826ff +Subproject commit a11a07aa2585c5c294d1547e82829b402ad59dc3