Config::Model::AnyId
Base class for hash or list element
- Provided by: libconfig-model-perl (Version: 2.082-1)
- Report a bug
Base class for hash or list element
version 2.082
use Config::Model;
# 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 => [
plain_hash => {
type => 'hash',
index_type => 'string',
cargo => {
type => 'leaf',
value_type => 'string',
},
},
bounded_hash => {
type => 'hash', # hash id
index_type => 'integer',
# hash boundaries
min_index => 1, max_index => 123, max_nb => 2,
# specify cargo held by hash
cargo => {
type => 'leaf',
value_type => 'string'
},
},
bounded_list => {
type => 'list', # list id
max_index => 123,
cargo => {
type => 'leaf',
value_type => 'string'
},
},
hash_of_nodes => {
type => 'hash', # hash id
index_type => 'string',
cargo => {
type => 'node',
config_class_name => 'Foo'
},
},
],
);
my $inst = $model->instance( root_class_name => 'MyClass' );
my $root = $inst->config_root;
# put data
my $step = 'plain_hash:foo=boo bounded_list=foo,bar,baz
bounded_hash:3=foo bounded_hash:30=baz
hash_of_nodes:"foo node" foo="in foo node" -
hash_of_nodes:"bar node" bar="in bar node" ';
$root->load( step => $step );
# dump resulting tree
print $root->dump_tree;
This class provides hash or list elements for a Config::Model::Node.
The hash index can either be en enumerated type, a boolean, an integer or a string.
AnyId object should not be created directly.
A hash or list element must be declared with the following parameters:
You can use "default_keys => 'foo'", or "default_keys => ['foo', 'bar']".
default_with_init => { 'foo' => 'X=Av Y=Bv' ,
'bar' => 'Y=Av Z=Cv' }
When the hash contains leaves, you can also use:
default_with_init => { 'def_1' => 'def_1 stuff' ,
'def_2' => 'def_2 stuff' }
migrate_keys_from => '- another_hash'
migrate_values_from => '- another_hash_or_list'
follow_keys_from => '- another_hash'
allow_keys => ['foo','bar','baz']
allow_keys_from => '- another_hash'
allow_keys_matching => '^foo\d\d$'
Called with "auto_create_keys => ['foo']", or "auto_create_keys => ['foo', 'bar']".
The Warp functionality enables an HashId or ListId object to change its default settings (e.g. "min_index", "max_index" or "max_nb" parameters) dynamically according to the value of another "Value" object. (See Config::Model::Warper for explanation on warp mechanism)
For instance, with this model:
$model ->create_config_class
(
name => 'Root',
'element'
=> [
macro => { type => 'leaf',
value_type => 'enum',
name => 'macro',
choice => [qw/A B C/],
},
warped_hash => { type => 'hash',
index_type => 'integer',
max_nb => 3,
warp => {
follow => '- macro',
rules => { A => { max_nb => 1 },
B => { max_nb => 2 }
}
},
cargo => { type => 'node',
config_class_name => 'Dummy'
}
},
]
);
Setting "macro" to "A" will mean that "warped_hash" can only accept one instance of "Dummy".
Setting "macro" to "B" will mean that "warped_hash" will accept two instances of "Dummy".
Like other warped class, a HashId or ListId can have multiple warp masters (See "Warp follow argument" in Config::Model::Warper:
warp => { follow => { m1 => '- macro1',
m2 => '- macro2'
},
rules => [ '$m1 eq "A" and $m2 eq "A2"' => { max_nb => 1},
'$m1 eq "A" and $m2 eq "B2"' => { max_nb => 2}
],
}
When a warp is applied with "auto_create_keys" or "auto_create_ids" parameter, the auto_created items are created if they are not already present. But this warp will never remove items that were previously auto created.
For instance, if a tied hash is created with "auto_create => [a,b,c]", the hash contains "(a,b,c)".
Then if a warp is applied with "auto_create_keys => [c,d,e]", the hash will contain "(a,b,c,d,e)". The items created by the first auto_create_keys are not removed.
When a warp is applied, the items that do not fit the constraint (e.g. min_index, max_index) are removed.
For the max_nb constraint, an exception will be raised if a warp leads to a number of items greater than the max_nb constraint.
The following methods returns the current value stored in the Id object (as declared in the model unless they were warped):
Returns the object type contained by the hash or list (i.e. returns "cargo -> type").
Returns more info on the cargo contained by the hash or list. "what" may be "value_type" or any other cargo info stored in the model. Will return undef if the requested info was not provided in the model.
Returns a list (or a list ref) of the current default keys. These keys can be set by the "default_keys" or "default_with_init" parameters or by the other hash pointed by "follow_keys_from" parameter.
Returns the object name. The name finishes with ' id'.
Returns the config_class_name of collected elements. Valid only for collection of nodes.
This method will return undef if "cargo" "type" is not "node".
Returns the number of fixes that can be applied to the current value.
Fetch the collected element held by the hash or list. Index check is 'yes' by default. Can be called with one parameter which will be used as index.
Get a value from a directory like path. Parameters are:
/foo/bar/4
Each word between the '/' is either an element name or a hash key or a list index.
Set a value with a directory like path.
Deep copy an element within the hash or list. If the element contained by the hash or list is a node, all configuration information is copied from one node to another.
Returns an array containing all elements held by the hash or list.
Returns an array containing all defined values held by the hash or list. (undefined values are simply discarded). This method is only valid for hash or list containing leaves.
With "mode" parameter, this method will return either:
Returns an array containing all indexes of the hash or list. Hash keys are sorted alphabetically, except for ordered hashed.
Like fetch_all_indexes. This method is polymorphic for all non-leaf objects of the configuration tree.
Returns true if the value held at "index" is defined.
Returns true if the value held at "index" exists (i.e the key exists but the value may be undefined). This method may not make sense for list element.
Delete the "index"ed value
Delete all values (also delete underlying value or node objects).
Delete all values (without deleting underlying value objects).
Returns warnings concerning indexes of this hash. Without parameter, returns a string containing all warnings or undef. With an index, return the warnings concerning this index or undef.
Returns the current number of warning.
Returns the error messages of this object (if any)
Dominique Dumont, ddumont [AT] cpan [DOT] org
Config::Model, Config::Model::Instance, Config::Model::Node, Config::Model::WarpedNode, Config::Model::HashId, Config::Model::ListId, Config::Model::CheckList, Config::Model::Value
Dominique Dumont
This software is Copyright (c) 2005-2016 by Dominique Dumont.
This is free software, licensed under:
The GNU Lesser General Public License, Version 2.1, February 1999