Skip to content

Commit

Permalink
Add CoreDataManagedObject.store
Browse files Browse the repository at this point in the history
  • Loading branch information
colemancda committed Aug 17, 2023
1 parent 42487ee commit 563b2a1
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 16 deletions.
14 changes: 9 additions & 5 deletions Sources/CoreDataModel/NSManagedObject.swift
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,14 @@ public final class CoreDataManagedObject: CoreModel.ManagedObject {

internal let managedObject: NSManagedObject

internal init(_ managedObject: NSManagedObject) {
internal unowned let store: CoreDataStore

internal init(_ managedObject: NSManagedObject, store: CoreDataStore) {
self.managedObject = managedObject
self.store = store
}

public var store: NSManagedObjectContext? {
internal var context: NSManagedObjectContext? {
return managedObject.managedObjectContext
}

Expand All @@ -40,11 +43,11 @@ public final class CoreDataManagedObject: CoreModel.ManagedObject {
else { return .null }

if let managedObject = objectValue as? NSManagedObject {
return .toOne(CoreDataManagedObject(managedObject))
return .toOne(CoreDataManagedObject(managedObject, store: store))
} else if let orderedSet = objectValue as? NSOrderedSet {
return .toMany(orderedSet.map { CoreDataManagedObject($0 as! NSManagedObject) })
return .toMany(orderedSet.map { CoreDataManagedObject($0 as! NSManagedObject, store: store) })
} else if let managedObjects = objectValue as? Set<NSManagedObject> {
return .toMany(managedObjects.map { CoreDataManagedObject($0) })
return .toMany(managedObjects.map { CoreDataManagedObject($0, store: store) })
} else {
fatalError("Invalid CoreData relationship value \(objectValue)")
}
Expand All @@ -60,6 +63,7 @@ public final class CoreDataManagedObject: CoreModel.ManagedObject {
case let .toOne(value):
objectValue = value.managedObject
case let .toMany(value):
// TODO: Check if ordered
objectValue = Set(value.map({ $0.managedObject })) as NSSet
}

Expand Down
14 changes: 7 additions & 7 deletions Sources/CoreDataModel/NSManagedObjectContext.swift
Original file line number Diff line number Diff line change
Expand Up @@ -22,18 +22,18 @@ public final class CoreDataStore: StoreProtocol {

/// Fetch managed objects.
public func fetch(_ fetchRequest: FetchRequest) throws -> [CoreDataManagedObject] {
return try context.fetch(fetchRequest).map { CoreDataManagedObject($0) }
return try context.fetch(fetchRequest).map { CoreDataManagedObject($0, store: self) }
}

/// Fetch and return result count.
public func count(for fetchRequest: FetchRequest) throws -> Int {
public func count(for fetchRequest: FetchRequest) throws -> UInt {
return try context.count(for: fetchRequest)
}

/// Create new managed object.
public func create(_ entity: String) throws -> CoreDataManagedObject {
let managedObject = try context.create(entity)
return CoreDataManagedObject(managedObject)
public func create(_ entity: EntityName) throws -> CoreDataManagedObject {
let managedObject = try context.create(entity.rawValue)
return CoreDataManagedObject(managedObject, store: self)
}

/// Delete the specified managed object.
Expand All @@ -53,8 +53,8 @@ internal extension NSManagedObjectContext {
return try self.fetch(fetchRequest.toFoundation())
}

func count(for fetchRequest: FetchRequest) throws -> Int {
return try self.count(for: fetchRequest.toFoundation())
func count(for fetchRequest: FetchRequest) throws -> UInt {
return UInt(try self.count(for: fetchRequest.toFoundation()))
}

func create(_ entityName: String) throws -> NSManagedObject {
Expand Down
8 changes: 4 additions & 4 deletions Sources/CoreModel/Store.swift
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,10 @@ public protocol StoreProtocol: AnyObject {
func fetch(_ fetchRequest: FetchRequest) throws -> [ManagedObject]

/// Fetch and return result count.
func count(_ fetchRequest: FetchRequest) throws -> Int
func count(_ fetchRequest: FetchRequest) throws -> UInt

/// Create new managed object.
func create(_ entity: String) throws -> ManagedObject
func create(_ entity: EntityName) throws -> ManagedObject

/// Delete the specified managed object.
func delete(_ managedObject: ManagedObject)
Expand All @@ -29,8 +29,8 @@ public protocol StoreProtocol: AnyObject {

public extension StoreProtocol {

func count(_ fetchRequest: FetchRequest) throws -> Int {
return try fetch(fetchRequest).count
func count(_ fetchRequest: FetchRequest) throws -> UInt {
return try UInt(fetch(fetchRequest).count)
}
}

Expand Down

0 comments on commit 563b2a1

Please sign in to comment.