NAME
Config::Model::Loader - Load serialized data into config tree
VERSION
version 1.236
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.
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.
AUTHOR
Dominique Dumont, (ddumont at cpan dot org)