Outthentic-DSL
view release on metacpan or search on metacpan
my $total=0;
for my $c (@{captures()}) {
$total+=$c->[0];
}
[ ( $total == 72 ), "total age" ]
CODE
# Multiline expressions
## Multilines in check expressions
When parser parses check expressions it does it in a _single line mode_ :
* check expression is always single line string
* input text is parsed in line by line mode, thus every line is validated against a single line check expression
Here is example.
Input text:
Multiline
string
here
DSL code:
# check list
# always
# consists of
# single line expressions
Multiline
string
here
regexp: Multiline \n string \n here
Results:
+--------+---------------------------------------+
| status | message |
+--------+---------------------------------------+
| OK | matches "Multiline" |
| OK | matches "string" |
| OK | matches "here" |
| FAIL | matches /Multiline \n string \n here/ |
+--------+---------------------------------------+
Use text blocks if you want to _represent_ multiline checks.
## Multilines in code expressions, generators and validators
Perl expressions, validators and generators could contain multilines expressions
There are two ways to write multiline expressions:
* using back slash delimiters to split multiline string to many chunks
* using HERE documents expressions
### Back slash delimiters
`\` delimiters breaks a single line text on a multi lines.
Example:
# What about to validate stdout
# With sqlite database entries?
generator: \
use DBI; \
my $dbh = DBI->connect("dbi:SQLite:dbname=t/data/test.db","",""); \
my $sth = $dbh->prepare("SELECT name from users"); \
$sth->execute(); \
my $results = $sth->fetchall_arrayref; \
[ map { $_->[0] } @${results} ] \
### HERE documents expressions
Is alternative to make your multiline code more readable:
# What about to validate stdout
# With sqlite database entries?
generator: <<CODE
use DBI;
my $dbh = DBI->connect("dbi:SQLite:dbname=t/data/test.db","","");
my $sth = $dbh->prepare("SELECT name from users");
$sth->execute();
my $results = $sth->fetchall_arrayref;
[ map { $_->[0] } @${results} ]
CODE
# Captures
Captures are pieces of data get captured when parser validate lines against a regular expressions:
Input text:
# my family ages list.
alex 38
julia 32
jan 2
# let's capture name and age chunks
regexp: /(\w+)\s+(\d+)/
code: << CODE
for my $c (@{captures}){
( run in 1.012 second using v1.01-cache-2.11-cpan-71847e10f99 )