OSDN Git Service

エンティティ名とクラス名を同じにしたことで生じた無駄を削除
[kcd/KCD.git] / KCD / TemporaryDataStore.swift
1 //
2 //  TemporaryDataStore.swift
3 //  D
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(
13         modelName: "Temporary",
14         storeFileName: ":memory:",
15         storeOptions: [:],
16         storeType: NSInMemoryStoreType,
17         deleteAndRetry: false
18     )
19 }
20 extension CoreDataCore {
21     static let temporary = CoreDataCore(.temporary)
22 }
23
24 class TemporaryDataStore: CoreDataAccessor, CoreDataManager {
25     static var `default` = TemporaryDataStore(type: .reader)
26     class func oneTimeEditor() -> TemporaryDataStore {
27         return TemporaryDataStore(type: .editor)
28     }
29     
30     required init(type: CoreDataManagerType) {
31         managedObjectContext =
32             type == .reader ? core.parentManagedObjectContext
33             : core.editorManagedObjectContext()
34     }
35     deinit {
36         saveActionCore()
37     }
38     
39     let core = CoreDataCore.temporary
40     var managedObjectContext: NSManagedObjectContext
41 }
42
43 extension TemporaryDataStore {
44     func battle() -> Battle? {
45         return battles().first
46     }
47     func battles() -> [Battle] {
48         guard let battles = try? self.objects(with: Battle.entity)
49             else { return [] }
50         return battles
51     }
52     func resetBattle() {
53         battles().forEach { delete($0) }
54     }
55     func createBattle() -> Battle? {
56         return insertNewObject(for: Battle.entity)
57     }
58     
59     func sortedDamagesById() -> [Damage] {
60         let sortDescriptor = NSSortDescriptor(key: "id", ascending: true)
61         guard let damages = try? objects(with: Damage.entity, sortDescriptors: [sortDescriptor])
62             else { return [] }
63         return damages
64     }
65     func damages() -> [Damage] {
66         guard let damages = try? objects(with: Damage.entity)
67             else { return [] }
68         return damages
69     }
70     func createDamage() -> Damage? {
71         return insertNewObject(for: Damage.entity)
72     }
73     
74     func guardEscaped() -> [GuardEscaped] {
75         guard let escapeds = try? objects(with: GuardEscaped.entity)
76             else { return [] }
77         return escapeds
78     }
79     func ensuredGuardEscaped(byShipId shipId: Int) -> GuardEscaped? {
80         let p = NSPredicate(format: "shipID = %ld AND ensured = TRUE", shipId)
81         guard let escapes = try? objects(with: GuardEscaped.entity, predicate: p)
82             else { return nil }
83         return escapes.first
84     }
85     func notEnsuredGuardEscaped() -> [GuardEscaped] {
86         let predicate = NSPredicate(format: "ensured = FALSE")
87         guard let escapeds = try? objects(with: GuardEscaped.entity, predicate: predicate)
88             else { return [] }
89         return escapeds
90     }
91     func createGuardEscaped() -> GuardEscaped? {
92         return insertNewObject(for: GuardEscaped.entity)
93     }
94 }