.TH "md_src_plugins_yambi_README" 3elektra "Wed Aug 21 2019" "Version 0.9.0" "Elektra" \" -*- nroff -*-
.ad l
.nh
.SH NAME
md_src_plugins_yambi_READMEPlugin: yambi 
 \- 
.IP "\(bu" 2
infos = Information about the yambi plugin is in keys below
.IP "\(bu" 2
infos/author = René Schwaiger sanssecours@me.com
.IP "\(bu" 2
infos/licence = BSD
.IP "\(bu" 2
infos/needs = directoryvalue yamlsmith
.IP "\(bu" 2
infos/provides = storage/yaml
.IP "\(bu" 2
infos/recommends =
.IP "\(bu" 2
infos/placements = getstorage
.IP "\(bu" 2
infos/status = maintained unittest preview experimental unfinished nodoc concept discouraged
.IP "\(bu" 2
infos/metadata =
.IP "\(bu" 2
infos/description = This storage plugin use a parser generated by Bison to read YAML files
.PP
.SH "YAMBi"
.PP
.SS "Introduction"
.PP
This plugin uses \fCBison\fP to generate a parser for the \fCYAML\fP serialization format\&.
.PP
.SS "Dependencies"
.PP
The plugin requires \fCBison\fP (version 3\&.0 or later)\&.
.PP
.SS "Examples"
.PP
.SS "Mappings"
.PP
.PP
.nf
# Mount plugin
sudo kdb mount config\&.yaml user/tests/yambi yambi

kdb set user/tests/yambi 'Mount Point'
kdb get user/tests/yambi
#> Mount Point

kdb set user/tests/yambi/bambi 'Mule Deer'
kdb get user/tests/yambi/bambi
#> Mule Deer

kdb set user/tests/yambi/thumper 'Rabbit'
kdb get user/tests/yambi/thumper
#> Rabbit

kdb set user/tests/yambi/bambi/baby 'Bobby Stewart'
kdb set user/tests/yambi/bambi/young 'Donnie Dunagan'
kdb set user/tests/yambi/bambi/adolescent 'Hardie Albright'
kdb set user/tests/yambi/bambi/adult 'John Sutherland'

kdb get user/tests/yambi/bambi/baby
#> Bobby Stewart

kdb ls user/tests/yambi
#> user/tests/yambi
#> user/tests/yambi/bambi
#> user/tests/yambi/bambi/adolescent
#> user/tests/yambi/bambi/adult
#> user/tests/yambi/bambi/baby
#> user/tests/yambi/bambi/young
#> user/tests/yambi/thumper

# Undo modifications
kdb rm -r user/tests/yambi
sudo kdb umount user/tests/yambi
.fi
.PP
.PP
.SS "Arrays"
.PP
.PP
.nf
# Mount plugin
sudo kdb mount config\&.yaml user/tests/yambi yambi

kdb set user/tests/yambi/friends
kdb set user/tests/yambi/friends/#0 Thumper
kdb set user/tests/yambi/friends/#1 Flower

# Retrieve last array index
kdb getmeta user/tests/yambi/friends array
#> #1

kdb get user/tests/yambi/friends/#0
#> Thumper
kdb get user/tests/yambi/friends/#1
#> Flower

