Skip to content

Commit 893f789

Browse files
committed
Updated documentation.
1 parent 784a405 commit 893f789

File tree

216 files changed

+270
-232
lines changed

Some content is hidden

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

216 files changed

+270
-232
lines changed

Sources/SafeFetching/Predicate/Types/Predicate.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import CoreData
99

1010
extension Builders {
1111

12+
/// Generated from ``FetchableMember`` operations to wrap a `NSPredicate`.
1213
public class Predicate<Entity: Fetchable> {
1314

1415
// MARK: Type alias

Sources/SafeFetching/Request/FetchableMember.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ public struct FetchableMember<Entity: Fetchable, Value>: Sendable {
1111

1212
// MARK: Properties
1313

14+
/// Attribute or relationship identifier used to generate `NSPredicate`.
1415
public let identifier: String
1516

1617
// MARK: Init

Sources/SafeFetching/SafeFetching.docc/Articles/build-predicates.md

Lines changed: 11 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,16 @@ Examples in the article refer to this entity.
66

77
```swift
88
@FetchableManagedObject
9-
final class StubEntity: NSManagedObject {
9+
final class User: NSManagedObject {
1010
@NSManaged var score = 0.0
1111
@NSManaged var name: String? = ""
1212
}
1313
```
1414

15-
When building a request, the ``Builders/Request/where(_:)-5uzqj`` operation allows to specify a predicate. For a demonstration purpose in this article, predicates are specified after their implicit declaration.
15+
When building a request, the ``Builders/Request/where(_:)-5uzqj`` operation allows to specify a predicate. For a demonstration purpose in this article, predicates are specified after their implicit declaration, as shown below.
1616

1717
```swift
18-
let predicate: Builders.Predicate<StubEntity>
19-
$0.name == "Toto"
18+
let predicate: Builders.Predicate<User> = .predicate { $0.name == "Toto" }
2019
```
2120

2221
## Comparison
@@ -71,7 +70,7 @@ Inversion is supported.
7170

7271

7372
## Advanced Operations
74-
It's possible to use the advanced operators offered by `NSPredicate` safely by specifying calling the dedicated function from the ``FetchableMember``.
73+
It's possible to use the advanced operators offered by `NSPredicate` safely by calling the dedicated function from ``FetchableMember``.
7574

7675
###### Has Prefix (String property)
7776

@@ -105,7 +104,7 @@ $0.score.isIn(10...20)
105104
(10...20).contains($0.score)
106105
```
107106

108-
###### Matches a Regular Expression (string property)
107+
###### Matches a Regular Expression (String property)
109108

110109
```swift
111110
$0.name.matches("[A-Za-z]{3}")
@@ -159,12 +158,12 @@ $0.score.isIn(20..<40)
159158
```
160159

161160
## RawRepresentable
162-
`RawRepresentable` types can be used in the predicate when they conform to ``DatabaseValue`` (and thus can be stored as their raw value in the CoreData store).
161+
`RawRepresentable` types can be used in the predicate when they conform to ``DatabaseValue`` and ``DatabaseTestValue`` (and thus can be stored as their raw value in the CoreData store).
163162

164163
For instance with the `Colors` enum:
165164

166165
```swift
167-
struct Colors: String {
166+
struct Colors: String, DatabaseValue, DatabaseTestValue {
168167
case red
169168
case blue
170169
case green
@@ -212,11 +211,11 @@ other modules.
212211

213212
### OptionSet
214213

215-
With an option set, it's advised to rather use the `intersects` predicates.
214+
With an `OptionSet`, it's advised to rather use the `intersects` predicates.
216215
For instance with the `Colors` option set:
217216

218217
```swift
219-
struct Colors: OptionSet {
218+
struct Colors: OptionSet, DatabaseValue, DatabaseTestValue {
220219
let rawValue: Int
221220

222221
static let red = StubOptionSet(rawValue: 1 << 0)
@@ -235,26 +234,14 @@ $0.color.intersects([.red, .blue])
235234
[.red, .blue].intersects($0.color)
236235
```
237236

238-
### Comparing Option Set Values
239-
240-
Do note that
241-
```swift
242-
$0.color.intersects(.blue)
243-
```
244-
245-
is only the same as
246-
247-
```swift
248-
$0.color == .blue
249-
```
250-
*when the stored `color` is a single option*.
237+
> Note: `$0.color.intersects(.blue)` is only the same as `$0.color == .blue` when the stored `color` is a single option.
251238
252239
## Relationships
253240
Predicates in SafeFetching support relationships. Given the two entities:
254241

255242
```swift
256243
@FetchableManagedObject
257-
final class StubEntity: NSManagedObject {
244+
final class User: NSManagedObject {
258245
@NSManaged var score = 0.0
259246
@NSManaged var pet: Pet?
260247
}

Sources/SafeFetching/SafeFetching.docc/Articles/build-requests.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
Learn how to build requests with the SafeFetching DSL.
44

5-
Examples in the article refer to this `User`class.
5+
Examples in the article refer to this `User` class.
66

77
```swift
88
@FetchableManagedObject
@@ -107,13 +107,13 @@ Naming the parameter can sometimes be preferable for longer predicates.
107107
```swift
108108
User.request()
109109
.all()
110-
.where { members in
111-
members.score > 20 && members.name.contains("dore")
112-
|| !members.isAdmin
110+
.where { user in
111+
user.score > 20 && user.name.contains("dore")
112+
|| !user.isAdmin
113113
}
114114
```
115115

116-
To learn more about building predicates, you can read <doc:build-predicates>.
116+
To learn more about predicates, you can read <doc:build-predicates>.
117117

118118
### Sort
119119
After the target has been specified, one sort or more can be set to the request with ``Builders/Request/sorted(by:_:)``.

Sources/SafeFetching/SafeFetching.docc/Articles/getting-started.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ try User.request()
6161
.fetch(in: context) // [User]
6262
```
6363

64-
The `where(_:)` expects a predicate built on the provided `User.FetchableMembers` that is then converted to a `NSPredicate` with the appropriate format. The predicate is built using operators overloads or extensions on `FetchableMember`. Write more complex predicates still feels natural.
64+
The `where(_:)` expects a predicate built on the provided `User.FetchableMembers` that is then converted to a `NSPredicate` with the appropriate format. The predicate is built using operators overloads or extensions on `FetchableMember`. Writing more complex predicates still feels natural.
6565

6666
```swift
6767
try User.request()
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
# ``SafeFetching/FetchableMember``
2+
3+
## Topics
4+
5+
### Identifier
6+
7+
- ``identifier``
8+
9+
### Initializer
10+
11+
- ``init(identifier:)``
12+
13+
### String
14+
15+
- ``contains(_:options:)``
16+
- ``hasPrefix(_:options:)``
17+
- ``hasSuffix(_:options:)``
18+
19+
### OptionSet
20+
21+
- ``intersects(_:)``
22+
23+
### Collection
24+
25+
- ``isIn(_:)-6ue9b``
26+
- ``isIn(_:)-1652j``
27+
- ``isIn(_:)-5vms8``
28+
29+
### Range
30+
31+
- ``isIn(_:)-7lmi8``
32+
- ``isIn(_:)-1om8b``
33+
34+
### Regular Expression
35+
36+
- ``matches(_:options:)``
37+
38+
### Relationship Member
39+
40+
Allows to write naturally `$0.relationship.property` and generate the proper predicate.
41+
42+
- ``subscript(dynamicMember:)-ubmi``
43+
- ``subscript(dynamicMember:)-18job``

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-
{"identifier":{"url":"doc:\/\/SafeFetching\/documentation\/SafeFetching\/!(_:)-1nel2","interfaceLanguage":"swift"},"variants":[{"traits":[{"interfaceLanguage":"swift"}],"paths":["\/documentation\/safefetching\/!(_:)-1nel2"]}],"metadata":{"modules":[{"name":"SafeFetching"}],"role":"symbol","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"},{"kind":"text","text":"."},{"preciseIdentifier":"s:12SafeFetching8BuildersO9PredicateC","kind":"typeIdentifier","text":"Predicate"},{"kind":"text","text":"<"},{"kind":"typeIdentifier","text":"E"},{"kind":"text","text":">) -> "},{"preciseIdentifier":"s:12SafeFetching8BuildersO","kind":"typeIdentifier","text":"Builders"},{"kind":"text","text":"."},{"preciseIdentifier":"s:12SafeFetching8BuildersO9PredicateC","kind":"typeIdentifier","text":"Predicate"},{"kind":"text","text":"<"},{"kind":"typeIdentifier","text":"E"},{"kind":"text","text":">"}],"title":"!(_:)","externalID":"s:12SafeFetching1nopyAA8BuildersO9PredicateCy_xGAgA9FetchableRzlF","roleHeading":"Operator","symbolKind":"op"},"schemaVersion":{"patch":0,"minor":3,"major":0},"primaryContentSections":[{"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","kind":"typeIdentifier","preciseIdentifier":"s:12SafeFetching8BuildersO","identifier":"doc:\/\/SafeFetching\/documentation\/SafeFetching\/Builders"},{"text":".","kind":"text"},{"kind":"typeIdentifier","text":"Predicate","identifier":"doc:\/\/SafeFetching\/documentation\/SafeFetching\/Builders\/Predicate","preciseIdentifier":"s:12SafeFetching8BuildersO9PredicateC"},{"kind":"text","text":"<"},{"kind":"typeIdentifier","text":"E"},{"kind":"text","text":">) -> "},{"kind":"typeIdentifier","text":"Builders","identifier":"doc:\/\/SafeFetching\/documentation\/SafeFetching\/Builders","preciseIdentifier":"s:12SafeFetching8BuildersO"},{"kind":"text","text":"."},{"kind":"typeIdentifier","text":"Predicate","identifier":"doc:\/\/SafeFetching\/documentation\/SafeFetching\/Builders\/Predicate","preciseIdentifier":"s:12SafeFetching8BuildersO9PredicateC"},{"kind":"text","text":"<"},{"kind":"typeIdentifier","text":"E"},{"kind":"text","text":"> "},{"kind":"keyword","text":"where"},{"kind":"text","text":" "},{"kind":"typeIdentifier","text":"E"},{"kind":"text","text":" : "},{"identifier":"doc:\/\/SafeFetching\/documentation\/SafeFetching\/Fetchable","preciseIdentifier":"s:12SafeFetching9FetchableP","kind":"typeIdentifier","text":"Fetchable"}],"languages":["swift"],"platforms":["macOS"]}],"kind":"declarations"}],"hierarchy":{"paths":[["doc:\/\/SafeFetching\/documentation\/SafeFetching"]]},"sections":[],"kind":"symbol","references":{"doc://SafeFetching/documentation/SafeFetching/Builders":{"fragments":[{"kind":"keyword","text":"enum"},{"kind":"text","text":" "},{"kind":"identifier","text":"Builders"}],"navigatorTitle":[{"kind":"identifier","text":"Builders"}],"role":"symbol","title":"Builders","kind":"symbol","abstract":[{"type":"text","text":"Namespace to hide most building types used by SafeFetching to make requests."}],"identifier":"doc:\/\/SafeFetching\/documentation\/SafeFetching\/Builders","url":"\/documentation\/safefetching\/builders","type":"topic"},"doc://SafeFetching/documentation/SafeFetching/!(_:)-1nel2":{"title":"!(_:)","url":"\/documentation\/safefetching\/!(_:)-1nel2","type":"topic","abstract":[],"identifier":"doc:\/\/SafeFetching\/documentation\/SafeFetching\/!(_:)-1nel2","kind":"symbol","role":"symbol","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","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"},{"text":"Builders","preciseIdentifier":"s:12SafeFetching8BuildersO","kind":"typeIdentifier"},{"text":".","kind":"text"},{"text":"Predicate","preciseIdentifier":"s:12SafeFetching8BuildersO9PredicateC","kind":"typeIdentifier"},{"text":"<","kind":"text"},{"text":"E","kind":"typeIdentifier"},{"text":">","kind":"text"}]},"doc://SafeFetching/documentation/SafeFetching/Builders/Predicate":{"title":"Builders.Predicate","type":"topic","url":"\/documentation\/safefetching\/builders\/predicate","fragments":[{"kind":"keyword","text":"class"},{"kind":"text","text":" "},{"kind":"identifier","text":"Predicate"}],"abstract":[],"identifier":"doc:\/\/SafeFetching\/documentation\/SafeFetching\/Builders\/Predicate","role":"symbol","navigatorTitle":[{"kind":"identifier","text":"Predicate"}],"kind":"symbol"},"doc://SafeFetching/documentation/SafeFetching":{"url":"\/documentation\/safefetching","abstract":[{"type":"text","text":"Convenience functions around "},{"type":"codeVoice","code":"CoreData"},{"type":"text","text":" fetching."}],"title":"SafeFetching","identifier":"doc:\/\/SafeFetching\/documentation\/SafeFetching","kind":"symbol","type":"topic","role":"collection"},"doc://SafeFetching/documentation/SafeFetching/Fetchable":{"type":"topic","abstract":[{"text":"Implemented by a ","type":"text"},{"code":"NSManagedObject","type":"codeVoice"},{"text":" to offer fetching using SafeFetching API.","type":"text"}],"url":"\/documentation\/safefetching\/fetchable","identifier":"doc:\/\/SafeFetching\/documentation\/SafeFetching\/Fetchable","title":"Fetchable","fragments":[{"text":"protocol","kind":"keyword"},{"text":" ","kind":"text"},{"text":"Fetchable","kind":"identifier"}],"navigatorTitle":[{"text":"Fetchable","kind":"identifier"}],"kind":"symbol","role":"symbol"}}}
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"}}}

0 commit comments

Comments
 (0)