File Coverage

blib/lib/PayProp/API/Public/Client/Authorization/Storage/Memcached.pm
Criterion Covered Total %
statement 31 43 72.0
branch 1 2 50.0
condition 1 2 50.0
subroutine 9 16 56.2
pod n/a
total 42 63 66.6


line stmt bran cond sub pod time code
1             package PayProp::API::Public::Client::Authorization::Storage::Memcached;
2              
3 1     1   310639 use strict;
  1         2  
  1         32  
4 1     1   4 use warnings;
  1         2  
  1         48  
5              
6 1     1   421 use Mouse;
  1         24727  
  1         4  
7             with qw/ PayProp::API::Public::Client::Role::Storage /;
8              
9 1     1   888 use Mojo::Promise;
  1         330589  
  1         8  
10 1     1   1152 use Cache::Memcached;
  1         28309  
  1         711  
11              
12             has servers => (
13             is => 'ro',
14             isa => 'ArrayRef[Str]',
15             required => 1,
16             );
17              
18             has Memcached => (
19             is => 'ro',
20             isa => 'Cache::Memcached',
21             lazy => 1,
22             default => sub { Cache::Memcached->new( servers => shift->servers ) },
23             );
24              
25             sub _ping_p {
26 2     2   8355 my ( $self ) = @_;
27              
28 2         6 my ( $ping_key, $ping_value ) = ( __PACKAGE__ . '::ping', 'pong' );
29              
30             return Mojo::Promise->new(
31             sub {
32 2     2   116 my( $resolve, $reject ) = @_;
33              
34 2         4 my $value;
35 2         5 eval {
36 2         6 $value = $self->_get( $ping_key );
37 1         4 $self->_set( $ping_key, $ping_value );
38             };
39              
40 2 50 50     41105 return ( $value // '' ) eq $ping_value
41             ? $resolve->( $ping_value )
42             : $reject->('ping failed')
43             ;
44             }
45 2         21 );
46             }
47              
48             sub _set_p {
49 0     0   0 my ( $self, $key, $value ) = @_;
50              
51             return $self
52             ->_ping_p
53 0     0   0 ->then( sub { $self->_set( $key, $value ) } )
54 0         0 ;
55             }
56              
57             sub _get_p {
58 0     0   0 my ( $self, $key ) = @_;
59              
60             return $self
61             ->_ping_p
62 0     0   0 ->then( sub { $self->_get( $key ) } )
63 0         0 ;
64             }
65              
66             sub _delete_p {
67 0     0   0 my ( $self, $key ) = @_;
68              
69             return $self
70             ->_ping_p
71 0     0   0 ->then( sub { $self->_delete( $key ) } )
72 0         0 ;
73             }
74              
75             sub _set {
76 1     1   4 my ( $self, $key, $value ) = @_;
77              
78 1         12 $self->Memcached->set(
79             $self->cache_prefix . $key,
80             $value,
81             $self->cache_ttl_in_seconds
82             );
83              
84 1         36 return 1;
85             }
86              
87             sub _get {
88 2     2   4 my ( $self, $key ) = @_;
89              
90 2         19 my $value;
91 2         14 $value = $self->Memcached->get( $self->cache_prefix . $key );
92              
93 1         392 return $value;
94             }
95              
96             sub _delete {
97 0     0     my ( $self, $key ) = @_;
98              
99 0           $self->Memcached->delete( $self->cache_prefix . $key );
100              
101 0           return 1;
102             }
103              
104             __PACKAGE__->meta->make_immutable;
105              
106              
107             __END__