# Undo modifications
kdb rm -r user/tests/yambi
sudo kdb umount user/tests/yambi
.fi
.PP
.PP
.SS "Boolean Values"
.PP
``` 
.SH "Mount plugin"
.PP
.PP
sudo kdb mount config\&.yaml user/tests/yambi yambi
.PP
.SH "Manually add a boolean value to the database"
.PP
.PP
printf 'boolean: false' > \fCkdb file user/tests/yambi\fP
.PP
.SH "Elektra stores boolean values as \fC0\fP and \fC1\fP"
.PP
.PP
kdb get user/tests/yambi/boolean #> 0
.PP
.SH "Undo modifications to the key database"
.PP
.PP
kdb rm -r user/tests/yambi sudo kdb umount user/tests/yambi 
.PP
.nf
### Error Messages

.fi
.PP
 
.SH "Mount plugin"
.PP
.PP
sudo kdb mount config\&.yaml user/tests/yambi yambi
.PP
.SH "Manually add data containing syntax errors"
.PP
.PP
printf -- 'Thumper: - Eating greens is a special treat\&.
.br
' > \fCkdb file user/tests/yambi\fP printf -- ' - It makes long ears and great big feet\&.
.br
' >> \fCkdb file user/tests/yambi\fP printf -- '- But it sure is awful stuff to eat\&.
.br
' >> \fCkdb file user/tests/yambi\fP printf -- ' - I made that last part up myself
.br
\&.' >> \fCkdb file user/tests/yambi\fP printf -- 'Stephen King:
.br
' >> \fCkdb file user/tests/yambi\fP printf -- ' The first movie I ever saw was a horror movie\&.
.br
' >> \fCkdb file user/tests/yambi\fP printf -- ' - It was Bambi\&.
.br
' >> \fCkdb file user/tests/yambi\fP
.PP
.SH "Try to retrieve data"
.PP
.PP
kdb get user/tests/yambi/Thumper/#2 
.SH "RET: 5"
.PP
.PP
.SH "STDERR: \&.*config\&.yaml:3:1: syntax error, unexpected element, expecting end of map or key\&.*"
.PP
.PP
.SH "Let us look at the error message more closely\&."
.PP
.PP
.SH "Since the location of \fCconfig\&.yaml\fP depends on the current user and OS,"
.PP
.PP
.SH "we store the text before \fCconfig\&.yaml\fP as \fCuser/tests/error/prefix\fP\&."
.PP
.PP
kdb set user/tests/error '$(2>&1 kdb ls user/tests/yambi)' kdb set user/tests/error/prefix '$(kdb get user/tests/error | grep 'config\&.yaml' | head -1 | sed -E 's/(\&.*)config\&.yaml\&.*/\\1/')' kdb get user/tests/error/prefix 
.SH "We also store the length of the prefix, so we can remove it from every"
.PP
.PP
.SH "line of the error message\&."
.PP
.PP
kdb set user/tests/error/prefix/length '$(kdb get user/tests/error/prefix | wc -c | sed 's/[ ]*//g')'
.PP
.SH "Since we only want to look at the “reason” of the error, we"
.PP
.PP
.SH "remove the other part of the error message with \fChead\fP and \fCtail\fP\&."
.PP
.PP
kdb get user/tests/error | tail -n6 | cut -c'$(kdb get user/tests/error/prefix/length | tr -d '\\n')'- #> config\&.yaml:3:1: syntax error, unexpected element, expecting end of map or key #> - But it sure is awful stuff to eat\&. #> ^ #> config\&.yaml:7:2: syntax error, unexpected start of sequence, expecting end of map or key #> - It was Bambi\&. #> ^
.PP
.SH "Fix syntax errors"
.PP
.PP
printf -- 'Thumper: - Eating greens is a special treat\&.
.br
' > \fCkdb file user/tests/yambi\fP printf -- ' - It makes long ears and great big feet\&.
.br
' >> \fCkdb file user/tests/yambi\fP printf -- ' - But it sure is awful stuff to eat\&.
.br
' >> \fCkdb file user/tests/yambi\fP printf -- ' - I made that last part up myself
.br
\&.' >> \fCkdb file user/tests/yambi\fP printf -- 'Stephen King:
.br
' >> \fCkdb file user/tests/yambi\fP printf -- ' - The first movie I ever saw was a horror movie\&.
.br
' >> \fCkdb file user/tests/yambi\fP printf -- ' - It was Bambi\&.
.br
' >> \fCkdb file user/tests/yambi\fP
.PP
.SH "Retrieve data"
.PP
.PP
kdb get user/tests/yambi/Thumper/#2 #> But it sure is awful stuff to eat\&.
.PP
.SH "Undo modifications"
.PP
.PP
kdb rm -r user/tests/error kdb rm -r user/tests/yambi sudo kdb umount user/tests/yambi ```
.PP
.SS "Limitations"
.PP
The plugin supports the same limited YAML syntax as \fBYan LR\fP\&.
.PP
.IP "\(bu" 2
The plugin always assumes \fBUTF-8\fP encoded data\&. 
.PP

