File Coverage

blib/lib/Web/API/Mock/Map.pm
Criterion Covered Total %
statement 37 37 100.0
branch 4 6 66.6
condition 5 9 55.5
subroutine 10 10 100.0
pod 0 4 0.0
total 56 66 84.8


line stmt bran cond sub pod time code
1             package Web::API::Mock::Map;
2 5     5   102 use 5.008005;
  5         20  
3 5     5   35 use strict;
  5         9  
  5         167  
4 5     5   26 use warnings;
  5         8  
  5         413  
5              
6             our $VERSION = "0.11";
7              
8 5     5   2992 use Web::API::Mock::Resource;
  5         18  
  5         226  
9 5     5   3017 use Router::Simple;
  5         23413  
  5         276  
10              
11             use Class::Accessor::Lite (
12 5         31 new => 1,
13             rw => [ qw/resources router/ ]
14 5     5   43 );
  5         26  
15              
16             sub init {
17 4     4 0 13 my ($self) = @_;
18              
19 4         21 $self->resources({});
20              
21 4         82 $self->add_resource( '/', Web::API::Mock::Resource->status_404);
22             }
23              
24              
25             sub add_resource {
26 20     20 0 363 my ($self, $url, $args) = @_;
27              
28 20 100       96 $self->router(Router::Simple->new()) unless $self->router;
29 20         268 my $path = sprintf("%s:%s", $args->{method}, $url);
30             $self->router->connect($path, {
31             url => $url,
32             method => $args->{method}
33 20         66 });
34              
35 20   66     2314 my $resource = $self->resources->{$url} || Web::API::Mock::Resource->new();
36             $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 20         479 });
43 20         150 $self->resources->{$url} = $resource;
44             }
45              
46             sub request {
47 21     21 0 40505 my ($self, $method, $url) = @_;
48              
49 21         63 my $path = sprintf("%s:%s", $method, $url);
50 21         79 my $match = $self->router->match($path);
51              
52 21 50 66     2539 if ($match && $match->{method} && $match->{url}) {
      33        
53 16         145 my $resource = $self->resources->{$match->{url}};
54 16 50       154 return $resource->response($method) if $resource;
55             }
56              
57 5         30 return;
58             }
59              
60             sub url_list {
61 6     6 0 8169 my ($self) = @_;
62 6         12 return [keys %{$self->resources}];
  6         23  
63             }
64              
65             1;