Config-Reload
view release on metacpan or search on metacpan
lib/Config/Reload.pm view on Meta::CPAN
package Config::Reload;
{
$Config::Reload::VERSION = '0.21';
}
#ABSTRACT: Load config files, reload when files changed.
use v5.10;
use strict;
use Config::ZOMG '1.000000';
use Moo;
use Sub::Quote 'quote_sub';
use Digest::MD5 qw(md5_hex);
use Try::Tiny;
use parent 'Exporter';
our @EXPORT_OK = qw(files_hash);
has wait => (
is => 'rw',
default => quote_sub q{ 60 },
);
has checked => ( is => 'rw' );
has loaded => ( is => 'rw' );
has error => ( is => 'rw' );
has _md5 => ( is => 'rw' ); # caches $self->md5($self->found)
has _zomg => ( is => 'rw', handles => [qw(find found)] );
has _config => ( is => 'rw' );
sub BUILD {
my ($self, $given) = @_;
# don't pass to Config::ZOMG
delete $given->{$_} for qw(wait error checked);
$self->_zomg( Config::ZOMG->new($given) );
}
sub load {
my $self = shift;
my $zomg = $self->_zomg;
if ($self->_config) {
if (time < $self->checked + $self->wait) {
return $self->_config;
}
if ($self->_md5 eq files_hash( $zomg->find )) {
$self->checked(time);
return $self->_config;
} else {
$self->_config(undef);
}
}
$self->checked(time);
try {
$self->error(undef);
$self->_config( $zomg->reload ); # may die on error
$self->loaded(time);
$self->_md5( files_hash( $self->found ) );
} catch {
$self->error($_);
$self->loaded(undef);
$self->_md5( files_hash() );
$self->_config( { } );
};
return $self->_config;
}
( run in 0.475 second using v1.01-cache-2.11-cpan-39bf76dae61 )