NAME¶
Config::Model::Loader - Load serialized data into config tree
VERSION¶
version 2.061
SYNOPSIS¶
use Config::Model;
use Log::Log4perl qw(:easy);
Log::Log4perl->easy_init($WARN);
# define configuration tree object
my $model = Config::Model->new;
$model->create_config_class(
name => "Foo",
element => [
[qw/foo bar/] => {
type => 'leaf',
value_type => 'string'
},
]
);
$model ->create_config_class (
name => "MyClass",
element => [
[qw/foo bar/] => {
type => 'leaf',
value_type => 'string'
},
hash_of_nodes => {
type => 'hash', # hash id
index_type => 'string',
cargo => {
type => 'node',
config_class_name => 'Foo'
},
},
[qw/lista listb/] => {
type => 'list',
cargo => {type => 'leaf',
value_type => 'string'
}
},
],
) ;
my $inst = $model->instance(root_class_name => 'MyClass' );
my $root = $inst->config_root ;
# put data
my $step = 'foo=FOO hash_of_nodes:fr foo=bonjour -
hash_of_nodes:en foo=hello
! lista=foo,bar lista:2=baz
listb:0=foo listb:1=baz';
$root->load( step => $step );
print $root->describe,"\n" ;
# name value type comment
# foo FOO string
# bar [undef] string
# hash_of_nodes <Foo> node hash keys: "en" "fr"
# lista foo,bar,baz list
# listb foo,baz list
# delete some data
$root->load( step => 'lista~2' );
print $root->describe(element => 'lista'),"\n" ;
# name value type comment
# lista foo,bar list
# append some data
$root->load( step => q!hash_of_nodes:en foo.=" world"! );
print $root->grab('hash_of_nodes:en')->describe(element => 'foo'),"\n" ;
# name value type comment
# foo "hello world" string
DESCRIPTION¶
This module is used directly by Config::Model::Node to load serialized
configuration data into the configuration tree.
Serialized data can be written by the user or produced by Config::Model::Dumper
while dumping data from a configuration tree.
CONSTRUCTOR¶
new ( )¶
No parameter. The constructor should be used only by Config::Model::Node.
load string syntax¶
The string is made of the following items (also called "actions")
separated by spaces. These actions can be divided in 4 groups:
- navigation
- Moving up and down the configuration tree.
- list and hash operation
- select, add or delete hash or list item (also known as "id"
items)
- leaf operation
- select, modify or delecte leaf value
- annotation
- modify or delete configuration annotation (aka comment)
navigation¶
- -
- Go up one node
- !
- Go to the root node of the configuration tree.
- xxx
- Go down using "xxx" element. (For "node" type
element)
list and hash operation¶
- xxx:yy
- Go down using "xxx" element and id "yy" (For
"hash" or "list" element with "node"
cargo_type)
- xxx:~/yy/
- Go down using "xxx" element and loop over the ids that match the
regex. (For "hash")
For instance, with "OpenSsh" model, you could do
Host:~/.*.debian.org/ user='foo-guest'
to set "foo-user" users for all your debian accounts.
- xxx:-yy
- Delete item referenced by "xxx" element and id "yy".
For a list, this is equivalent to "splice xxx,yy,1". This
command does not go down in the tree (since it has just deleted the
element). I.e. a '"-"' is generally not needed afterwards.
- xxx:-=yy
- Remove the element whose value is "yy". For list or hash of
leaves. Will not complain if the value to delete is not found.
- xxx:-~/yy/
- Remove the element whose value matches "yy". For list or hash of
leaves. Will not complain if no value were deleted.
- xxx:=~s/yy/zz/
- Substitute a value with another
- xxx:<yy or xxx:.push(yy)
- Push "yy" value on "xxx" list
- xxx:>yy or xxx:.unshift(yy)
- Unshift "yy" value on "xxx" list
- xxx:@ or xxx:.sort
- Sort the list
- xxx:.insert_at(yy,zz)
- Insert "zz" value on "xxx" list before index
"yy".
- xxx:.insert_before(yy,zz)
- Insert "zz" value on "xxx" list before value
"yy".
- xxx:.insert_before(/yy/,zz)
- Insert "zz" value on "xxx" list before value
matching "yy".
- xxx:.insort(zz)
- Insert "zz" value on "xxx" list so that existing
alphanumeric order is preserved.
- xxx:=z1,z2,z3
- Set list element "xxx" to list "z1,z2,z3". Use
",," for undef values, and "" for empty values.
I.e, for a list "('a',undef,'','c')", use
"a,,"",c".
- xxx:yy=zz
- For "hash" element containing "leaf" cargo_type. Set
the leaf identified by key "yy" to value "zz".
Using "xxx:~/yy/=zz" is also possible.
leaf operation¶
- xxx=zz
- Set element "xxx" to value "yy". load also accepts to
set elements with a quoted string. (For "leaf" element)
For instance "foo="a quoted string"". Note that you
cannot embed double quote in this string. I.e "foo="a
\"quoted\" string"" will fail.
- xxx=~s/foo/bar/
- Apply the substitution to the value of xxx. "s/foo/bar/" is the
standard Perl "s" substitution pattern.
If your patten needs white spaces, you will need to surround the pattern
with quotes:
xxx=~"s/foo bar/bar baz/"
Perl pattern modifiers are accepted
xxx=~s/FOO/bar/i
- xxx~
- Undef element "xxx"
- xxx.=zzz
- Will append "zzz" value to current values (valid for
"leaf" elements).
annotation¶
- xxx#zzz or xxx:yyy#zzz
- Element annotation. Can be quoted or not quoted. Note that annotations are
always placed at the end of an action item.
I.e. "foo#comment", "foo:bar#comment" or
"foo:bar=baz#comment" are valid. "foo#comment:bar" is
not valid.
Quotes¶
You can surround indexes and values with double quotes. E.g.:
a_string="\"titi\" and \"toto\""
Methods¶
load ( ... )¶
Load data into the node tree (from the node passed with "node") and
fill values as we go following the instructions passed with "step".
("step" can also be an array ref).
Parameters are:
- node
- node ref of the root of the tree (of sub-root) to start the load
from.
- step
- A string or an array ref containing the steps to load. See above for a
description of the string.
- check
- Whether to check values while loading. Either "yes" (default),
"no" or "skip". Loading with "skip" will
discard bad values.
AUTHOR¶
Dominique Dumont, (ddumont at cpan dot org)
SEE ALSO¶
Config::Model,Config::Model::Node,Config::Model::Dumper
AUTHOR¶
Dominique Dumont
COPYRIGHT AND LICENSE¶
This software is Copyright (c) 2014 by Dominique Dumont.
This is free software, licensed under:
The GNU Lesser General Public License, Version 2.1, February 1999