File Coverage

blib/lib/App/mojopaste/Backend/Mongo.pm
Criterion Covered Total %
statement 11 35 31.4
branch 0 8 0.0
condition 0 6 0.0
subroutine 4 11 36.3
pod 1 1 100.0
total 16 61 26.2


line stmt bran cond sub pod time code
1             package App::mojopaste::Backend::Mongo;
2              
3 1     1   69109 use strict;
  1         10  
  1         29  
4 1     1   28 use 5.008_005;
  1         3  
5             our $VERSION = '0.03';
6              
7 1     1   561 use Mojo::Base 'Mojolicious::Plugin';
  1         190133  
  1         7  
8 1     1   1426 use Mojo::Promise;
  1         172653  
  1         8  
9              
10             my $ID = 0;
11              
12             sub register {
13 0     0 1   my ($self, $app, $config) = @_;
14              
15 0   0       my $mongo_uri = $ENV{MONGO_URI} || 'mongodb://mongo:27017/paste';
16 0           $app->plugin( 'Mango', {
17             mango => $mongo_uri,
18             helper => 'db',
19             default_db => 'mojopaste',
20             });
21              
22 0     0     $app->helper('paste.load_p' => sub { _load_p(@_) });
  0            
23 0     0     $app->helper('paste.save_p' => sub { _save_p(@_) });
  0            
24             }
25              
26             sub _load_p {
27 0     0     my ($c, $id) = @_;
28              
29             eval {
30              
31 0           my $promise = Mojo::Promise->new;
32             $c->collection('docs')->find_one({id => $id}, { _id => 0 } => sub {
33 0     0     my ($collection, $err, $doc) = @_;
34              
35 0 0         return $err ? $promise->reject($err) : $promise->resolve($doc->{body});
36 0           });
37              
38 0           return $promise;
39 0 0         } or do {
40 0   0       return Mojo::Promise->new->reject($@ || 'Paste not found');
41             };
42             }
43              
44             sub _save_p {
45 0     0     my ($c, $text) = @_;
46 0           my $id = substr Mojo::Util::md5_sum($$ . time . $ID++), 0, 12;
47              
48             eval {
49 0           my $promise = Mojo::Promise->new;
50             $c->collection('docs')->insert({ id => $id, body => $text } => sub {
51 0     0     my ($collection, $err, $oid) = @_;
52              
53 0 0         return $err ? $promise->reject( $err ) : $promise->resolve( $id );
54 0           });
55              
56 0           return $promise;
57 0 0         } or do {
58 0   0       return Mojo::Promise->new->reject($@ || 'Unknown error');
59             };
60             }
61              
62             1;
63             __END__