File Coverage

blib/lib/Raisin/Request.pm
Criterion Covered Total %
statement 29 29 100.0
branch 13 14 92.8
condition 3 3 100.0
subroutine 6 6 100.0
pod 3 3 100.0
total 54 55 98.1


line stmt bran cond sub pod time code
1             #!perl
2             #PODNAME: Raisin::Request
3             #ABSTRACT: Request class for Raisin.
4              
5 12     12   90 use strict;
  12         39  
  12         382  
6 12     12   68 use warnings;
  12         23  
  12         615  
7              
8             package Raisin::Request;
9             $Raisin::Request::VERSION = '0.93';
10 12     12   70 use parent 'Plack::Request';
  12         25  
  12         81  
11              
12             sub prepare_params {
13 39     39 1 374 my ($self, $declared, $named) = @_;
14              
15 39         90 $self->{'raisin.declared'} = $declared;
16              
17             # PRECEDENCE:
18             # - path
19             # - query
20             # - body
21             my %params = (
22 39 100       119 %{ $self->env->{'raisinx.body_params'} || {} },
23 39 50       372 %{ $self->query_parameters->as_hashref_mixed || {} },
24 39 100       67 %{ $named || {} },
  39         3405  
25             );
26              
27 39         134 $self->{'raisin.parameters'} = \%params;
28              
29 39         70 my $retval = 1;
30              
31 39         81 foreach my $p (@$declared) {
32 63         236 my $name = $p->name;
33 63         271 my $value = $params{$name};
34              
35 63 100       173 if (not $p->validate(\$value)) {
36 3         6 $retval = 0;
37 3 100       9 $p->required ? return : next;
38             }
39              
40 60 100 100     153 $value //= $p->default if defined $p->default;
41 60 100       408 next if not defined($value);
42              
43 52         159 $self->{'raisin.declared_params'}{$name} = $value;
44             }
45              
46 37         168 $retval;
47             }
48              
49 33     33 1 173 sub declared_params { shift->{'raisin.declared_params'} }
50 4     4 1 33 sub raisin_parameters { shift->{'raisin.parameters'} }
51              
52             1;
53              
54             __END__