view release on metacpan or search on metacpan
lib/Config/Model/AnyId.pm view on Meta::CPAN
use Mouse;
with "Config::Model::Role::NodeLoader";
with "Config::Model::Role::Utils";
use Config::Model::Exception;
use Config::Model::Warper;
use Carp qw/cluck croak carp/;
use Log::Log4perl qw(get_logger :levels);
use Storable qw/dclone/;
use Mouse::Util::TypeConstraints;
use Scalar::Util qw/weaken/;
extends qw/Config::Model::AnyThing/;
use feature qw/signatures postderef/;
no warnings qw/experimental::signatures experimental::postderef/;
subtype 'KeyArray' => as 'ArrayRef' ;
coerce 'KeyArray' => from 'Str' => via { [$_] } ;
my $logger = get_logger("Tree::Element::Id");
lib/Config/Model/AnyId.pm view on Meta::CPAN
$self->set_convert( \%args ) if defined $args{convert};
$self-> clear_warpable_check_content;
for ( $self-> get_all_content_checks ) {
$self-> add_warpable_check_content($_);
}
for ( qw/duplicates/ ) {
my $method = "check_$_";
my $weak_self = $self;
weaken($weak_self); # weaken reference loop ($self - check_content - closure - self)
$self-> add_check_content( sub { $weak_self->$method(@_);} ) if $self->{$_};
}
Config::Model::Exception::Model->throw(
object => $self,
error => "Undefined index_type"
) unless defined $self->{index_type};
Config::Model::Exception::Model->throw(
object => $self,
lib/Config/Model/AnyId.pm view on Meta::CPAN
for duplicated values (when C<duplicates> parameter is set).
Derived classes can register more global checker with the following method.
=head2 add_check_content
This method expects a sub ref with signature C<( $self, $error, $warn,
$apply_fix )>. Where C<$error> and C<$warn> are array ref. You can
push error or warning messages there. C<$apply_fix> is a
boolean. When set to 1, the passed method can fix the warning or the
error. Please make sure to weaken C<$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(@_);} )
}
=head1 Introspection methods
The following methods returns the current value stored in the Id
object (as declared in the model unless they were warped):
=over
lib/Config/Model/Backend/Any.pm view on Meta::CPAN
=head2 new
The constructor should be used only by L<Config::Model::Node>.
Parameter:
=over
=item node
Calling node object. Node ref is weakened,
=item name
Backend name
=item auto_create
Boolean. Set to true to create the configuration file if this one is
missing (default 0)
lib/Config/Model/BackendMgr.pm view on Meta::CPAN
use Mouse;
use strict;
use warnings;
use Carp;
use 5.10.1;
use Config::Model::Exception;
use Data::Dumper;
use Storable qw/dclone/;
use Scalar::Util qw/weaken reftype/;
use Log::Log4perl qw(get_logger :levels);
use Path::Tiny 0.070;
my $logger = get_logger('BackendMgr');
my $user_logger = get_logger('User');
# one BackendMgr per file
has 'node' => (
is => 'ro',
lib/Config/Model/Instance.pm view on Meta::CPAN
# This file is part of Config-Model
#
# This 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
#
package Config::Model::Instance 2.155;
#use Scalar::Util qw(weaken) ;
use strict;
use 5.10.1;
use Mouse;
use Mouse::Util::TypeConstraints;
use MouseX::StrictConstructor;
with "Config::Model::Role::NodeLoader";
use File::Path;
use Path::Tiny;
lib/Config/Model/Role/WarpMaster.pm view on Meta::CPAN
package Config::Model::Role::WarpMaster 2.155;
# ABSTRACT: register and trigger a warped element
use Mouse::Role;
use strict;
use warnings;
use Mouse::Util;
use Log::Log4perl qw(get_logger :levels);
use Scalar::Util qw/weaken/;
my $logger = get_logger("Warper");
has 'warp_these_objects' => (
traits => ['Array'],
is => 'ro',
isa => 'ArrayRef',
default => sub { [] },
handles => {
_slave_info => 'elements',
lib/Config/Model/Role/WarpMaster.pm view on Meta::CPAN
},
);
sub register {
my ( $self, $warped, $warper_name ) = @_;
my $w_name = $warped->name;
$logger->debug( $self->get_type . ": " . $self->name, " registered $w_name ($warper_name)" )
if $logger->is_debug;
# weaken only applies to the passed reference, and there's no way
# to duplicate a weak ref. Only a strong ref is created. See
# qw(weaken) module for weaken()
my @tmp = ( $warped, $w_name, $warper_name );
weaken( $tmp[0] );
$self->_add_slave_info( \@tmp );
return defined $self->{compute} ? 'computed' : 'regular';
}
sub unregister {
my ( $self, $w_name ) = @_;
$logger->debug( $self->get_type .": " . $self->name, " unregister $w_name" )
if $logger->is_debug;
lib/Config/Model/Value.pm view on Meta::CPAN
use MouseX::StrictConstructor;
use Parse::RecDescent 1.90.0;
use Data::Dumper ();
use Config::Model::Exception;
use Config::Model::ValueComputer;
use Config::Model::IdElementReference;
use Config::Model::Warper;
use Log::Log4perl qw(get_logger :levels);
use Scalar::Util qw/weaken/;
use Carp;
use Storable qw/dclone/;
use Path::Tiny;
use List::Util qw(any) ;
extends qw/Config::Model::AnyThing/;
with "Config::Model::Role::WarpMaster";
with "Config::Model::Role::Grab";
with "Config::Model::Role::HelpAsText";
with "Config::Model::Role::ComputeFunction";
lib/Config/Model/Value.pm view on Meta::CPAN
#master, or a variable in a compute formula.
# register a dependency, This information may be used by external
# tools
sub register_dependency {
my $self = shift;
my $slave = shift;
unshift @{ $self->{depend_on_me} }, $slave;
# weaken only applies to the passed reference, and there's no way
# to duplicate a weak ref. Only a strong ref is created.
weaken( $self->{depend_on_me}[0] );
return;
}
sub get_depend_slave {
my $self = shift;
my @result = ();
push @result, @{ $self->{depend_on_me} }
if defined $self->{depend_on_me};
lib/Config/Model/ValueComputer.pm view on Meta::CPAN
#
# This is free software, licensed under:
#
# The GNU Lesser General Public License, Version 2.1, February 1999
#
package Config::Model::ValueComputer 2.155;
use Mouse;
use MouseX::StrictConstructor;
# use Scalar::Util qw(weaken) ;
use Carp;
use Parse::RecDescent 1.90.0;
use Data::Dumper ();
use Log::Log4perl qw(get_logger :levels);
use vars qw($compute_grammar $compute_parser);
use feature qw/postderef signatures/;
no warnings qw/experimental::postderef experimental::signatures/;
lib/Config/Model/WarpedNode.pm view on Meta::CPAN
use Mouse;
use Carp qw(cluck croak);
use Config::Model::Exception;
use Config::Model::Warper;
use Data::Dumper ();
use Log::Log4perl qw(get_logger :levels);
use Storable qw/dclone/;
use Scalar::Util qw/weaken/;
extends qw/Config::Model::AnyThing/;
with "Config::Model::Role::NodeLoader";
with "Config::Model::Role::Grab";
my $logger = get_logger("Tree::Node::Warped");
# don't authorize to warp 'morph' parameter as it may lead to
# difficult maintenance
lib/Config/Model/WarpedNode.pm view on Meta::CPAN
my $self = shift;
$self->get_actual_node->is_auto_write_for_type(@_);
}
# register warper that goes through this path when looking for warp master value
sub register {
my ( $self, $warped, $w_idx ) = @_;
$logger->debug( "WarpedNode: " . $self->name, " registered " . $warped->name );
# weaken only applies to the passed reference, and there's no way
# to duplicate a weak ref. Only a strong ref is created. See
# qw(weaken) module for weaken()
my @tmp = ( $warped, $w_idx );
weaken( $tmp[0] );
push @{ $self->{warp_these_objects} }, \@tmp;
}
sub trigger_warp {
my $self = shift;
# warp_these_objects is modified by the calls below, so this copy
# must be done before the loop
my @list = @{ $self->{warp_these_objects} || [] };