Zonemaster
view release on metacpan or search on metacpan
lib/Zonemaster/Config.pm view on Meta::CPAN
},
}
);
our $config;
_load_base_config();
our $policy = {};
sub BUILD {
my ( $self ) = @_;
foreach my $dir ( _config_directory_list() ) {
my $cfile = File::Spec->catfile( $dir, 'config.json' );
my $new = eval { decode_json scalar read_file $cfile };
if ( $new ) {
$config = $merger->merge( $config, $new );
push @{ $self->cfiles }, $cfile;
}
my $pfile = File::Spec->catfile( $dir, 'policy.json' );
$new = eval { decode_json scalar read_file $pfile };
if ( $new ) {
my $tc = $new->{__testcases__};
delete $new->{__testcases__};
foreach my $case ( keys %{$tc} ) {
$self->testcases->{$case} = $tc->{$case};
}
$policy = $merger->merge( $policy, $new );
push @{ $self->pfiles }, $pfile;
}
} ## end foreach my $dir ( _config_directory_list...)
return $self;
} ## end sub BUILD
sub get {
my ( $class ) = @_;
return $config;
}
sub policy {
my ( $class ) = @_;
if ( not $policy ) {
_load_base_policy();
}
return $policy;
}
sub _config_directory_list {
my @dirlist;
push @dirlist, dist_dir( 'Zonemaster' );
push @dirlist, '/etc/zonemaster';
push @dirlist, '/usr/local/etc/zonemaster';
my $dir = ( getpwuid( $> ) )[7];
if ( $dir ) {
push @dirlist, $dir . '/.zonemaster';
}
return @dirlist;
}
sub _load_base_config {
my $internal = decode_json( join( q{}, <DATA> ) );
# my $filename = dist_file( 'Zonemaster', 'config.json' );
# my $default = eval { decode_json scalar read_file $filename };
#
# $internal = $merger->merge( $internal, $default ) if $default;
$config = $internal;
return;
}
sub load_module_policy {
my ( $class, $mod ) = @_;
my $m = 'Zonemaster::Test::' . $mod;
if ( $m->can( 'policy' ) and $m->policy ) {
$policy = $merger->merge( $policy, { $mod => $m->policy } );
}
return;
}
sub load_config_file {
my ( $self, $filename ) = @_;
my $new = decode_json scalar read_file $filename;
if ( $new ) {
$config = $merger->merge( $config, $new );
push @{ $self->cfiles }, $filename if ( ref( $self ) and $self->isa( __PACKAGE__ ) );
}
return !!$new;
}
sub load_policy_file {
my ( $self, $filename ) = @_;
if ( not -r $filename ) {
foreach my $dir ( _config_directory_list() ) {
my $name = File::Spec->catfile( $dir, $filename );
if ( -r $name ) {
$filename = $name;
last;
}
else {
if ( -r $name . '.json' ) {
$filename = $name . '.json';
last;
}
}
}
}
( run in 1.566 second using v1.01-cache-2.11-cpan-39bf76dae61 )