Class-Usul

 view release on metacpan or  search on metacpan

lib/Class/Usul.pm  view on Meta::CPAN

package Class::Usul;

use 5.010001;
use namespace::autoclean;
use version; our $VERSION = qv( sprintf '0.84.%d', q$Rev: 1 $ =~ /\d+/gmx );

use Class::Usul::Constants  qw( FALSE TRUE );
use Class::Usul::Functions  qw( data_dumper ns_environment );
use Class::Usul::Types      qw( Bool ConfigProvider HashRef
                                Localiser LoadableClass Locker Logger );
use Moo;

# Attribute constructors
my $_build_debug = sub {
   return !!ns_environment( $_[ 0 ]->config->appclass, 'debug' ) ? TRUE : FALSE;
};

# Public attributes
has 'config'       => is => 'lazy', isa => ConfigProvider,
   builder         => sub { $_[ 0 ]->config_class->new( $_[ 0 ]->_config_attr)},
   init_arg        => undef;

has '_config_attr' => is => 'ro',   isa => HashRef, builder => sub { {} },
   init_arg        => 'config';

has 'config_class' => is => 'ro',   isa => LoadableClass, coerce => TRUE,
   default         => 'Class::Usul::Config';

has 'debug'        => is => 'lazy', isa => Bool, builder => $_build_debug;

has 'l10n'         => is => 'lazy', isa => Localiser,
   builder         => sub { $_[ 0 ]->l10n_class->new( builder => $_[ 0 ] ) },
   handles         => [ 'loc', 'localize' ];

has 'l10n_class'   => is => 'lazy', isa => LoadableClass, coerce => TRUE,
   default         => 'Class::Usul::L10N';

has 'lock'         => is => 'lazy', isa => Locker,
   builder         => sub { $_[ 0 ]->lock_class->new( builder => $_[ 0 ] ) };

has 'lock_class'   => is => 'lazy', isa => LoadableClass, coerce => TRUE,
   default         => 'IPC::SRLock';

has 'log'          => is => 'lazy', isa => Logger,
   builder         => sub { $_[ 0 ]->log_class->new( builder => $_[ 0 ] ) };

has 'log_class'    => is => 'lazy', isa => LoadableClass, coerce => TRUE,
   default         => 'Class::Usul::Log';

# Public methods
sub dumper { # Damm handy for development
   my $self = shift; return data_dumper( @_ );
}

1;

__END__

=pod

=encoding utf-8

=begin html

<a href="https://travis-ci.org/pjfl/p5-class-usul"><img src="https://travis-ci.org/pjfl/p5-class-usul.svg?branch=master" alt="Travis CI Badge"></a>
<a href="http://badge.fury.io/pl/Class-Usul"><img src="https://badge.fury.io/pl/Class-Usul.svg" alt="CPAN Badge"></a>
<a href="http://cpants.cpanauthors.org/dist/Class-Usul"><img src="http://cpants.cpanauthors.org/dist/Class-Usul.png" alt="Kwalitee Badge"></a>

=end html

=head1 Name

Class::Usul - A base class providing config, locking, logging, and l10n

=head1 Version

Describes Class::Usul version v0.84.$Rev: 1 $

=head1 Synopsis

   use Class::Usul;
   use Class::Usul::Constants qw( FALSE );
   use Class::Usul::Functions qw( find_apphome get_cfgfiles );



( run in 0.768 second using v1.01-cache-2.11-cpan-39bf76dae61 )