Skip to content

Commit 75365ec

Browse files
committed
Retrofit val with scopes, as an example
1 parent 9055364 commit 75365ec

File tree

2 files changed

+39
-3
lines changed

2 files changed

+39
-3
lines changed

defaultMethods.js

+18-3
Original file line numberDiff line numberDiff line change
@@ -205,9 +205,24 @@ const defaultMethods = {
205205
},
206206
// Adding this to spec something out, not to merge it.
207207
val: {
208-
method: (args, context) => {
208+
method: (args, context, above) => {
209209
let result = context
210-
for (let i = 0; i < args.length; i++) {
210+
let start = 0
211+
if (Array.isArray(args[0]) && args[0].length === 1) {
212+
start++
213+
const climb = +Math.abs(args[0][0])
214+
let pos = 0
215+
for (let i = 0; i < climb; i++) {
216+
result = above[pos++]
217+
if (i === above.length - 1 && Array.isArray(result)) {
218+
above = result
219+
result = result[0]
220+
pos = 1
221+
}
222+
}
223+
}
224+
225+
for (let i = start; i < args.length; i++) {
211226
if (args[i] === null) continue
212227
if (result === null || result === undefined) return null
213228
result = result[args[i]]
@@ -553,7 +568,7 @@ function createArrayIterativeMethod (name, useTruthy = false) {
553568
}
554569

555570
const method = build(mapper, mapState)
556-
const aboveArray = method.aboveDetected ? buildState.compile`[{ item: null }, context, above]` : buildState.compile`null`
571+
const aboveArray = method.aboveDetected ? buildState.compile`[{ item: null, index: x }, context, above]` : buildState.compile`null`
557572

558573
if (async) {
559574
if (!isSyncDeep(mapper, buildState.engine, buildState)) {

suites/val.json

+21
Original file line numberDiff line numberDiff line change
@@ -47,5 +47,26 @@
4747
"rule": { "map": [[1,2,3], { "+": [{ "val": [null] }, 1] }] },
4848
"data": null,
4949
"result": [2,3,4]
50+
},
51+
"Testing out scopes",
52+
{
53+
"description": "Climb up to get adder",
54+
"rule": { "map": [[1,2,3], { "+": [{ "val": null }, { "val": [[-2], "adder"] }] }] },
55+
"data": { "adder": 10 },
56+
"result": [11,12,13]
57+
},
58+
{
59+
"description": "Climb up to get index",
60+
"rule": { "map": [[1,2,3], { "+": [{ "val": null }, { "val": [[-1], "index"] }] }] },
61+
"data": { "adder": 10 },
62+
"result": [1,3,5]
63+
},
64+
{
65+
"description": "Nested get adder",
66+
"rule": {
67+
"map": [["Test"], { "map": [[1,2,3], { "+": [{"val": null}, {"val": [[-4], "adder"]}] }]} ]
68+
},
69+
"data": { "adder": 10 },
70+
"result": [[11,12,13]]
5071
}
5172
]

0 commit comments

Comments
 (0)