Handle multiple automation loop bindings
This commit is contained in:
parent
a77eeac221
commit
e11f4932d3
|
@ -120,7 +120,7 @@
|
||||||
allSteps[idx]?.stepId === ActionStepID.LOOP &&
|
allSteps[idx]?.stepId === ActionStepID.LOOP &&
|
||||||
allSteps.find(x => x.blockToLoop === block.id)
|
allSteps.find(x => x.blockToLoop === block.id)
|
||||||
|
|
||||||
// If the previous block was a loop block, decerement the index so the following
|
// If the previous block was a loop block, decrement the index so the following
|
||||||
// steps are in the correct order
|
// steps are in the correct order
|
||||||
if (wasLoopBlock) {
|
if (wasLoopBlock) {
|
||||||
loopBlockCount++
|
loopBlockCount++
|
||||||
|
|
|
@ -82,24 +82,34 @@ exports.getError = err => {
|
||||||
}
|
}
|
||||||
|
|
||||||
exports.substituteLoopStep = (hbsString, substitute) => {
|
exports.substituteLoopStep = (hbsString, substitute) => {
|
||||||
let blocks = []
|
|
||||||
let checkForJS = isJSBinding(hbsString)
|
let checkForJS = isJSBinding(hbsString)
|
||||||
|
let substitutedHbsString = ""
|
||||||
|
let open = checkForJS ? `$("` : "{{"
|
||||||
|
let closed = checkForJS ? `")` : "}}"
|
||||||
if (checkForJS) {
|
if (checkForJS) {
|
||||||
hbsString = decodeJSBinding(hbsString)
|
hbsString = decodeJSBinding(hbsString)
|
||||||
blocks.push(hbsString)
|
|
||||||
} else {
|
|
||||||
blocks = findHBSBlocks(hbsString)
|
|
||||||
}
|
}
|
||||||
for (let block of blocks) {
|
let pointer = 0,
|
||||||
block = block.replace(/loop/, substitute)
|
openPointer = 0,
|
||||||
|
closedPointer = 0
|
||||||
|
while (pointer < hbsString.length) {
|
||||||
|
openPointer = hbsString.indexOf(open, pointer)
|
||||||
|
closedPointer = hbsString.indexOf(closed, pointer) + 2
|
||||||
|
if (openPointer < 0 || closedPointer < 0) {
|
||||||
|
substitutedHbsString += hbsString.substring(pointer)
|
||||||
|
break
|
||||||
|
}
|
||||||
|
let before = hbsString.substring(pointer, openPointer)
|
||||||
|
let block = hbsString
|
||||||
|
.substring(openPointer, closedPointer)
|
||||||
|
.replace(/loop/, substitute)
|
||||||
|
substitutedHbsString += before + block
|
||||||
|
pointer = closedPointer
|
||||||
|
}
|
||||||
if (checkForJS) {
|
if (checkForJS) {
|
||||||
hbsString = encodeJSBinding(block)
|
substitutedHbsString = encodeJSBinding(substitutedHbsString)
|
||||||
} else {
|
|
||||||
hbsString = block
|
|
||||||
}
|
}
|
||||||
}
|
return substitutedHbsString
|
||||||
|
|
||||||
return hbsString
|
|
||||||
}
|
}
|
||||||
|
|
||||||
exports.stringSplit = value => {
|
exports.stringSplit = value => {
|
||||||
|
|
|
@ -0,0 +1,17 @@
|
||||||
|
const automationUtils = require("../automationUtils")
|
||||||
|
|
||||||
|
describe("automationUtils", () => {
|
||||||
|
test("substituteLoopStep should allow multiple loop binding substitutes", () => {
|
||||||
|
expect(automationUtils.substituteLoopStep(
|
||||||
|
`{{ loop.currentItem._id }} {{ loop.currentItem._id }} {{ loop.currentItem._id }}`,
|
||||||
|
"step.2"))
|
||||||
|
.toBe(`{{ step.2.currentItem._id }} {{ step.2.currentItem._id }} {{ step.2.currentItem._id }}`)
|
||||||
|
})
|
||||||
|
|
||||||
|
test("substituteLoopStep should handle not subsituting outside of curly braces", () => {
|
||||||
|
expect(automationUtils.substituteLoopStep(
|
||||||
|
`loop {{ loop.currentItem._id }}loop loop{{ loop.currentItem._id }}loop`,
|
||||||
|
"step.2"))
|
||||||
|
.toBe(`loop {{ step.2.currentItem._id }}loop loop{{ step.2.currentItem._id }}loop`)
|
||||||
|
})
|
||||||
|
})
|
Loading…
Reference in New Issue