OSDN Git Service

CoreDataAccessorのインターフェイスを変更
[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 CoreDataConfiguration {
12     
13     static let temporary = CoreDataConfiguration("Temporary",
14                                                  fileName: ":memory:",
15                                                  options: [:],
16                                                  type: NSInMemoryStoreType
17     )
18 }
19
20 final class TemporaryDataStore: CoreDataAccessor, CoreDataManager {
21     
22     static let core = CoreDataCore(.temporary)
23     
24     static let `default` = TemporaryDataStore(type: .reader)
25     
26     class func oneTimeEditor() -> TemporaryDataStore {
27         
28         return TemporaryDataStore(type: .editor)
29     }
30     
31     required init(type: CoreDataManagerType) {
32         
33         context = TemporaryDataStore.context(for: type)
34     }
35     
36     deinit {
37         
38         save()
39     }
40     
41     let context: NSManagedObjectContext
42 }
43
44 extension TemporaryDataStore {
45     
46     func battle() -> Battle? {
47         
48         return battles().first
49     }
50     
51     func battles() -> [Battle] {
52         
53         guard let battles = try? self.objects(of: Battle.entity)
54             else { return [] }
55         
56         return battles
57     }
58     
59     func resetBattle() {
60         
61         battles().forEach { delete($0) }
62     }
63     
64     func createBattle() -> Battle? {
65         
66         return insertNewObject(for: Battle.entity)
67     }
68     
69     func sortedDamagesById() -> [Damage] {
70         
71         let sortDescriptor = NSSortDescriptor(key: "id", ascending: true)
72         
73         guard let damages = try? objects(of: Damage.entity, sortDescriptors: [sortDescriptor])
74             else { return [] }
75         
76         return damages
77     }
78     
79     func damages() -> [Damage] {
80         
81         guard let damages = try? objects(of: Damage.entity)
82             else { return [] }
83         
84         return damages
85     }
86     
87     func createDamage() -> Damage? {
88         
89         return insertNewObject(for: Damage.entity)
90     }
91     
92     func guardEscaped() -> [GuardEscaped] {
93         
94         guard let escapeds = try? objects(of: GuardEscaped.entity)
95             else { return [] }
96         
97         return escapeds
98     }
99     
100     func ensuredGuardEscaped(byShipId shipId: Int) -> GuardEscaped? {
101         
102         let p = NSPredicate(format: "shipID = %ld AND ensured = TRUE", shipId)
103         
104         guard let escapes = try? objects(of: GuardEscaped.entity, predicate: p)
105             else { return nil }
106         
107         return escapes.first
108     }
109     
110     func notEnsuredGuardEscaped() -> [GuardEscaped] {
111         
112         let predicate = NSPredicate(format: "ensured = FALSE")
113         
114         guard let escapeds = try? objects(of: GuardEscaped.entity, predicate: predicate)
115             else { return [] }
116         
117         return escapeds
118     }
119     
120     func createGuardEscaped() -> GuardEscaped? {
121         
122         return insertNewObject(for: GuardEscaped.entity)
123     }
124 }