File Coverage

lib/Mojolicious/Plugin/UserMessages/Queue.pm
Criterion Covered Total %
statement 48 64 75.0
branch 11 26 42.3
condition 1 3 33.3
subroutine 8 9 88.8
pod 0 5 0.0
total 68 107 63.5


line stmt bran cond sub pod time code
1             package Mojolicious::Plugin::UserMessages::Queue;
2             {
3             $Mojolicious::Plugin::UserMessages::Queue::VERSION = '0.511';
4             }
5              
6 2     2   47 use Carp;
  2         5  
  2         241  
7 2     2   13 use strict;
  2         5  
  2         744  
8              
9 2     2   1030 use Mojolicious::Plugin::UserMessages::Message;
  2         6  
  2         1741  
10              
11             our $AUTOLOAD;
12              
13             sub new {
14 8     8 0 18 my ( $class, $app ) = @_;
15 8         89 return bless({'app'=>$app}, $class);
16             }
17              
18             sub AUTOLOAD {
19 0     0   0 my $s = shift;
20              
21 0         0 my $method = $AUTOLOAD;
22 0         0 $method =~ s/.*://; # strip fully-qualified portion
23              
24 0 0       0 return if $method eq 'DESTROY';
25              
26 0 0       0 if ( $method =~ /^get_(.+)$/i ) {
27 0         0 my $type = lc( $1 );
28 0         0 return $s->get( $type );
29             }
30 0 0       0 if ( $method =~ /^has_(.+)_messages$/i ) {
31 0         0 my $type = lc( $1 );
32 0         0 return $s->has_messages_in_queue( $type );
33             }
34              
35 0         0 croak "Unkown method $method\n";
36             }
37              
38              
39             sub add {
40 3     3 0 1773 my $self = shift;
41 3         8 my $type = shift;
42 3         7 my $message = shift;
43 3         7 my %args = @_;
44              
45 3         7 my $c = $self->{'app'};
46              
47 3 100       17 if ( !$c->session->{'__ui_message_queue'} ) {
48 1         29 $c->session->{'__ui_message_queue'} = [];
49             }
50              
51 3 50       66 return 0 if !$message;
52 3 50       9 return 0 if !$type;
53              
54 3         19 my $msg = {
55             'type' => $type,
56             'args' => \%args,
57             'message' => $message,
58             };
59              
60 3         5 push @{ $c->session->{'__ui_message_queue'} }, $msg;
  3         10  
61              
62 3         242 return 1;
63             }
64              
65             sub get {
66 2     2 0 4 my $self = shift;
67 2         3 my $type = shift;
68              
69 2         5 my $c = $self->{'app'};
70              
71 2 50       7 if ( !$c->session->{'__ui_message_queue'} ) {
72 0         0 return [];
73             }
74              
75 2         38 my @to_return = ();
76 2         38 my @to_keep = ();
77              
78 2         5 for my $m ( @{ $c->session->{'__ui_message_queue'} } ) {
  2         7  
79 3 50 33     75 if ( !$type || $type eq $m->type ) {
80 3         36 push @to_return,
81             Mojolicious::Plugin::UserMessages::Message->new(%$m);
82 3         11 next;
83             }
84 0         0 push @to_keep, $m;
85             }
86              
87 2         9 $c->session->{'__ui_message_queue'} = \@to_keep;
88              
89 2 50       37 return wantarray ? @to_return : \@to_return;
90             }
91              
92             sub has_messages {
93 3     3 0 9 my $self = shift;
94              
95 3         110 return $self->has_messages_in_queue();
96             }
97              
98             sub has_messages_in_queue {
99 3     3 0 7 my $self = shift;
100 3         4 my $type = shift;
101              
102 3         13 my $c = $self->{'app'};
103 3 100       17 if ( !$c->session->{'__ui_message_queue'} ) {
104 1         141 return 0;
105             }
106              
107 2         37 my @messages = @{ $c->session->{'__ui_message_queue'} };
  2         7  
108 2 50       30 if ( !$type ) {
109 2 50       12 return scalar( @messages ) ? 1 : 0;
110             }
111              
112 0           for my $m ( @messages ) {
113 0 0         return 1 if ( $type eq $m->{'type'} );
114             }
115              
116 0           return 0;
117             }
118              
119             1;