mirror of
https://github.com/JohnEstropia/CoreStore.git
synced 2026-03-31 14:43:09 +02:00
add Field.Coded dynamic lookups for ObjectPublisher and ObjectSnapshot
This commit is contained in:
@@ -362,6 +362,7 @@ class DynamicModelTests: BaseTestDataTestCase {
|
|||||||
XCTAssertEqual(person.name, personSnapshot1.$name)
|
XCTAssertEqual(person.name, personSnapshot1.$name)
|
||||||
XCTAssertEqual(person.title, personSnapshot1.$title)
|
XCTAssertEqual(person.title, personSnapshot1.$title)
|
||||||
XCTAssertEqual(person.displayName, personSnapshot1.$displayName)
|
XCTAssertEqual(person.displayName, personSnapshot1.$displayName)
|
||||||
|
XCTAssertEqual(person.job, personSnapshot1.$job)
|
||||||
|
|
||||||
person.title = "Sir"
|
person.title = "Sir"
|
||||||
XCTAssertEqual(person.displayName, "Sir John")
|
XCTAssertEqual(person.displayName, "Sir John")
|
||||||
@@ -380,15 +381,19 @@ class DynamicModelTests: BaseTestDataTestCase {
|
|||||||
XCTAssertEqual(person.name, personSnapshot2.$name)
|
XCTAssertEqual(person.name, personSnapshot2.$name)
|
||||||
XCTAssertEqual(person.title, personSnapshot2.$title)
|
XCTAssertEqual(person.title, personSnapshot2.$title)
|
||||||
XCTAssertEqual(person.displayName, personSnapshot2.$displayName)
|
XCTAssertEqual(person.displayName, personSnapshot2.$displayName)
|
||||||
|
XCTAssertEqual(person.job, personSnapshot2.$job)
|
||||||
|
|
||||||
var personSnapshot3 = personSnapshot2
|
var personSnapshot3 = personSnapshot2
|
||||||
personSnapshot3.$name = "James"
|
personSnapshot3.$name = "James"
|
||||||
XCTAssertEqual(personSnapshot1.$name, "John")
|
XCTAssertEqual(personSnapshot1.$name, "John")
|
||||||
XCTAssertEqual(personSnapshot1.$displayName, "Mr. John")
|
XCTAssertEqual(personSnapshot1.$displayName, "Mr. John")
|
||||||
|
XCTAssertEqual(personSnapshot1.$job, .unemployed)
|
||||||
XCTAssertEqual(personSnapshot2.$name, "John")
|
XCTAssertEqual(personSnapshot2.$name, "John")
|
||||||
XCTAssertEqual(personSnapshot2.$displayName, "Sir John")
|
XCTAssertEqual(personSnapshot2.$displayName, "Sir John")
|
||||||
|
XCTAssertEqual(personSnapshot2.$job, .engineer)
|
||||||
XCTAssertEqual(personSnapshot3.$name, "James")
|
XCTAssertEqual(personSnapshot3.$name, "James")
|
||||||
XCTAssertEqual(personSnapshot3.$displayName, "Sir John")
|
XCTAssertEqual(personSnapshot3.$displayName, "Sir John")
|
||||||
|
XCTAssertEqual(personSnapshot3.$job, .engineer)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -400,7 +405,15 @@ class DynamicModelTests: BaseTestDataTestCase {
|
|||||||
XCTAssertEqual(dog.master?.pets.first, dog)
|
XCTAssertEqual(dog.master?.pets.first, dog)
|
||||||
},
|
},
|
||||||
success: { _ in
|
success: { _ in
|
||||||
|
|
||||||
|
let person = try! stack.fetchOne(From<Person>())
|
||||||
|
XCTAssertNotNil(person)
|
||||||
|
|
||||||
|
let personPublisher = person!.asPublisher(in: stack)
|
||||||
|
XCTAssertEqual(personPublisher.$name, "John")
|
||||||
|
XCTAssertEqual(personPublisher.$displayName, "Sir John")
|
||||||
|
XCTAssertEqual(personPublisher.$job, .engineer)
|
||||||
|
|
||||||
updateDone.fulfill()
|
updateDone.fulfill()
|
||||||
},
|
},
|
||||||
failure: { _ in
|
failure: { _ in
|
||||||
|
|||||||
@@ -397,6 +397,21 @@ extension ObjectPublisher where O: CoreStoreObject {
|
|||||||
return FieldContainer<OBase>.Virtual<V>.read(field: object[keyPath: member], for: rawObject) as! V?
|
return FieldContainer<OBase>.Virtual<V>.read(field: object[keyPath: member], for: rawObject) as! V?
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Returns the value for the property identified by a given key.
|
||||||
|
*/
|
||||||
|
public subscript<OBase, V>(dynamicMember member: KeyPath<O, FieldContainer<OBase>.Coded<V>>) -> V? {
|
||||||
|
|
||||||
|
guard
|
||||||
|
let object = self.object,
|
||||||
|
let rawObject = object.rawObject
|
||||||
|
else {
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return FieldContainer<OBase>.Coded<V>.read(field: object[keyPath: member], for: rawObject) as! V?
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Returns the value for the property identified by a given key.
|
Returns the value for the property identified by a given key.
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -209,6 +209,23 @@ extension ObjectSnapshot where O: CoreStoreObject {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Returns the value for the property identified by a given key.
|
||||||
|
*/
|
||||||
|
public subscript<OBase, V>(dynamicMember member: KeyPath<O, FieldContainer<OBase>.Coded<V>>) -> V {
|
||||||
|
|
||||||
|
get {
|
||||||
|
|
||||||
|
let key = String(keyPath: member)
|
||||||
|
return self.values[key] as! V
|
||||||
|
}
|
||||||
|
set {
|
||||||
|
|
||||||
|
let key = String(keyPath: member)
|
||||||
|
self.values[key] = newValue
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Returns the value for the property identified by a given key.
|
Returns the value for the property identified by a given key.
|
||||||
*/
|
*/
|
||||||
|
|||||||
Reference in New Issue
Block a user