Skip to content

Commit e1d7953

Browse files
authored
Merge pull request #30 from ABridoux/fetchable-value
# New FetchableValue protocol Removed DatabaseValue and DatabaseTestValue protocol in favor of a single protocol FetchableValue to make it easier for complex types to be used in a predicate. Also added support for NSManagedObject and NSManagedObjectID comparison and to-many relationship contains operator.
2 parents 3888d6a + f0b1369 commit e1d7953

20 files changed

Lines changed: 496 additions & 298 deletions

Sources/SafeFetching/Extensions/NSPredicate+Convenience.swift

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,29 @@ import CoreData
99

1010
extension NSPredicate {
1111

12-
/// Safely builds a predicate for a provided entity type.
12+
/// Returns a `NSPredicate` built from a SafeFetching predicate.
13+
/// - Parameter predicate: A predicate which will be mapped to as `NSPredicate`.
1314
public static func safe<Entity: Fetchable>(_ predicate: Builders.Predicate<Entity>) -> NSPredicate {
1415
predicate.nsValue
1516
}
1617

17-
/// Safely builds a predicate for a provided entity type.
18+
/// Returns a `NSPredicate` built from a SafeFetching predicate.
19+
/// - Parameters:
20+
/// - _: Entity type used to build the predicate.
21+
/// - predicate: A closure that takes an `Entity.FetchableMembers` value to return a SafeFetching predicate.
22+
@_disfavoredOverload
23+
public static func safe<SourceEntity: Fetchable>(
24+
on _: SourceEntity.Type,
25+
_ predicate: (SourceEntity.FetchableMembers) -> Builders.Predicate<SourceEntity>
26+
) -> NSPredicate {
27+
let predicate = predicate(SourceEntity.fetchableMembers)
28+
return predicate.nsValue
29+
}
30+
31+
/// Returns a `NSPredicate` built from a SafeFetching predicate.
32+
/// - Parameters:
33+
/// - _: Entity type used to build the predicate.
34+
/// - predicate: A closure that takes an `Entity.FetchableMembers` value to return a SafeFetching predicate.
1835
public static func safe<SourceEntity: Fetchable, TargetEntity: Fetchable>(
1936
on _: SourceEntity.Type,
2037
_ predicate: (SourceEntity.FetchableMembers) -> Builders.Predicate<TargetEntity>
@@ -23,7 +40,10 @@ extension NSPredicate {
2340
return predicate.nsValue
2441
}
2542

26-
/// Safely builds a predicate for a provided entity type.
43+
/// Returns a `NSPredicate` built from a SafeFetching predicate.
44+
/// - Parameters:
45+
/// - _: Entity type used to build the predicate.
46+
/// - fetchableMember: A closure that takes an `Entity.FetchableMembers` value to return a `FetchableMember` targeting a Boolean attribute of `Entity`.
2747
public static func safe<SourceEntity: Fetchable, TargetEntity: Fetchable>(
2848
on _: SourceEntity.Type,
2949
_ fetchableMember: (SourceEntity.FetchableMembers) -> FetchableMember<TargetEntity, Bool>

Sources/SafeFetching/Macros.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
// MARK: - FetchableManagedObject
77

8-
/// Add `FetchableMembers` and `fetchableMembers` to a `NSManagedObject` to make it conform to `Fetchable`.
8+
/// Add `FetchableMembers` and `fetchableMembers` to a `NSManagedObject` to make it conform to `Fetchable` and add `FetchableMembers`.
99
@attached(member, names: arbitrary)
1010
@attached(extension, conformances: Fetchable)
1111
public macro FetchableManagedObject() = #externalMacro(module: "SafeFetchingMacros", type: "FetchableManagedObjectMacro")

Sources/SafeFetching/Predicate/DatabaseTestValue.swift

Lines changed: 0 additions & 134 deletions
This file was deleted.

Sources/SafeFetching/Predicate/DatabaseValue.swift

Lines changed: 0 additions & 108 deletions
This file was deleted.

0 commit comments

Comments
 (0)