OSDN Git Service

CoreDataIntormationのプロパティ名を簡略化
[kcd/KCD.git] / KCD / TemporaryDataStore.swift
1 //
2 //  TemporaryDataStore.swift
3 //  KCD
4 //
5 //  Created by Hori,Masaki on 2017/01/06.
6 //  Copyright © 2017年 Hori,Masaki. All rights reserved.
7 //
8
9 import Cocoa
10
11 extension CoreDataIntormation {
12     static let temporary = CoreDataIntormation("Temporary",
13                                                fileName: ":memory:",
14                                                options: [:],
15                                                type: NSInMemoryStoreType
16     )
17 }
18 extension CoreDataCore {
19     static let temporary = CoreDataCore(.temporary)
20 }
21
22 class TemporaryDataStore: CoreDataAccessor, CoreDataManager {
23     static var `default` = TemporaryDataStore(type: .reader)
24     class func oneTimeEditor() -> TemporaryDataStore {
25         return TemporaryDataStore(type: .editor)
26     }
27     
28     required init(type: CoreDataManagerType) {
29         managedObjectContext =
30             type == .reader ? core.parentManagedObjectContext
31             : core.editorManagedObjectContext()
32     }
33     deinit {
34         saveActionCore()
35     }
36     
37     let core = CoreDataCore.temporary
38     let managedObjectContext: NSManagedObjectContext
39 }
40
41 extension TemporaryDataStore {
42     func battle() -> Battle? {
43         return battles().first
44     }
45     func battles() -> [Battle] {
46         guard let battles = try? self.objects(with: Battle.entity)
47             else { return [] }
48         return battles
49     }
50     func resetBattle() {
51         battles().forEach { delete($0) }
52     }
53     func createBattle() -> Battle? {
54         return insertNewObject(for: Battle.entity)
55     }
56     
57     func sortedDamagesById() -> [Damage] {
58         let sortDescriptor = NSSortDescriptor(key: "id", ascending: true)
59         guard let damages = try? objects(with: Damage.entity, sortDescriptors: [sortDescriptor])
60             else { return [] }
61         return damages
62     }
63     func damages() -> [Damage] {
64         guard let damages = try? objects(with: Damage.entity)
65             else { return [] }
66         return damages
67     }
68     func createDamage() -> Damage? {
69         return insertNewObject(for: Damage.entity)
70     }
71     
72     func guardEscaped() -> [GuardEscaped] {
73         guard let escapeds = try? objects(with: GuardEscaped.entity)
74             else { return [] }
75         return escapeds
76     }
77     func ensuredGuardEscaped(byShipId shipId: Int) -> GuardEscaped? {
78         let p = NSPredicate(format: "shipID = %ld AND ensured = TRUE", shipId)
79         guard let escapes = try? objects(with: GuardEscaped.entity, predicate: p)
80             else { return nil }
81         return escapes.first
82     }
83     func notEnsuredGuardEscaped() -> [GuardEscaped] {
84         let predicate = NSPredicate(format: "ensured = FALSE")
85         guard let escapeds = try? objects(with: GuardEscaped.entity, predicate: predicate)
86             else { return [] }
87         return escapeds
88     }
89     func createGuardEscaped() -> GuardEscaped? {
90         return insertNewObject(for: GuardEscaped.entity)
91     }
92 }