Skip to content

Commit 9c7ae39

Browse files
feat: Adds addRow from dict
1 parent e7bc821 commit 9c7ae39

File tree

2 files changed

+23
-8
lines changed

2 files changed

+23
-8
lines changed

Sources/Haystack/Utils/GridBuilder.swift

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,21 @@ public class GridBuilder {
119119
return self
120120
}
121121

122+
@discardableResult
123+
/// Append a new row to the grid. Newly seen columns are added automatically with no metadata, although column ordering is not guaranteed.
124+
/// - Parameter vals: The values of the row, in the same order as the columns.
125+
/// - Returns: This instance for chaining
126+
public func addRow(_ row: [String: any Val]) throws -> Self {
127+
for (colName, _) in row {
128+
if !colNames.contains(colName) {
129+
try self.addCol(name: colName)
130+
}
131+
}
132+
rows.append(row)
133+
134+
return self
135+
}
136+
122137
@discardableResult
123138
/// Append a new row to the grid.
124139
/// - Parameter vals: The values of the row, in the same order as the columns.

Tests/HaystackTests/GridTests.swift

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ final class GridTests: XCTestCase {
99
.addCol(name: "equip")
1010
.addCol(name: "siteRef")
1111
.addCol(name: "installed")
12-
.addRow(["RTU-1", marker, Ref("153c-699a", dis: "HQ"), Date(year: 2005, month: 6, day: 1)])
13-
.addRow(["RTU-2", marker, Ref("153c-699b", dis: "Library"), Date(year: 1997, month: 7, day: 12)])
12+
.addRow(["dis": "RTU-1", "equip": marker, "siteRef": Ref("153c-699a", dis: "HQ"), "installed": Date(year: 2005, month: 6, day: 1)])
13+
.addRow(["dis": "RTU-2", "equip": marker, "siteRef": Ref("153c-699b", dis: "Library"), "installed": Date(year: 1997, month: 7, day: 12)])
1414
.toGrid()
1515
let jsonString = #"{"_kind":"grid","meta":{"ver":"3.0","foo":"bar"},"cols":[{"name":"dis","meta":{"dis":"Equip Name"}},{"name":"equip"},{"name":"siteRef"},{"name":"installed"}],"rows":[{"dis":"RTU-1","equip":{"_kind":"marker"},"siteRef":{"_kind":"ref","val":"153c-699a","dis":"HQ"},"installed":{"_kind":"date","val":"2005-06-01"}},{"dis": "RTU-2","equip":{"_kind":"marker"},"siteRef":{"_kind":"ref","val":"153c-699b","dis":"Library"},"installed":{"_kind":"date","val":"1997-07-12"}}]}"#
1616

@@ -54,8 +54,8 @@ final class GridTests: XCTestCase {
5454
.addCol(name: "equip")
5555
.addCol(name: "siteRef")
5656
.addCol(name: "installed")
57-
.addRow(["RTU-1", marker, Ref("153c-699a", dis: "HQ"), Date(year: 2005, month: 6, day: 1)])
58-
.addRow(["RTU-2", marker, Ref("153c-699b", dis: "Library"), Date(year: 1997, month: 7, day: 12)])
57+
.addRow(["dis": "RTU-1", "equip": marker, "siteRef": Ref("153c-699a", dis: "HQ"), "installed": Date(year: 2005, month: 6, day: 1)])
58+
.addRow(["dis": "RTU-2", "equip": marker, "siteRef": Ref("153c-699b", dis: "Library"), "installed": Date(year: 1997, month: 7, day: 12)])
5959
.toGrid()
6060
.toZinc(),
6161
"""
@@ -86,17 +86,17 @@ final class GridTests: XCTestCase {
8686
.addCol(name: "equip")
8787
.addCol(name: "siteRef")
8888
.addCol(name: "managed")
89-
.addRow(["RTU-1", marker, Ref("153c-699a", dis: "HQ"), true])
90-
.addRow(["RTU-2", marker, Ref("153c-699b", dis: "Library"), false])
89+
.addRow(["dis": "RTU-1", "equip": marker, "siteRef": Ref("153c-699a", dis: "HQ"), "managed": true])
90+
.addRow(["dis": "RTU-2", "equip": marker, "siteRef": Ref("153c-699b", dis: "Library"), "managed": false])
9191

9292
let builder2 = try GridBuilder()
9393
.setMeta(["ver": "3.0", "foo": "bar"])
9494
.addCol(name: "dis", meta: ["dis": "Equip Name"])
9595
.addCol(name: "equip")
9696
.addCol(name: "siteRef")
9797
.addCol(name: "managed")
98-
.addRow(["RTU-1", marker, Ref("153c-699a", dis: "HQ"), false])
99-
.addRow(["RTU-2", marker, Ref("153c-699b", dis: "Library"), false])
98+
.addRow(["dis": "RTU-1", "equip": marker, "siteRef": Ref("153c-699a", dis: "HQ"), "managed": false])
99+
.addRow(["dis": "RTU-2", "equip": marker, "siteRef": Ref("153c-699b", dis: "Library"), "managed": false])
100100

101101

102102
// Test basic

0 commit comments

Comments
 (0)