2022-08-16 16:53:47 -04:00
|
|
|
//
|
|
|
|
// DaoExtensions.swift
|
|
|
|
// App
|
|
|
|
//
|
|
|
|
// Created by Ron Heft on 8/16/22.
|
|
|
|
//
|
|
|
|
|
|
|
|
import Foundation
|
|
|
|
import RealmSwift
|
|
|
|
|
|
|
|
extension Object {
|
2022-08-25 15:42:37 -04:00
|
|
|
func save() throws {
|
|
|
|
let realm = try Realm()
|
|
|
|
try realm.write {
|
2022-08-16 16:53:47 -04:00
|
|
|
realm.add(self, update: .modified)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-08-25 15:42:37 -04:00
|
|
|
func update(handler: () -> Void) throws {
|
|
|
|
try self.realm?.write {
|
2022-08-16 16:53:47 -04:00
|
|
|
handler()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
extension EmbeddedObject {
|
|
|
|
// Required to disassociate from Realm when copying into local objects
|
|
|
|
static func detachCopy<T:Codable>(of object: T?) -> T? {
|
|
|
|
guard let object = object else { return nil }
|
|
|
|
let json = try! JSONEncoder().encode(object)
|
|
|
|
return try! JSONDecoder().decode(T.self, from: json)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
protocol Deletable {
|
2022-08-25 15:42:37 -04:00
|
|
|
func delete() throws
|
2022-08-16 16:53:47 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
extension Deletable where Self: Object {
|
2022-08-25 15:42:37 -04:00
|
|
|
func delete() throws {
|
|
|
|
try self.realm?.write {
|
2022-08-16 16:53:47 -04:00
|
|
|
self.realm?.delete(self)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|