File Coverage

blib/lib/WebService/Hexonet/Connector/ResponseTemplateManager.pm
Criterion Covered Total %
statement 56 56 100.0
branch 4 4 100.0
condition 1 3 33.3
subroutine 14 14 100.0
pod 8 8 100.0
total 83 85 97.6


line stmt bran cond sub pod time code
1             package WebService::Hexonet::Connector::ResponseTemplateManager;
2              
3 1     1   18 use 5.026_000;
  1         3  
4 1     1   7 use strict;
  1         2  
  1         21  
5 1     1   5 use warnings;
  1         2  
  1         35  
6 1     1   7 use WebService::Hexonet::Connector::ResponseTemplate;
  1         2  
  1         36  
7 1     1   6 use WebService::Hexonet::Connector::ResponseParser;
  1         2  
  1         23  
8              
9 1     1   5 use version 0.9917; our $VERSION = version->declare('v2.9.1');
  1         15  
  1         6  
10              
11             my $instance = undef;
12              
13              
14             sub getInstance {
15 3 100   3 1 15 if ( !defined $instance ) {
16 1         3 my $self = { templates => {} };
17 1         3 $instance = bless $self, shift;
18 1         3 $instance->addTemplate( '404', $instance->generateTemplate( '421', 'Page not found' ) );
19 1         2 $instance->addTemplate( '500', $instance->generateTemplate( '500', 'Internal server error' ) );
20 1         3 $instance->addTemplate( 'empty', $instance->generateTemplate( '423', 'Empty API response. Probably unreachable API end point {CONNECTION_URL}' ) );
21 1         5 $instance->addTemplate( 'error', $instance->generateTemplate( '421', 'Command failed due to server error. Client should try again' ) );
22 1         2 $instance->addTemplate( 'expired', $instance->generateTemplate( '530', 'SESSION NOT FOUND' ) );
23 1         3 $instance->addTemplate( 'httperror', $instance->generateTemplate( '421', 'Command failed due to HTTP communication error' ) );
24 1         3 $instance->addTemplate( 'invalid', $instance->generateTemplate( '423', 'Invalid API response. Contact Support' ) );
25 1         2 $instance->addTemplate( 'unauthorized', $instance->generateTemplate( '530', 'Unauthorized' ) );
26             }
27 3         8 return $instance;
28             }
29              
30              
31             sub generateTemplate {
32 10     10 1 574 my ( $self, $code, $description ) = @_;
33 10         45 return "[RESPONSE]\r\nCODE=${code}\r\nDESCRIPTION=${description}\r\nEOF\r\n";
34             }
35              
36              
37             sub addTemplate {
38 10     10 1 22 my ( $self, $id, $plain ) = @_;
39 10         27 $self->{templates}->{$id} = $plain;
40 10         18 return $instance;
41             }
42              
43              
44             sub getTemplate {
45 35     35 1 14370 my ( $self, $id ) = @_;
46 35         69 my $plain;
47 35 100       97 if ( $self->hasTemplate($id) ) {
48 34         78 $plain = $self->{templates}->{$id};
49             } else {
50 1         4 $plain = $self->generateTemplate( '500', 'Response Template not found' );
51             }
52 35         152 return WebService::Hexonet::Connector::ResponseTemplate->new($plain);
53             }
54              
55              
56             sub getTemplates {
57 1     1 1 3 my $self = shift;
58 1         3 my $tmp = {};
59 1         3 my $tpls = $self->{templates};
60 1         2 foreach my $key ( keys %{$tpls} ) {
  1         6  
61 10         32 $tmp->{$key} = WebService::Hexonet::Connector::ResponseTemplate->new( $tpls->{$key} );
62             }
63 1         5 return $tmp;
64             }
65              
66              
67             sub hasTemplate {
68 35     35 1 74 my ( $self, $id ) = @_;
69 35         127 return defined $self->{templates}->{$id};
70             }
71              
72              
73             sub isTemplateMatchHash {
74 2     2 1 11 my ( $self, $tpl2, $id ) = @_;
75 2         7 my $tpl = $self->getTemplate($id);
76 2         7 my $h = $tpl->getHash();
77 2   33     20 return ( $h->{CODE} eq $tpl2->{CODE} ) && ( $h->{DESCRIPTION} eq $tpl2->{DESCRIPTION} );
78             }
79              
80              
81             sub isTemplateMatchPlain {
82 1     1 1 8 my ( $self, $plain, $id ) = @_;
83 1         5 my $h = WebService::Hexonet::Connector::ResponseParser::parse($plain);
84 1         3 return $self->isTemplateMatchHash( $h, $id );
85             }
86              
87             1;
88              
89             __END__