OSDN Git Service

guard の書き方を統一した
[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) else { return [] }
54         
55         return battles
56     }
57     
58     func resetBattle() {
59         
60         battles().forEach { delete($0) }
61     }
62     
63     func createBattle() -> Battle? {
64         
65         return insertNewObject(for: Battle.entity)
66     }
67     
68     func sortedDamagesById() -> [Damage] {
69         
70         let sortDescriptor = NSSortDescriptor(key: "id", ascending: true)
71         
72         guard let damages = try? objects(of: Damage.entity, sortDescriptors: [sortDescriptor]) else { return [] }
73         
74         return damages
75     }
76     
77     func damages() -> [Damage] {
78         
79         guard let damages = try? objects(of: Damage.entity) else { return [] }
80         
81         return damages
82     }
83     
84     func createDamage() -> Damage? {
85         
86         return insertNewObject(for: Damage.entity)
87     }
88     
89     func guardEscaped() -> [GuardEscaped] {
90         
91         guard let escapeds = try? objects(of: GuardEscaped.entity) else { return [] }
92         
93         return escapeds
94     }
95     
96     func ensuredGuardEscaped(byShipId shipId: Int) -> GuardEscaped? {
97         
98         let p = NSPredicate(format: "shipID = %ld AND ensured = TRUE", shipId)
99         
100         guard let escapes = try? objects(of: GuardEscaped.entity, predicate: p) else { return nil }
101         
102         return escapes.first
103     }
104     
105     func notEnsuredGuardEscaped() -> [GuardEscaped] {
106         
107         let predicate = NSPredicate(format: "ensured = FALSE")
108         
109         guard let escapeds = try? objects(of: GuardEscaped.entity, predicate: predicate) else { return [] }
110         
111         return escapeds
112     }
113     
114     func createGuardEscaped() -> GuardEscaped? {
115         
116         return insertNewObject(for: GuardEscaped.entity)
117     }
118 }