NAME
Config::Model::Loader - Load serialized data into config tree
VERSION
version 2.012
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:
- -
-
Go up one node
- !
-
Go to the root node of the configuration tree.
- xxx
-
Go down using
xxx
element. (Fornode
type element) - xxx:yy
-
Go down using
xxx
element and idyy
(Forhash
orlist
element withnode
cargo_type) - xxx=~/yy/
-
Go down using
xxx
element and loop over the ids that match the regex. (Forhash
)For instance, with
OpenSsh
model, you could doHost=~/.*.debian.org/ user='foo-guest'
to set "foo-user" users for all your debian accounts.
- xxx~yy
-
Delete item referenced by
xxx
element and idyy
. For a list, this is equivalent tosplice 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=zz
-
Set element
xxx
to valueyy
. load also accepts to set elements with a quoted string. (Forleaf
element)For instance
foo="a quoted string"
. Note that you cannot embed double quote in this string. I.efoo="a \"quoted\" string"
will fail. - xxx~
-
Undef element
xxx
- xxx=z1,z2,z3
-
Set list element
xxx
to listz1,z2,z3
. Use,,
for undef values, and""
for empty values.I.e, for a list
('a',undef,'','c')
, usea,,"",c
. - xxx:yy=zz
-
For
hash
element containingleaf
cargo_type. Set the leaf identified by keyyy
to valuezz
.Using
xxx=~/yy/=zz
is also possible. - xxx.=zzz
-
Will append
zzz
value to current values (valid forleaf
elements). - 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
orfoo: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.
- experience
-
Specify the experience level used during the load (default:
master
). The experience can beintermediate advanced master
. The load will raise an exception if the step of the load string tries to access an element with experience higher than user's experience. - check
-
Whether to check values while loading. Either
yes
(default),no
orskip
. Loading withskip
will discard bad values.
AUTHOR
Dominique Dumont, (ddumont at cpan dot org)