File Coverage

blib/lib/Web/API/Mock/Map.pm
Criterion Covered Total %
statement 38 38 100.0
branch 4 6 66.6
condition 6 9 66.6
subroutine 10 10 100.0
pod 0 4 0.0
total 58 67 86.5


line stmt bran cond sub pod time code
1             package Web::API::Mock::Map;
2 5     5   99 use 5.008005;
  5         16  
  5         201  
3 5     5   21 use strict;
  5         9  
  5         161  
4 5     5   24 use warnings;
  5         9  
  5         248  
5              
6             our $VERSION = "0.01";
7              
8 5     5   2151 use Web::API::Mock::Resource;
  5         11  
  5         147  
9 5     5   2916 use Router::Simple;
  5         17996  
  5         234  
10              
11             use Class::Accessor::Lite (
12 5         22 new => 1,
13             rw => [ qw/resources router/ ]
14 5     5   40 );
  5         7  
15              
16             sub init {
17 4     4 0 8 my ($self) = @_;
18              
19 4         19 $self->resources({});
20              
21 4         63 $self->add_resource( '/', Web::API::Mock::Resource->status_404);
22             }
23              
24              
25             sub add_resource {
26 20     20 0 272 my ($self, $url, $args) = @_;
27              
28 20 100       52 $self->router(Router::Simple->new()) unless $self->router;
29 20         222 my $path = sprintf("%s:%s", $args->{method}, $url);
30 20         56 $self->router->connect($path, {
31             url => $url,
32             method => $args->{method}
33             });
34              
35 20   66     1693 my $resource = $self->resources->{$url} || Web::API::Mock::Resource->new();
36 20         430 $resource->add({
37             status => $args->{status},
38             content_type => $args->{content_type},
39             method => $args->{method},
40             header => $args->{header},
41             body => $args->{body}
42             });
43 20         174 $self->resources->{$url} = $resource;
44             }
45              
46             sub request {
47 21     21 0 27846 my ($self, $method, $url) = @_;
48              
49 21         115 my $path = sprintf("%s:%s", $method, $url);
50 21         75 my $match = $self->router->match($path);
51              
52 21 50 66     1995 if ($match && $match->{method} && $match->{url}) {
      66        
53 16         58 my $resource = $self->resources->{$match->{url}};
54 16 50       155 return $resource->response($method) if $resource;
55             }
56              
57 5         16 return;
58             }
59              
60             sub url_list {
61 6     6 0 4240 my ($self) = @_;
62 6         9 return [keys %{$self->resources}];
  6         25  
63             }
64              
65             1;