File Coverage

lib/Spoon/Cookie.pm
Criterion Covered Total %
statement 25 43 58.1
branch 6 10 60.0
condition 1 4 25.0
subroutine 6 9 66.6
pod 1 5 20.0
total 39 71 54.9


line stmt bran cond sub pod time code
1             package Spoon::Cookie;
2 2     2   89551 use Spoon::Base -Base;
  2         6  
  2         30  
3 2     2   1813 use CGI;
  2     2   5  
  2     2   81  
  2         15  
  2         8  
  2         62  
  2         2115  
  2         41144  
  2         17  
4              
5             field 'preferences';
6             field 'jar' => {};
7             field 'jar_opt' => {};
8             const expires => '+5y';
9             const path => '/';
10             const prefix => 'Spoon-';
11             const domain => '';
12              
13 0     0 1 0 sub init {
14 0         0 $self->fetch();
15             }
16              
17 2     2 0 751 sub write {
18 2         6 my ($cookie_name, $hash, $opt) = @_;
19 2         3477 require Storable;
20 2         6702 $self->jar->{$cookie_name} = $hash;
21 2 100       59 $self->jar_opt->{$cookie_name} = $opt if $opt;
22             }
23              
24 0     0 0 0 sub read {
25 0         0 my $cookie_name = shift;
26 0         0 my $jar = $self->jar;
27 0         0 my $cookie = $jar->{$cookie_name};
28 0   0     0 $cookie ||= {};
29 0         0 return $cookie;
30             }
31              
32 2     2 0 18 sub set_cookie_headers {
33 2         43 my $jar = $self->jar;
34 2 50       18 return () unless keys %$jar;
35 2         5 my $cookies = [];
36 2 100       279 @$cookies = map {
37 2         7 CGI::cookie(
38             -name => $self->prefix . $_,
39             -value => Storable::freeze($jar->{$_} || {}),
40             -path => $self->path,
41             -expires => $self->expires,
42             -domain => $self->domain,
43 2   50     13 %{$self->jar_opt->{$_} || {}},
44             );
45             } keys %$jar;
46 2 50       25003 return @$cookies ? (-cookie => $cookies) : ();
47             }
48              
49 0     0 0   sub fetch {
50 0           require Storable;
51 0           my $prefix = $self->prefix;
52 0           my $jar = {
53             map {
54 0           (my $key = $_) =~ s/^\Q$prefix\E//;
55 0           my $object = eval { Storable::thaw(CGI::cookie($_)) };
  0            
56 0 0         $@ ? () : ($key => $object)
57             }
58 0           grep { /^\Q$prefix\E/ } CGI::cookie()
59             };
60 0           $self->jar($jar);
61             }
62              
63             __END__