import SwiftyJSON
import Doutaku
-struct MappingConfiguration<T: NSManagedObject> {
+struct MappingConfiguration<T: Entity> {
- let entity: Entity<T>
+ let entity: T.Type
let dataKeys: [String]
let primaryKeys: [String]
let editorStore: CoreDataAccessor
- let ignoreKeys: [String]
+ let ignoreKeys: Set<String>
- init(entity: Entity<T>,
+ init(entity: T.Type,
dataKeys: [String] = ["api_data"],
primaryKeys: [String] = ["id"],
editorStore: CoreDataAccessor,
- ignoreKeys: [String] = []) {
+ ignoreKeys: Set<String> = []) {
self.entity = entity
self.dataKeys = dataKeys
protocol JSONMapper {
- associatedtype ObjectType: NSManagedObject
+ associatedtype ObjectType: Entity
init(_ apiResponse: APIResponse)
// delete api_ prefix.
func keyByDeletingPrefix() -> String {
- if self.count < 5 { return self }
+ if self.count < 5 {
+
+ return self
+ }
return String(self[index(startIndex, offsetBy: 4)...])
}
private func isEqual(_ lhs: AnyObject?, _ rhs: AnyObject?) -> Bool {
- if lhs == nil, rhs == nil { return true }
- if let lhs = lhs, let rhs = rhs { return lhs.isEqual(rhs) }
+ if lhs == nil, rhs == nil {
+
+ return true
+ }
+ if let lhs = lhs, let rhs = rhs {
+
+ return lhs.isEqual(rhs)
+ }
return false
}
beginRegister(object)
element.forEach { (key, value) in
- if configuration.ignoreKeys.contains(key) { return }
- if handleExtraValue(value, forKey: key, to: object) { return }
+ if configuration.ignoreKeys.contains(key) {
+
+ return
+ }
+ if handleExtraValue(value, forKey: key, to: object) {
+
+ return
+ }
switch value.type {
case .array:
let newKey = "\(key)_D_\(subKey.keyByDeletingPrefix())"
setValueIfNeeded(subValue, to: object, forKey: newKey)
}
- default:
+ default:
setValueIfNeeded(value, to: object, forKey: key)
+
}
}
}
// TODO: replace to forEach
for piar in keyPiar {
- guard let v1 = $0.value(forKey: piar.key) else { return .orderedAscending }
+ guard let v1 = $0.value(forKey: piar.key) else {
+
+ return .orderedAscending
+ }
- if element[piar.apiKey].type == .null { return .orderedDescending }
+ if element[piar.apiKey].type == .null {
+
+ return .orderedDescending
+ }
let v2 = element[piar.apiKey].object
}
}
- private func sortedObjects<T>(_ entity: Entity<T>) -> [T] {
+ private func sortedObjects<ResultType: Entity>(_ entity: ResultType.Type) -> [ResultType] {
let store = configuration.editorStore
guard let objects = try? store.objects(of: configuration.entity) else {
Logger.shared.log("Can not get entity named \(configuration.entity)")
+
return []
}
- return (objects as NSArray).sortedArray(using: sortDescriptors) as? [T] ?? []
+ return (objects as NSArray).sortedArray(using: sortDescriptors) as? [ResultType] ?? []
}
private func commintInContext() {
configuration.editorStore
.sync {
+
self.commintInContext()
}
}