Selection functions
var
Commentary
added in 0.0.5
Look up a variable defined in the top-level vars
or varsOnce
sections, optionally drilling into its subvalue with path
. Vars may refer to other variables.
If you make multiple references to the same var in a single generator, you are guaranteed to get the same value each time.
Values in varsOnce
are only ever evaluated once, and then locked for the duration of the generator, as the name implies.
You can use vars
to generate multiple values in one shot, then drill into them with the path
function modifier. 1
Examples
Retrieve a variable
Use vars
to generate a fresh value for each iteration. Use varsOnce
to generate values only once and then lock them.
{
"topic": "sandbox",
"vars": {
"val1": {
"_gen": "uniformDistribution",
"bounds": [
1,
5
]
}
},
"varsOnce": {
"val2": {
"_gen": "uniformDistribution",
"bounds": [
1,
5
]
}
},
"value": {
"val1": {
"_gen": "var",
"var": "val1"
},
"val2": {
"_gen": "var",
"var": "val2"
}
}
}
[
{
"val1": 3.667845534866542,
"val2": 4.570689476874419
},
{
"val1": 1.2117634118560106,
"val2": 4.570689476874419
},
{
"val1": 1.8688502733044223,
"val2": 4.570689476874419
},
{
"val1": 3.6096312462139446,
"val2": 4.570689476874419
},
{
"val1": 4.631426679264125,
"val2": 4.570689476874419
}
]
Drill into a map
Use a compound structure, like a map, to generate multiple values assigned to one var. This is especially useful for choices where two or more values relate to each other.
{
"topic": "sandbox",
"vars": {
"profile": {
"_gen": "oneOf",
"choices": [
{
"luckyNumber": {
"_gen": "uniformDistribution",
"bounds": [
1,
50
],
"decimals": 0
},
"active": false
},
{
"luckyNumber": {
"_gen": "uniformDistribution",
"bounds": [
50,
99
],
"decimals": 0
},
"active": true
}
]
}
},
"value": {
"userProfile": {
"theNumber": {
"_gen": "var",
"var": "profile",
"path": [
"luckyNumber"
]
},
"tags": {
"isActive": {
"_gen": "var",
"var": "profile",
"path": [
"active"
]
}
}
}
}
}
[
{
"userProfile": {
"theNumber": 92,
"tags": {
"isActive": true
}
}
},
{
"userProfile": {
"theNumber": 34,
"tags": {
"isActive": false
}
}
},
{
"userProfile": {
"theNumber": 88,
"tags": {
"isActive": true
}
}
},
{
"userProfile": {
"theNumber": 97,
"tags": {
"isActive": true
}
}
},
{
"userProfile": {
"theNumber": 36,
"tags": {
"isActive": false
}
}
}
]
Specification
JSON schema
{
"type": "object",
"properties": {
"var": {
"type": "string"
},
"path": {
"type": "array",
"items": {
"oneOf": [
{
"type": "integer",
"minimum": 0
},
{
"type": "string"
}
]
}
}
},
"required": [
"var"
]
}