|
NAMEConfig::Model::AnyId - Base class for hash or list elementVERSIONversion 2.149SYNOPSISuse 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 $steps = '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( steps => $steps ); # dump resulting tree print $root->dump_tree; DESCRIPTIONThis 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. CONSTRUCTORAnyId object should not be created directly.Hash or list model declarationA hash or list element must be declared with the following parameters:
Warp: dynamic value configurationThe 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" means that "warped_hash" can only accept one "Dummy" class item . Setting "macro" to "B" means that "warped_hash" accepts two "Dummy" class items. 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} ], } Warp and auto_create_ids or auto_create_keysWhen 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 never removes items that were previously auto created.For instance, when a tied hash is created with "auto_create => [a,b,c]", the hash contains "(a,b,c)". Then, once a warp with "auto_create_keys => [c,d,e]" is applied, the hash then contains "(a,b,c,d,e)". The items created by the first auto_create_keys are not removed. Warp and max_nbWhen 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 is raised if a warp leads to a number of items greater than the max_nb constraint. Content checkBy default, this class provides an optional content check that checks for duplicated values (when "duplicates" parameter is set).Derived classes can register more global checker with the following method. add_check_contentThis method expects a sub ref with signature "( $self, $error, $warn, $apply_fix )". Where $error and $warn are array ref. You can push error or warning messages there. $apply_fix is a boolean. When set to 1, the passed method can fix the warning or the error. Please make sure to weaken $self to avoid memory cycles.Example: package MyId; use Mouse; extends qw/Config::Model::HashId/; use Scalar::Util qw/weaken/; sub setup { my $self = shift; weaken($self); $self-> add_check_content( sub { $self->check_usused_licenses(@_);} ) } Introspection methodsThe following methods returns the current value stored in the Id object (as declared in the model unless they were warped):
get_cargo_typeReturns the object type contained by the hash or list (i.e. returns "cargo -> type").get_cargo_infoParameters: "( < what > )"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. Returns undef if the requested info is not provided in the model. get_default_keysReturns 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.nameReturns the object name. The name finishes with ' id'.config_class_nameReturns the config_class_name of collected elements. Valid only for collection of nodes.This method returns undef if "cargo" "type" is not "node". has_fixesReturns the number of fixes that can be applied to the current value.Information managementfetch_with_idParameters: "( index => $idx , [ check => 'no' ])"Fetch the collected element held by the hash or list. Index check is 'yes' by default. Can be called with one parameter which is used as index. getGet a value from a directory like path. Parameters are:
setParameters: "( path, value )"Set a value with a directory like path. copyParameters: "( from_index, to_index )"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. fetch_allReturns an array containing all elements held by the hash or list.fetch_valueParameters: "( idx => ..., mode => ..., check => ...)"Returns the value held by the "idx" element of the hash or list. This method is only valid for hash or list containing leaves. See fetch_all_values for "mode" argument documentation and "fetch" in Config::Model::Value for "check" argument documentation. fetch_summaryArguments: "( idx => ..., mode => ..., check => ...)"Like "fetch_value", but returns a truncated value when the value is a string or uniline that is too long to be displayed. fetch_all_valuesParameters: "( mode => ..., check => ...)"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 returns either:
See "fetch" in Config::Model::Value for "check" argument documentation. fetchSimilar to "fetch_all_values", with the same parameters, Returns the result as a string with comma separated list values.fetch_all_indexesReturns an array containing all indexes of the hash or list. Hash keys are sorted alphabetically, except for ordered hashed.childrenLike fetch_all_indexes. This method is polymorphic for all non-leaf objects of the configuration tree.definedParameters: "( index )"Returns true if the value held at "index" is defined. existsParameters: "( index )"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. has_dataReturn true if the array or hash is not empty.deleteParameters: "( index )"Delete the "index"ed value clearDelete all values (also delete underlying value or node objects).clear_valuesDelete all values (without deleting underlying value objects).warning_msgParameters: "( [index] )"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. has_warningReturns the current number of warning.error_msgReturns the error messages of this object (if any)AUTHORDominique Dumont, ddumont [AT] cpan [DOT] orgSEE ALSOConfig::Model, Config::Model::Instance, Config::Model::Node, Config::Model::WarpedNode, Config::Model::HashId, Config::Model::ListId, Config::Model::CheckList, Config::Model::ValueAUTHORDominique DumontCOPYRIGHT AND LICENSEThis software is Copyright (c) 2005-2022 by Dominique Dumont.This is free software, licensed under: The GNU Lesser General Public License, Version 2.1, February 1999
Visit the GSP FreeBSD Man Page Interface. |