Return newly created entities
This commit is contained in:
parent
416b6dab36
commit
70a210b276
|
|
@ -76,11 +76,12 @@ extension Family where R: FamilyDecoding {
|
|||
/// - Parameters:
|
||||
/// - data: The data decoded by decoder. A unkeyed container of family members (keyed component containers) is expected.
|
||||
/// - decoder: The decoder to use for decoding family member data. Decoder respects the coding strategy set at `nexus.codingStrategy`.
|
||||
public func decodeMembers<Decoder>(from data: Decoder.Input, using decoder: inout Decoder) throws where Decoder: TopLevelDecoder {
|
||||
/// - Returns: returns the newly added entities.
|
||||
@discardableResult
|
||||
public func decodeMembers<Decoder>(from data: Decoder.Input, using decoder: inout Decoder) throws -> [Entity] where Decoder: TopLevelDecoder {
|
||||
decoder.userInfo[.nexusCodingStrategy] = nexus.codingStrategy
|
||||
let familyMembers = try decoder.decode(FamilyMemberContainer<R>.self, from: data)
|
||||
for components in familyMembers.components {
|
||||
createMember(with: components)
|
||||
}
|
||||
return familyMembers.components
|
||||
.map { createMember(with: $0) }
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -46,8 +46,8 @@ final class FamilyCodingTests: XCTestCase {
|
|||
let family = nexus.family(requires: MyComponent.self)
|
||||
XCTAssertTrue(family.isEmpty)
|
||||
var jsonDecoder = JSONDecoder()
|
||||
try family.decodeMembers(from: jsonData, using: &jsonDecoder)
|
||||
|
||||
let newEntities = try family.decodeMembers(from: jsonData, using: &jsonDecoder)
|
||||
XCTAssertEqual(newEntities.count, 2)
|
||||
XCTAssertEqual(family.count, 2)
|
||||
|
||||
}
|
||||
|
|
@ -96,7 +96,8 @@ final class FamilyCodingTests: XCTestCase {
|
|||
let family = nexus.family(requiresAll: YourComponent.self, MyComponent.self)
|
||||
XCTAssertTrue(family.isEmpty)
|
||||
var jsonDecoder = JSONDecoder()
|
||||
try family.decodeMembers(from: jsonData, using: &jsonDecoder)
|
||||
let newEntities = try family.decodeMembers(from: jsonData, using: &jsonDecoder)
|
||||
XCTAssertEqual(newEntities.count, 2)
|
||||
XCTAssertEqual(family.count, 2)
|
||||
}
|
||||
|
||||
|
|
@ -150,10 +151,13 @@ final class FamilyCodingTests: XCTestCase {
|
|||
let nexus = Nexus()
|
||||
|
||||
let family = nexus.family(requiresAll: YourComponent.self, MyComponent.self, Position.self)
|
||||
let family2 = nexus.family(requiresAll: YourComponent.self, MyComponent.self, excludesAll: Index.self)
|
||||
XCTAssertTrue(family.isEmpty)
|
||||
var jsonDecoder = JSONDecoder()
|
||||
try family.decodeMembers(from: jsonData, using: &jsonDecoder)
|
||||
let newEntities = try family.decodeMembers(from: jsonData, using: &jsonDecoder)
|
||||
XCTAssertEqual(newEntities.count, 2)
|
||||
XCTAssertEqual(family.count, 2)
|
||||
XCTAssertEqual(family2.count, 2)
|
||||
}
|
||||
|
||||
func testEncodeFamily4() throws {
|
||||
|
|
@ -218,7 +222,8 @@ final class FamilyCodingTests: XCTestCase {
|
|||
let family = nexus.family(requiresAll: YourComponent.self, MyComponent.self, Position.self, Color.self)
|
||||
XCTAssertTrue(family.isEmpty)
|
||||
var jsonDecoder = JSONDecoder()
|
||||
try family.decodeMembers(from: jsonData, using: &jsonDecoder)
|
||||
let newEntities = try family.decodeMembers(from: jsonData, using: &jsonDecoder)
|
||||
XCTAssertEqual(newEntities.count, 2)
|
||||
XCTAssertEqual(family.count, 2)
|
||||
}
|
||||
|
||||
|
|
@ -290,7 +295,8 @@ final class FamilyCodingTests: XCTestCase {
|
|||
let family = nexus.family(requiresAll: YourComponent.self, MyComponent.self, Position.self, Color.self, Party.self)
|
||||
XCTAssertTrue(family.isEmpty)
|
||||
var jsonDecoder = JSONDecoder()
|
||||
try family.decodeMembers(from: jsonData, using: &jsonDecoder)
|
||||
let newEntities = try family.decodeMembers(from: jsonData, using: &jsonDecoder)
|
||||
XCTAssertEqual(newEntities.count, 2)
|
||||
XCTAssertEqual(family.count, 2)
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue