Ambrosia

 view release on metacpan or  search on metacpan

lib/Ambrosia/Config.pm  view on Meta::CPAN

package Ambrosia::Config;
use strict;
use warnings;

use Data::Dumper;
use base qw/Exporter/;

use Ambrosia::error::Exceptions;
use Ambrosia::core::ClassFactory;

our $VERSION = 0.010;

our @EXPORT = qw/config/;

our %PROCESS_MAP = ();
our %CONFIGS = ();

sub import
{
    my $pkg = shift;
    my %prm = @_;
    assign($prm{assign}) if $prm{assign};

    __PACKAGE__->export_to_level(1, @EXPORT);
}

sub assign
{
    $PROCESS_MAP{$$} = shift;
}

sub new
{
    throw Ambrosia::error::Exception::BadUsage 'Cannot create object Config';
}

sub instance
{
    my $package = shift;
    my $key = shift;
    my $_config_data = shift;

    if ( $_config_data )
    {#start instance
        if ( ref $_config_data eq 'HASH' )
        {
            $CONFIGS{$key}->{CONFIG_HASH} = 1; #$_config_data;
        }
        elsif(!ref $_config_data)
        {
            $CONFIGS{$key}->{CONFIG_FILE} = $_config_data;
            $CONFIGS{$key}->{LAST_ACCESS} = (stat $_config_data )[9];
        }
        else
        {
            throw Ambrosia::error::BadParams 'Bad config params: ' . $_config_data;
        }
    }
    elsif ( $CONFIGS{$key}->{CONFIG_FILE} )
    {#Если конфиг сформирован и дата последней модификации файла не менялась вернем объект config
        my $last_access = (stat $CONFIGS{$key}->{CONFIG_FILE} )[9];

        return $CONFIGS{$key}->{OBJECT}
            if  defined $CONFIGS{$key}->{OBJECT}
                && defined $CONFIGS{$key}->{LAST_ACCESS}



( run in 0.661 second using v1.01-cache-2.11-cpan-5a3173703d6 )