Return newly created entities

This commit is contained in:
Christian Treffs 2020-07-23 22:04:17 +02:00
parent 416b6dab36
commit 70a210b276
No known key found for this signature in database
GPG Key ID: 49A4B4B460BE3ED4
2 changed files with 17 additions and 10 deletions

View File

@ -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) }
}
}

View File

@ -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)
}