File Coverage

blib/lib/Dancer2/Plugin/Queue.pm
Criterion Covered Total %
statement 15 31 48.3
branch 0 18 0.0
condition 0 8 0.0
subroutine 5 6 83.3
pod n/a
total 20 63 31.7


line stmt bran cond sub pod time code
1 2     2   64 use 5.008001;
  2         14  
  2         74  
2 2     2   12 use strict;
  2         4  
  2         74  
3 2     2   12 use warnings;
  2         2  
  2         116  
4              
5             package Dancer2::Plugin::Queue;
6             # ABSTRACT: Dancer2 plugin for message queue abstractions
7             our $VERSION = '0.004'; # VERSION
8              
9 2     2   1716 use Dancer2::Plugin;
  2         5818  
  2         20  
10 2     2   898 use Class::Load qw/try_load_class/;
  2         4  
  2         1072  
11              
12             my %queues;
13             my $conf;
14              
15             register queue => sub {
16 0     0     my ( $dsl, $name ) = plugin_args(@_);
17 0   0       $conf ||= plugin_setting();
18              
19             # if name not specified, DWIM or use 'default'
20 0 0         if ( not defined $name ) {
21 0 0         if ( keys %$conf == 1 ) {
    0          
22 0           ($name) = keys %$conf;
23             }
24             elsif ( exists $conf->{default} ) {
25 0           $name = "default";
26             }
27             else {
28 0           die "Can't determine a default queue name";
29             }
30             }
31              
32             # return cached object if already created
33 0 0         return $queues{$name} if defined $queues{$name};
34              
35             # otherwise, instantiate the object from config settings
36 0 0         my $queue_conf = $conf->{$name}
37             or die "No configuration for queue '$name'";
38              
39 0 0         my $class = $queue_conf->{class}
40             or die "No class specified for queue '$name'";
41              
42 0           $class = "Dancer2::Plugin::Queue::$class";
43              
44 0 0         try_load_class($class)
45             or die "Queue class '$class' could not be loaded";
46              
47 0 0 0       $class->can('DOES') && $class->DOES("Dancer2::Plugin::Queue::Role::Queue")
48             or die "Queue class '$class' does not implement the expected role";
49              
50 0 0 0       my $object = eval { $class->new( $queue_conf->{options} || {} ) }
  0            
51             or die "Could not create $class object: $@";
52              
53 0           return $queues{$name} = $object;
54             };
55              
56             register_plugin for_versions => [2];
57             1;
58              
59              
60             # vim: ts=4 sts=4 sw=4 et:
61              
62             __END__