Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
Config::Model::WarpedNUser3Contributed Perl DocumeConfig::Model::WarpedNode(3)

NAME
       Config::Model::WarpedNode - Node	that change config class properties

VERSION
       version 2.140

SYNOPSIS
	use Config::Model;

	my $model = Config::Model->new;
	foreach	(qw/X Y/) {
	   $model->create_config_class(
	       name    => "Class$_",
	       element => [ foo	=> {qw/type leaf value_type string/} ]
	   );
	}
	$model->create_config_class(
	   name	=> "MyClass",

	   element => [
	       master_switch =>	{
		   type	      => 'leaf',
		   value_type => 'enum',
		   choice     => [qw/cX	cY/]
	       },

	       'a_warped_node' => {
		   type	  => 'warped_node',
		   warp	=> }
		      follow =>	{ ms =>	'! master_switch' },
		      rules  =>	[
			  '$ms eq "cX"'	=> { config_class_name => 'ClassX' },
			  '$ms eq "cY"'	=> { config_class_name => 'ClassY' },
		      ]
		   }
	       },
	   ],
	);

	my $inst = $model->instance(root_class_name => 'MyClass' );
	my $root = $inst->config_root ;

	print "Visible elements: ",join(' ',$root->get_element_name),"\n" ;
	# Visible elements: master_switch

	$root->load( steps => 'master_switch=cX' );
	print "Visible elements: ",join(' ',$root->get_element_name),"\n" ;
	# Visible elements: master_switch a_warped_node

	my $node = $root->grab('a_warped_node')	;
	print "a_warped_node class: ",$node->config_class_name,"\n" ;
	# a_warped_node	class: ClassX

	$root->load( steps => 'master_switch=cY' );
	print "a_warped_node class: ",$node->config_class_name,"\n" ;
	# a_warped_node	class: ClassY

DESCRIPTION
       This class provides a way to change dynamically the configuration class
       (or some	other properties) of a node. The changes are done according to
       the model declaration.

       This declaration	specifies one (or several) leaf	in the configuration
       tree that triggers the actual property change of	the warped node. This
       leaf is also referred as	warp master.

       When the	warp master(s) value(s)	changes, "WarpedNode" creates an
       instance	of the new class required by the warp master.

       If the morph parameter is set, the values held by the old object	are
       (if possible) copied to the new instance	of the object using copy_from
       method.

       Warped node can alter the following properties:

	config_class_name
	level

Constructor
       "WarpedNode" should not be created directly.

Warped node model declaration
   Parameter overview
       A warped	node must be declared with the following parameters:

       type
	   Always set to "warped_node".

       follow
	   Grab	string leading to the "Config::Model::Value" warp master.  See
	   "Warp follow	argument" in Config::Model::Warper for details.

       morph
	   boolean. If 1, "WarpedNode" tries to	recursively copy the value
	   from	the old	object to the new object using copy_from method.  When
	   a copy is not possible, undef values	are assigned to	object
	   elements.

       rules
	   Hash	or array ref that specify the property change rules according
	   to the warp master(s) value(s).  See	"Warp rules argument" in
	   Config::Model::Warper for details on	how to specify the warp	master
	   values (or combination of values).

   Effect declaration
       For a warped node, the effects are declared with	these parameters:

       config_class_name
	       When requested by the warp master,the "WarpedNode" creates a
	       new object of the type specified	by this	parameter:

		 XZ => { config_class_name => 'SlaveZ' }

	       Instead of a string, you	can an array ref which contains	the
	       class name and constructor arguments :

		 XY  =>	{ config_class_name => ['SlaveY', foo => 'bar' ], },

       class   Specify a Perl class to implement the above config class. This
	       Perl Class must inherit Config::Model::Node.

Forwarded methods
       The following methods are forwarded to contained	node:

       fetch_element config_class_name get_element_name	has_element
       is_element_available element_type load fetch_element_value get_type
       get_cargo_type describe

Methods
   name
       Return the name of the node (even if warped out).

   is_accessible
       Returns true if the node	hidden behind this warped node is accessible,
       i.e. the	warp master have values	so a node was warped in.

   get_actual_node
       Returns the node	object hidden behind the warped	node. Croaks if	the
       node is not accessible.

   load_data
       Parameters: "( hash_ref )"

       Load configuration data with a hash ref.	The hash ref key must match
       the available elements of the node carried by the warped	node.

EXAMPLE
	$model ->create_config_class
	 (
	  element =>
	   [
	    tree_macro => { type => 'leaf',
			    value_type => 'enum',
			    choice     => [qw/XX XY XZ ZZ/]
			  },
	    bar	=>  {
		      type => 'warped_node',
		      follow =>	'! tree_macro',
		      morph => 1,
		      rules => [
				XX => {	config_class_name
					  => [ 'ClassX', 'foo' ,'bar' ]}
				XY => {	config_class_name => 'ClassY'},
				XZ => {	config_class_name => 'ClassZ'}
			       ]
		    }
	   ]
	 );

       In the example above we see that:

       o   The 'bar' slot can refer to a "ClassX", "ClassZ" or "ClassY"
	   object.

       o   The warper object is	the "tree_macro" attribute of the root of the
	   object tree.

       o   When	"tree_macro" is	set to "ZZ", "bar" is not available. Trying to
	   access "bar"	raises an exception.

       o   When	"tree_macro" is	changed	from "ZZ" to "XX", "bar" refers	to a
	   brand new "ClassX" object constructed with "ClassX->new(foo =>
	   'bar')"

       o   Then, if "tree_macro" is changed from "XX" to "XY", "bar" refers to
	   a brand new "ClassY"	object.	But in this case, the object is
	   initialized with most if not	all the	attributes of "ClassX".	This
	   copy	is done	whenever "tree_macro" is changed.

AUTHOR
       Dominique Dumont, (ddumont at cpan dot org)

SEE ALSO
       Config::Model::Instance,	Config::Model, Config::Model::HashId,
       Config::Model::ListId, Config::Model::AnyThing, Config::Model::Warper,
       Config::Model::WarpedNode, Config::Model::Value

AUTHOR
       Dominique Dumont

COPYRIGHT AND LICENSE
       This software is	Copyright (c) 2005-2020	by Dominique Dumont.

       This is free software, licensed under:

	 The GNU Lesser	General	Public License,	Version	2.1, February 1999

perl v5.32.0			  2020-08-28	  Config::Model::WarpedNode(3)

NAME | VERSION | SYNOPSIS | DESCRIPTION | Constructor | Warped node model declaration | Forwarded methods | Methods | EXAMPLE | AUTHOR | SEE ALSO | AUTHOR | COPYRIGHT AND LICENSE

Want to link to this manual page? Use this URL:
<https://www.freebsd.org/cgi/man.cgi?query=Config::Model::WarpedNode&sektion=3&manpath=FreeBSD+12.2-RELEASE+and+Ports>

home | help