ASP4
view release on metacpan - search on metacpan
view release on metacpan or search on metacpan
lib/ASP4/ConfigLoader.pm view on Meta::CPAN
package ASP4::ConfigLoader;
use strict;
use warnings 'all';
use Carp 'confess';
use ASP4::ConfigFinder;
use ASP4::ConfigParser;
use JSON::XS;
our $Configs = { };
#==============================================================================
sub load
{
my ($s) = @_;
my $path = ASP4::ConfigFinder->config_path;
my $file_time = (stat($path))[7];
if( exists($Configs->{$path}) && ( $file_time <= $Configs->{$path}->{timestamp} ) )
{
return $Configs->{$path}->{data};
}# end if()
open my $ifh, '<', $path
or die "Cannot open '$path' for reading: $!";
local $/;
my $doc = decode_json( scalar(<$ifh>) );
close($ifh);
(my $where = $path) =~ s/\/conf\/[^\/]+$//;
$Configs->{$path} = {
data => ASP4::ConfigParser->new->parse( $doc, $where ),
timestamp => $file_time,
};
return $Configs->{$path}->{data};
}# end parse()
1;# return true:
__END__
=pod
=head1 NAME
ASP4::ConfigLoader - Universal access to the configuration.
=head1 SYNOPSIS
use ASP4::ConfigLoader;
my $Config = ASP4::ConfigLoader->load();
# $Config is a ASP4::Config object.
=head1 DESCRIPTION
This package solves the "How do I get my config?" problem most web applications
end up with at some point.
Config data is cached on a per-path basis. Paths are full - i.e. C</usr/local/projects/mysite.com/conf/asp4-config.json> -
so there should never be a clash between two different configurations on the
same web server, even if it is running multiple websites as VirtualHosts.
=head1 PUBLIC METHODS
=head2 load( )
view all matches for this distributionview release on metacpan - search on metacpan
( run in 1.210 second using v1.00-cache-2.02-grep-82fe00e-cpan-eb20b53101e )