Examples:
Multival, without keeping nil or empty
xform = Explode::FieldValuesToNewRows.new(
fields: %i[child parent],
target: :val,
delim: ";"
)
input = [
{id: 1, child: "a;b", parent: "c;d"},
{id: 2, child: "a", parent: "b"},
{id: 3, child: "", parent: "q"},
{id: 4, child: "n", parent: nil},
{id: 5, child: "", parent: nil},
{id: 6, child: "p;", parent: ";z"},
{id: 7, child: "m;;n", parent: "s"}
]
result = Kiba::StreamingRunner.transform_stream(input, xform)
.map{ |row| row }
expected = [
{id: 1, val: "a"},
{id: 1, val: "b"},
{id: 1, val: "c"},
{id: 1, val: "d"},
{id: 2, val: "a"},
{id: 2, val: "b"},
{id: 3, val: "q"},
{id: 4, val: "n"},
{id: 6, val: "p"},
{id: 6, val: "z"},
{id: 7, val: "m"},
{id: 7, val: "n"},
{id: 7, val: "s"}
]
expect(result).to eq(expected)
xform = Explode::FieldValuesToNewRows.new(
fields: %i[child parent],
target: :val,
delim: ";",
keep_nil: true
)
input = [
{id: 1, child: "a;b", parent: "c;d"},
{id: 2, child: "a", parent: "b"},
{id: 3, child: "", parent: "q"},
{id: 4, child: "n", parent: nil},
{id: 5, child: "", parent: nil},
{id: 6, child: "p;", parent: ";z"},
{id: 7, child: "m;;n", parent: "s"}
]
result = Kiba::StreamingRunner.transform_stream(input, xform)
.map{ |row| row }
expected = [
{id: 1, val: "a"},
{id: 1, val: "b"},
{id: 1, val: "c"},
{id: 1, val: "d"},
{id: 2, val: "a"},
{id: 2, val: "b"},
{id: 3, val: "q"},
{id: 4, val: "n"},
{id: 4, val: nil},
{id: 5, val: nil},
{id: 6, val: "p"},
{id: 6, val: "z"},
{id: 7, val: "m"},
{id: 7, val: "n"},
{id: 7, val: "s"}
]
expect(result).to eq(expected)
Multival (via delim param only), keeping empty
xform = Explode::FieldValuesToNewRows.new(
fields: %i[child parent],
target: :val,
delim: ";",
keep_empty: true
)
input = [
{id: 1, child: "a;b", parent: "c;d"},
{id: 2, child: "a", parent: "b"},
{id: 3, child: "", parent: "q"},
{id: 4, child: "n", parent: nil},
{id: 5, child: "", parent: nil},
{id: 6, child: "p;", parent: ";z"},
{id: 7, child: "m;;n", parent: "s"}
]
result = Kiba::StreamingRunner.transform_stream(input, xform)
.map{ |row| row }
expected = [
{id: 1, val: "a"},
{id: 1, val: "b"},
{id: 1, val: "c"},
{id: 1, val: "d"},
{id: 2, val: "a"},
{id: 2, val: "b"},
{id: 3, val: ""},
{id: 3, val: "q"},
{id: 4, val: "n"},
{id: 5, val: ""},
{id: 6, val: "p"},
{id: 6, val: ""},
{id: 6, val: ""},
{id: 6, val: "z"},
{id: 7, val: "m"},
{id: 7, val: ""},
{id: 7, val: "n"},
{id: 7, val: "s"}
]
expect(result).to eq(expected)
Single val, without keeping nil or empty
xform = Explode::FieldValuesToNewRows.new(
fields: %i[child parent],
target: :val,
)
input = [
{id: 1, child: "a;b", parent: "c;d"},
{id: 2, child: "a", parent: "b"},
{id: 3, child: "", parent: "q"},
{id: 4, child: "n", parent: nil},
{id: 5, child: "", parent: nil},
{id: 6, child: "p;", parent: ";z"},
{id: 7, child: "m;;n", parent: "s"}
]
result = Kiba::StreamingRunner.transform_stream(input, xform)
.map{ |row| row }
expected = [
{id: 1, val: "a;b"},
{id: 1, val: "c;d"},
{id: 2, val: "a"},
{id: 2, val: "b"},
{id: 3, val: "q"},
{id: 4, val: "n"},
{id: 6, val: "p;"},
{id: 6, val: ";z"},
{id: 7, val: "m;;n"},
{id: 7, val: "s"}
]
expect(result).to eq(expected)
Single val, keeping nil and empty
xform = Explode::FieldValuesToNewRows.new(
fields: %i[child parent],
target: :val,
keep_nil: true,
keep_empty: true
)
input = [
{id: 1, child: "a;b", parent: "c;d"},
{id: 2, child: "a", parent: "b"},
{id: 3, child: "", parent: "q"},
{id: 4, child: "n", parent: nil},
{id: 5, child: "", parent: nil},
{id: 6, child: "p;", parent: ";z"},
{id: 7, child: "m;;n", parent: "s"}
]
result = Kiba::StreamingRunner.transform_stream(input, xform)
.map{ |row| row }
expected = [
{id: 1, val: "a;b"},
{id: 1, val: "c;d"},
{id: 2, val: "a"},
{id: 2, val: "b"},
{id: 3, val: ""},
{id: 3, val: "q"},
{id: 4, val: "n"},
{id: 4, val: nil},
{id: 5, val: ""},
{id: 5, val: nil},
{id: 6, val: "p;"},
{id: 6, val: ";z"},
{id: 7, val: "m;;n"},
{id: 7, val: "s"}
]
expect(result).to eq(expected)