File Coverage

blib/lib/Catmandu/AlephX/Response.pm
Criterion Covered Total %
statement 15 23 65.2
branch n/a
condition n/a
subroutine 5 8 62.5
pod 2 3 66.6
total 22 34 64.7


line stmt bran cond sub pod time code
1             package Catmandu::AlephX::Response;
2 24     24   122482 use Catmandu::Sane;
  24         200237  
  24         158  
3 24     24   4486 use Moo::Role;
  24         67  
  24         165  
4 24     24   9148 use Catmandu::Util qw(:is :check);
  24         77  
  24         10365  
5 24     24   11820 use Catmandu::AlephX::XPath::Helper qw(:all);
  24         72  
  24         3021  
6 24     24   197 use Exporter qw(import);
  24         52  
  24         9161  
7             our @EXPORT_OK=qw(get_children xpath);
8             our %EXPORT_TAGS = (all=>[@EXPORT_OK]);
9              
10             our $VERSION = "1.073";
11              
12             =head1 NAME
13              
14             Catmandu::AlephX::Response - base class for xml-responses from the AlephX-server
15              
16             =head1 SYNOPSIS
17              
18             All responses from the AlephX-server share the same functionality and keys:
19             - expressed in XML
20             - name of the parent element is equal to the parameter 'op', except when
21             the value in 'op' is not recognized. Then it is set to 'login'.
22             - when an internal error occurred, the error is reported in the key 'error'
23             - session-id is reported in the key 'session-id'
24             - al the other subkeys are be treated as 'data'
25              
26             All public methods from Catmandu::AlephX return an object of a subclass of Catmandu::AlepX::Response.
27             In case of connection errors, or xml parsing problems, exceptions are thrown.
28              
29             =head1 methods
30              
31             =head2 op
32              
33             type of 'op'.
34              
35             =head2 error
36              
37             internal error that was reported in the xml response.
38             These errors only apply to values in your parameters.
39             Other errors, like connection errors or problems while parsing the xml response are thrown as exceptions.
40              
41             =head2 session_id
42              
43             session-id of the current request
44              
45             =head2 is_success
46              
47             This method only checks if there was an internal error in the AlephX-response.
48             So it simply tests if the key 'error' was undefined.
49              
50             As said before, other errors are thrown as exceptions
51              
52             =cut
53              
54             requires qw(op parse);
55             has errors => (
56             is => 'rw',
57             isa => sub { check_array_ref($_[0]); },
58             lazy => 1,
59             default => sub { []; }
60             );
61             #deprecated, use $self->errors
62             sub error {
63 0     0 1   warn "method 'error' is deprecated, and only return one error. Please use method 'errors' which gives you an array reference of all errors.";
64 0           $_[0]->errors()->[-1];
65             }
66             has session_id => (is => 'rw');
67             sub is_success {
68 0     0 1   return !scalar(@{$_[0]->errors()});
  0            
69             }
70             has content_ref => (
71             is => 'rw'
72             );
73             sub parse_errors {
74 0     0 0   my($self,$xpath)=@_;
75 0           my $op = $self->op();
76 0           [map { $_->to_literal; } $xpath->find("/$op/error|/login/error|/$op/error-text-1|/$op/error-text-2")->get_nodelist()];
  0            
77             }
78              
79             1;