File Coverage

blib/lib/Mojolicious/Plugin/DirectoryQueue.pm
Criterion Covered Total %
statement 1 3 33.3
branch n/a
condition n/a
subroutine 1 1 100.0
pod n/a
total 2 4 50.0


line stmt bran cond sub pod time code
1             package Mojolicious::Plugin::DirectoryQueue;
2              
3 1     1   57279 use Mojo::Base 'Mojolicious::Plugin';
  0            
  0            
4             use Mojo::JSON qw(decode_json encode_json);
5             use Directory::Queue;
6             use POSIX qw(chown);
7              
8             our $VERSION = '0.01';
9              
10              
11             sub register {
12             my ($plugin, $app, $args) = @_;
13              
14             $args->{path} ||= '/tmp/DirQueue';
15             my $dirq = Directory::Queue->new( path => $args->{path} );
16              
17             my $config = $app->config;
18             if ( $config->{hypnotoad} and $config->{hypnotoad}->{user} ) {
19             my ($uid,$gid) = ( getpwnam($config->{hypnotoad}->{user}) )[2,3];
20             chown $uid, $gid, $args->{path};
21             }
22              
23             $app->helper(
24             enqueue => sub {
25             my ($self, $args) = @_;
26             $dirq->add(encode_json($args));
27             },
28             );
29              
30             $app->helper(
31             dequeue => sub {
32             for (my $name = $dirq->first(); $name; $name = $dirq->next()) {
33             next unless $dirq->lock($name);
34             my $data = $dirq->get($name);
35             $dirq->remove($name);
36             return decode_json($data) if $data;
37             }
38             return;
39             },
40             );
41              
42             $app->helper(
43             show => sub {
44             my @all;
45             for (my $name = $dirq->first(); $name; $name = $dirq->next()) {
46             next unless $dirq->lock($name);
47             my $data = $dirq->get($name);
48             push @all, decode_json($data) if $data;
49             $dirq->unlock($name);
50             }
51             return \@all;
52             },
53             );
54              
55             $app->helper(
56             count => sub {
57             return $dirq->count();
58             },
59             );
60             $app->helper(
61             purge => sub {
62             my $self = shift;
63             return $dirq->purge(@_);
64             },
65             );
66             };
67              
68             1;
69             __END__