Queue-Q4M

 view release on metacpan or  search on metacpan

misc/lib/Queue/Q4M/Benchmark.pm  view on Meta::CPAN

# $Id: /mirror/coderepos/lang/perl/Queue-Q4M/trunk/misc/lib/Queue/Q4M/Benchmark.pm 65253 2008-07-08T02:20:49.109770Z daisuke  $

package Queue::Q4M::Benchmark;
use Moose;
use Moose::Util::TypeConstraints;

use Benchmark ();
use DBI;
use Queue::Q4M;

with 'MooseX::Getopt';

has 'dsn' => (
    is => 'rw',
    isa => 'Str',
    required => 1,
    trigger => sub { $_[0]->connect_info->[0] = $_[1] }
);

has 'username' => (
    is => 'rw',
    isa => 'Str',
    required => 1,
    default => sub { (getpwuid($>))[0] },
    trigger => sub { $_[0]->connect_info->[1] = $_[1] }
);

has 'password' => (
    is => 'rw',
    isa => 'Str',
    trigger => sub { $_[0]->connect_info->[2] = $_[1] }
);

has '__connect_info' => (
    accessor => 'connect_info',
    is => 'rw',
    isa => 'ArrayRef',
    auto_deref => 1,
    default => sub { +[ undef, undef, undef, { RaiseError => 1 } ] },
);

has '__dbh' => (
    accessor => 'dbh',
    is => 'rw',
    isa => 'Maybe[DBI::db]',
);

around 'dbh' => sub {
    my ($next, $self, @args) = @_;
    my $rv = $next->($self, @args);
    if (! @args) {
        if (! defined $rv || ! $rv->ping) {
            $rv = DBI->connect( $self->connect_info );
            $self->dbh($rv);
        }
    }
    return $rv;
};

role_type 'Queue::Q4M::Benchmark::Plugin';
subtype 'PluginList'
    => as 'ArrayRef[Queue::Q4M::Benchmark::Plugin]';
coerce 'PluginList'
    => from 'ArrayRef'
        => via {
            my @list;
            foreach my $class (@$_) {
                if ($class !~ s/^\+//) {
                    $class = "Queue::Q4M::Benchmark::Plugin::" . ucfirst $class;
                }
                Class::MOP::load_class($class);
                push @list, $class->new;
            }
            \@list;
        }
;

has 'plugins' => (
    is => 'rw',
    isa => 'PluginList',
    auto_deref => 1,
    coerce => 1,
    default => sub { +[] }
);



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