Skip to content

Commit b852eea

Browse files
committed
Added convenience single boolean for predicate factory.
1 parent 893f789 commit b852eea

File tree

217 files changed

+246
-206
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

217 files changed

+246
-206
lines changed

Sources/SafeFetching/Predicate/Types/Predicate.swift

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,13 @@ extension Builders.Predicate {
5959
predicate(Entity.fetchableMembers)
6060
}
6161

62+
public static func predicate<TargetEntity: Fetchable>(
63+
_ predicate: (Entity.FetchableMembers) -> FetchableMember<TargetEntity, Bool>
64+
) -> Builders.Predicate<TargetEntity> {
65+
let fetchableMember = predicate(Entity.fetchableMembers)
66+
return Builders.Predicate<TargetEntity>(identifier: fetchableMember.identifier, operatorString: "==", value: true)
67+
}
68+
6269
public convenience init(
6370
identifier: String,
6471
isInverted: Bool = false,

Sources/SafeFetching/Request/FetchableMember+Operators/FetchableMember+Collection.swift

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ import CoreData
1010
extension FetchableMember where Value: DatabaseTestValue {
1111

1212
/// Returns a predicate to check whether the attribute targeted by `self` is contained in the array.
13+
///
14+
/// - Tip: Import SafeFetching with `@_spi(SafeFetching)` to use `Collection.contains(_:)`.
1315
public func isIn(_ values: [Value]) -> Builders.Predicate<Entity> {
1416
Builders.Predicate(
1517
identifier: identifier,
@@ -19,6 +21,8 @@ extension FetchableMember where Value: DatabaseTestValue {
1921
}
2022

2123
/// Returns a predicate to check whether the attribute targeted by `self` is contained in the collection.
24+
///
25+
/// - Tip: Import SafeFetching with `@_spi(SafeFetching)` to use `Collection.contains(_:)`.
2226
public func isIn(_ values: Value...) -> Builders.Predicate<Entity> {
2327
Builders.Predicate(
2428
identifier: identifier,
@@ -28,6 +32,8 @@ extension FetchableMember where Value: DatabaseTestValue {
2832
}
2933

3034
/// Returns a predicate to check whether the attribute targeted by `self` is contained in the collection.
35+
///
36+
/// - Tip: Import SafeFetching with `@_spi(SafeFetching)` to use `Collection.contains(_:)`.
3137
public func isIn(_ values: some Collection<Value>) -> Builders.Predicate<Entity> {
3238
Builders.Predicate(
3339
identifier: identifier,

Sources/SafeFetching/Request/FetchableMember+Operators/FetchableMember+OptionSet.swift

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,11 @@ import CoreData
77

88
// MARK: - From FetchableMember
99

10-
extension FetchableMember where Value: DatabaseTestValue {
10+
extension FetchableMember where Value: OptionSet & DatabaseTestValue {
1111

1212
/// Returns a predicate to check whether the provided `value` intersects with the attribute targeted by `self`.
13+
///
14+
/// - Tip: Import SafeFetching with `@_spi(SafeFetching)` to use `OptionSet.contains(_:)`.
1315
public func intersects(_ value: Value) -> Builders.Predicate<Entity> {
1416
Builders.Predicate(
1517
identifier: identifier,
@@ -19,6 +21,23 @@ extension FetchableMember where Value: DatabaseTestValue {
1921
}
2022
}
2123

24+
// MARK: - From FetchableMember (Optional)
25+
26+
extension FetchableMember {
27+
28+
/// Returns a predicate to check whether the provided `value` intersects with the attribute targeted by `self`.
29+
///
30+
/// - Tip: Import SafeFetching with `@_spi(SafeFetching)` to use `OptionSet.contains(_:)`.
31+
public func intersects<T>(_ value: T) -> Builders.Predicate<Entity>
32+
where Value == T?, T: OptionSet & DatabaseTestValue {
33+
Builders.Predicate(
34+
identifier: identifier,
35+
operatorString: "& \(value.testValue) ==",
36+
value: value
37+
)
38+
}
39+
}
40+
2241
// MARK: - From OptionSet
2342

2443
extension OptionSet where Self: DatabaseTestValue {

Sources/SafeFetching/Request/FetchableMember+Operators/FetchableMember+Range.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ import CoreData
1010
extension FetchableMember where Value: Numeric & Comparable {
1111

1212
/// Returns a predicate to check whether the provided `range` contains the attribute targeted by `self`.
13+
///
14+
/// - Tip: Import SafeFetching with `@_spi(SafeFetching)` to use `ClosedRange.contains(_:)`.
1315
public func isIn(_ range: ClosedRange<Value>) -> Builders.Predicate<Entity> {
1416
Builders.Predicate(
1517
identifier: identifier,
@@ -19,6 +21,8 @@ extension FetchableMember where Value: Numeric & Comparable {
1921
}
2022

2123
/// Returns a predicate to check whether the provided `range` contains the attribute targeted by `self`.
24+
///
25+
/// - Tip: Import SafeFetching with `@_spi(SafeFetching)` to use `Range.contains(_:)`.
2226
public func isIn(_ range: Range<Value>) -> Builders.Predicate<Entity> {
2327
let format = "\(range.lowerBound) <= \(identifier) AND \(identifier) < \(range.upperBound)"
2428
return Builders.Predicate<Entity>(nsValue: NSPredicate(format: format))

docs/data/documentation/safefetching.json

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{"hierarchy":{"paths":[["doc:\/\/SafeFetching\/documentation\/SafeFetching"]]},"schemaVersion":{"patch":0,"major":0,"minor":3},"identifier":{"interfaceLanguage":"swift","url":"doc:\/\/SafeFetching\/documentation\/SafeFetching\/!(_:)-1nel2"},"variants":[{"paths":["\/documentation\/safefetching\/!(_:)-1nel2"],"traits":[{"interfaceLanguage":"swift"}]}],"metadata":{"symbolKind":"op","roleHeading":"Operator","modules":[{"name":"SafeFetching"}],"externalID":"s:12SafeFetching1nopyAA8BuildersO9PredicateCy_xGAgA9FetchableRzlF","role":"symbol","fragments":[{"text":"func","kind":"keyword"},{"text":" ","kind":"text"},{"text":"!","kind":"identifier"},{"text":" ","kind":"text"},{"text":"<","kind":"text"},{"text":"E","kind":"genericParameter"},{"kind":"text","text":">("},{"kind":"typeIdentifier","text":"Builders","preciseIdentifier":"s:12SafeFetching8BuildersO"},{"kind":"text","text":"."},{"kind":"typeIdentifier","text":"Predicate","preciseIdentifier":"s:12SafeFetching8BuildersO9PredicateC"},{"kind":"text","text":"<"},{"kind":"typeIdentifier","text":"E"},{"kind":"text","text":">) -> "},{"kind":"typeIdentifier","text":"Builders","preciseIdentifier":"s:12SafeFetching8BuildersO"},{"kind":"text","text":"."},{"kind":"typeIdentifier","text":"Predicate","preciseIdentifier":"s:12SafeFetching8BuildersO9PredicateC"},{"text":"<","kind":"text"},{"text":"E","kind":"typeIdentifier"},{"text":">","kind":"text"}],"title":"!(_:)"},"sections":[],"kind":"symbol","primaryContentSections":[{"kind":"declarations","declarations":[{"platforms":["macOS"],"tokens":[{"text":"func","kind":"keyword"},{"text":" ","kind":"text"},{"text":"!","kind":"identifier"},{"text":" ","kind":"text"},{"text":"<","kind":"text"},{"text":"E","kind":"genericParameter"},{"text":">(","kind":"text"},{"text":"rhs","kind":"internalParam"},{"text":": ","kind":"text"},{"text":"Builders","kind":"typeIdentifier","preciseIdentifier":"s:12SafeFetching8BuildersO","identifier":"doc:\/\/SafeFetching\/documentation\/SafeFetching\/Builders"},{"text":".","kind":"text"},{"text":"Predicate","kind":"typeIdentifier","preciseIdentifier":"s:12SafeFetching8BuildersO9PredicateC","identifier":"doc:\/\/SafeFetching\/documentation\/SafeFetching\/Builders\/Predicate"},{"text":"<","kind":"text"},{"text":"E","kind":"typeIdentifier"},{"text":">) -> ","kind":"text"},{"text":"Builders","kind":"typeIdentifier","preciseIdentifier":"s:12SafeFetching8BuildersO","identifier":"doc:\/\/SafeFetching\/documentation\/SafeFetching\/Builders"},{"text":".","kind":"text"},{"text":"Predicate","kind":"typeIdentifier","preciseIdentifier":"s:12SafeFetching8BuildersO9PredicateC","identifier":"doc:\/\/SafeFetching\/documentation\/SafeFetching\/Builders\/Predicate"},{"text":"<","kind":"text"},{"text":"E","kind":"typeIdentifier"},{"text":"> ","kind":"text"},{"text":"where","kind":"keyword"},{"text":" ","kind":"text"},{"text":"E","kind":"typeIdentifier"},{"text":" : ","kind":"text"},{"text":"Fetchable","kind":"typeIdentifier","preciseIdentifier":"s:12SafeFetching9FetchableP","identifier":"doc:\/\/SafeFetching\/documentation\/SafeFetching\/Fetchable"}],"languages":["swift"]}]}],"references":{"doc://SafeFetching/documentation/SafeFetching/!(_:)-1nel2":{"fragments":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"!"},{"kind":"text","text":" "},{"kind":"text","text":"<"},{"kind":"genericParameter","text":"E"},{"kind":"text","text":">("},{"kind":"typeIdentifier","preciseIdentifier":"s:12SafeFetching8BuildersO","text":"Builders"},{"kind":"text","text":"."},{"kind":"typeIdentifier","preciseIdentifier":"s:12SafeFetching8BuildersO9PredicateC","text":"Predicate"},{"kind":"text","text":"<"},{"kind":"typeIdentifier","text":"E"},{"kind":"text","text":">) -> "},{"kind":"typeIdentifier","preciseIdentifier":"s:12SafeFetching8BuildersO","text":"Builders"},{"kind":"text","text":"."},{"kind":"typeIdentifier","preciseIdentifier":"s:12SafeFetching8BuildersO9PredicateC","text":"Predicate"},{"kind":"text","text":"<"},{"kind":"typeIdentifier","text":"E"},{"kind":"text","text":">"}],"url":"\/documentation\/safefetching\/!(_:)-1nel2","role":"symbol","abstract":[],"identifier":"doc:\/\/SafeFetching\/documentation\/SafeFetching\/!(_:)-1nel2","kind":"symbol","type":"topic","title":"!(_:)"},"doc://SafeFetching/documentation/SafeFetching/Builders":{"type":"topic","url":"\/documentation\/safefetching\/builders","identifier":"doc:\/\/SafeFetching\/documentation\/SafeFetching\/Builders","fragments":[{"kind":"keyword","text":"enum"},{"kind":"text","text":" "},{"kind":"identifier","text":"Builders"}],"abstract":[{"type":"text","text":"Namespace to hide most building types used by SafeFetching to make requests."}],"role":"symbol","title":"Builders","navigatorTitle":[{"kind":"identifier","text":"Builders"}],"kind":"symbol"},"doc://SafeFetching/documentation/SafeFetching/FetchableMember":{"role":"symbol","abstract":[{"text":"Stores types and identifier of an entity and attribute or relationship that can be used for fetching.","type":"text"}],"fragments":[{"text":"struct","kind":"keyword"},{"text":" ","kind":"text"},{"text":"FetchableMember","kind":"identifier"}],"type":"topic","identifier":"doc:\/\/SafeFetching\/documentation\/SafeFetching\/FetchableMember","url":"\/documentation\/safefetching\/fetchablemember","kind":"symbol","navigatorTitle":[{"text":"FetchableMember","kind":"identifier"}],"title":"FetchableMember"},"doc://SafeFetching/documentation/SafeFetching/Fetchable":{"title":"Fetchable","identifier":"doc:\/\/SafeFetching\/documentation\/SafeFetching\/Fetchable","type":"topic","fragments":[{"text":"protocol","kind":"keyword"},{"text":" ","kind":"text"},{"text":"Fetchable","kind":"identifier"}],"role":"symbol","kind":"symbol","navigatorTitle":[{"text":"Fetchable","kind":"identifier"}],"abstract":[{"type":"text","text":"Implemented by a "},{"type":"codeVoice","code":"NSManagedObject"},{"type":"text","text":" to offer fetching using SafeFetching API."}],"url":"\/documentation\/safefetching\/fetchable"},"doc://SafeFetching/documentation/SafeFetching":{"role":"collection","identifier":"doc:\/\/SafeFetching\/documentation\/SafeFetching","kind":"symbol","abstract":[{"type":"text","text":"Convenience functions around "},{"type":"codeVoice","code":"CoreData"},{"type":"text","text":" fetching."}],"type":"topic","title":"SafeFetching","url":"\/documentation\/safefetching"},"doc://SafeFetching/documentation/SafeFetching/Builders/Predicate":{"title":"Builders.Predicate","kind":"symbol","abstract":[{"text":"Generated from ","type":"text"},{"isActive":true,"type":"reference","identifier":"doc:\/\/SafeFetching\/documentation\/SafeFetching\/FetchableMember"},{"text":" operations to wrap a ","type":"text"},{"type":"codeVoice","code":"NSPredicate"},{"text":".","type":"text"}],"navigatorTitle":[{"text":"Predicate","kind":"identifier"}],"fragments":[{"text":"class","kind":"keyword"},{"text":" ","kind":"text"},{"text":"Predicate","kind":"identifier"}],"type":"topic","url":"\/documentation\/safefetching\/builders\/predicate","role":"symbol","identifier":"doc:\/\/SafeFetching\/documentation\/SafeFetching\/Builders\/Predicate"}}}
1+
{"schemaVersion":{"major":0,"minor":3,"patch":0},"identifier":{"url":"doc:\/\/SafeFetching\/documentation\/SafeFetching\/!(_:)-1nel2","interfaceLanguage":"swift"},"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"text":"func","kind":"keyword"},{"text":" ","kind":"text"},{"text":"!","kind":"identifier"},{"text":" ","kind":"text"},{"text":"<","kind":"text"},{"text":"E","kind":"genericParameter"},{"text":">(","kind":"text"},{"text":"rhs","kind":"internalParam"},{"text":": ","kind":"text"},{"text":"Builders","preciseIdentifier":"s:12SafeFetching8BuildersO","kind":"typeIdentifier","identifier":"doc:\/\/SafeFetching\/documentation\/SafeFetching\/Builders"},{"text":".","kind":"text"},{"text":"Predicate","preciseIdentifier":"s:12SafeFetching8BuildersO9PredicateC","kind":"typeIdentifier","identifier":"doc:\/\/SafeFetching\/documentation\/SafeFetching\/Builders\/Predicate"},{"text":"<","kind":"text"},{"text":"E","kind":"typeIdentifier"},{"text":">) -> ","kind":"text"},{"text":"Builders","preciseIdentifier":"s:12SafeFetching8BuildersO","kind":"typeIdentifier","identifier":"doc:\/\/SafeFetching\/documentation\/SafeFetching\/Builders"},{"text":".","kind":"text"},{"text":"Predicate","preciseIdentifier":"s:12SafeFetching8BuildersO9PredicateC","kind":"typeIdentifier","identifier":"doc:\/\/SafeFetching\/documentation\/SafeFetching\/Builders\/Predicate"},{"text":"<","kind":"text"},{"text":"E","kind":"typeIdentifier"},{"text":"> ","kind":"text"},{"text":"where","kind":"keyword"},{"text":" ","kind":"text"},{"text":"E","kind":"typeIdentifier"},{"text":" : ","kind":"text"},{"text":"Fetchable","preciseIdentifier":"s:12SafeFetching9FetchableP","kind":"typeIdentifier","identifier":"doc:\/\/SafeFetching\/documentation\/SafeFetching\/Fetchable"}],"platforms":["macOS"],"languages":["swift"]}]}],"variants":[{"paths":["\/documentation\/safefetching\/!(_:)-1nel2"],"traits":[{"interfaceLanguage":"swift"}]}],"kind":"symbol","hierarchy":{"paths":[["doc:\/\/SafeFetching\/documentation\/SafeFetching"]]},"sections":[],"metadata":{"externalID":"s:12SafeFetching1nopyAA8BuildersO9PredicateCy_xGAgA9FetchableRzlF","modules":[{"name":"SafeFetching"}],"title":"!(_:)","symbolKind":"op","role":"symbol","roleHeading":"Operator","fragments":[{"text":"func","kind":"keyword"},{"text":" ","kind":"text"},{"text":"!","kind":"identifier"},{"text":" ","kind":"text"},{"text":"<","kind":"text"},{"text":"E","kind":"genericParameter"},{"text":">(","kind":"text"},{"text":"Builders","preciseIdentifier":"s:12SafeFetching8BuildersO","kind":"typeIdentifier"},{"text":".","kind":"text"},{"text":"Predicate","preciseIdentifier":"s:12SafeFetching8BuildersO9PredicateC","kind":"typeIdentifier"},{"kind":"text","text":"<"},{"kind":"typeIdentifier","text":"E"},{"kind":"text","text":">) -> "},{"kind":"typeIdentifier","text":"Builders","preciseIdentifier":"s:12SafeFetching8BuildersO"},{"kind":"text","text":"."},{"kind":"typeIdentifier","text":"Predicate","preciseIdentifier":"s:12SafeFetching8BuildersO9PredicateC"},{"kind":"text","text":"<"},{"text":"E","kind":"typeIdentifier"},{"text":">","kind":"text"}]},"references":{"doc://SafeFetching/documentation/SafeFetching/FetchableMember":{"title":"FetchableMember","url":"\/documentation\/safefetching\/fetchablemember","role":"symbol","identifier":"doc:\/\/SafeFetching\/documentation\/SafeFetching\/FetchableMember","abstract":[{"text":"Stores types and identifier of an entity and attribute or relationship that can be used for fetching.","type":"text"}],"fragments":[{"text":"struct","kind":"keyword"},{"text":" ","kind":"text"},{"text":"FetchableMember","kind":"identifier"}],"kind":"symbol","type":"topic","navigatorTitle":[{"text":"FetchableMember","kind":"identifier"}]},"doc://SafeFetching/documentation/SafeFetching":{"kind":"symbol","type":"topic","title":"SafeFetching","identifier":"doc:\/\/SafeFetching\/documentation\/SafeFetching","abstract":[{"type":"text","text":"Convenience functions around "},{"type":"codeVoice","code":"CoreData"},{"type":"text","text":" fetching."}],"url":"\/documentation\/safefetching","role":"collection"},"doc://SafeFetching/documentation/SafeFetching/!(_:)-1nel2":{"type":"topic","title":"!(_:)","fragments":[{"text":"func","kind":"keyword"},{"text":" ","kind":"text"},{"text":"!","kind":"identifier"},{"text":" ","kind":"text"},{"text":"<","kind":"text"},{"text":"E","kind":"genericParameter"},{"text":">(","kind":"text"},{"preciseIdentifier":"s:12SafeFetching8BuildersO","text":"Builders","kind":"typeIdentifier"},{"text":".","kind":"text"},{"preciseIdentifier":"s:12SafeFetching8BuildersO9PredicateC","text":"Predicate","kind":"typeIdentifier"},{"text":"<","kind":"text"},{"text":"E","kind":"typeIdentifier"},{"text":">) -> ","kind":"text"},{"preciseIdentifier":"s:12SafeFetching8BuildersO","text":"Builders","kind":"typeIdentifier"},{"text":".","kind":"text"},{"preciseIdentifier":"s:12SafeFetching8BuildersO9PredicateC","text":"Predicate","kind":"typeIdentifier"},{"text":"<","kind":"text"},{"text":"E","kind":"typeIdentifier"},{"text":">","kind":"text"}],"identifier":"doc:\/\/SafeFetching\/documentation\/SafeFetching\/!(_:)-1nel2","abstract":[],"role":"symbol","kind":"symbol","url":"\/documentation\/safefetching\/!(_:)-1nel2"},"doc://SafeFetching/documentation/SafeFetching/Fetchable":{"kind":"symbol","navigatorTitle":[{"kind":"identifier","text":"Fetchable"}],"title":"Fetchable","role":"symbol","abstract":[{"type":"text","text":"Implemented by a "},{"type":"codeVoice","code":"NSManagedObject"},{"type":"text","text":" to offer fetching using SafeFetching API."}],"url":"\/documentation\/safefetching\/fetchable","identifier":"doc:\/\/SafeFetching\/documentation\/SafeFetching\/Fetchable","type":"topic","fragments":[{"kind":"keyword","text":"protocol"},{"kind":"text","text":" "},{"kind":"identifier","text":"Fetchable"}]},"doc://SafeFetching/documentation/SafeFetching/Builders/Predicate":{"kind":"symbol","abstract":[{"type":"text","text":"Generated from "},{"type":"reference","isActive":true,"identifier":"doc:\/\/SafeFetching\/documentation\/SafeFetching\/FetchableMember"},{"type":"text","text":" operations to wrap a "},{"type":"codeVoice","code":"NSPredicate"},{"type":"text","text":"."}],"fragments":[{"kind":"keyword","text":"class"},{"kind":"text","text":" "},{"kind":"identifier","text":"Predicate"}],"title":"Builders.Predicate","url":"\/documentation\/safefetching\/builders\/predicate","navigatorTitle":[{"kind":"identifier","text":"Predicate"}],"role":"symbol","identifier":"doc:\/\/SafeFetching\/documentation\/SafeFetching\/Builders\/Predicate","type":"topic"},"doc://SafeFetching/documentation/SafeFetching/Builders":{"abstract":[{"text":"Namespace to hide most building types used by SafeFetching to make requests.","type":"text"}],"role":"symbol","kind":"symbol","type":"topic","identifier":"doc:\/\/SafeFetching\/documentation\/SafeFetching\/Builders","title":"Builders","fragments":[{"text":"enum","kind":"keyword"},{"text":" ","kind":"text"},{"text":"Builders","kind":"identifier"}],"navigatorTitle":[{"text":"Builders","kind":"identifier"}],"url":"\/documentation\/safefetching\/builders"}}}

0 commit comments

Comments
 (0)