Dominique Dumont > Config-Model-2.054 > Config::Model::Loader

Download:
Config-Model-2.054.tar.gz

Dependencies

Annotate this POD

Website

CPAN RT

Open  1
View/Report Bugs
Module Version: 2.054   Source   Latest Release: Config-Model-2.061

NAME ^

Config::Model::Loader - Load serialized data into config tree

VERSION ^

version 2.054

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.

experience

Specify the experience level used during the load (default: master). The experience can be intermediate 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 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
syntax highlighting: