aboutsummaryrefslogtreecommitdiffstats
path: root/perllib/Open311.pm
diff options
context:
space:
mode:
authorStruan Donald <struan@exo.org.uk>2011-08-02 16:38:35 +0100
committerStruan Donald <struan@exo.org.uk>2011-08-02 16:38:35 +0100
commit149412d1d4f680a5b7186814db0f1886157bb2d0 (patch)
tree53bdfb5d1792ff0bf002bc0482b5ccd2a23ae33d /perllib/Open311.pm
parent8ac0fceb6c34a626d97eab2a667a18550204aef8 (diff)
add simple open311 test, add some error checking and reduce repeated code
Diffstat (limited to 'perllib/Open311.pm')
-rw-r--r--perllib/Open311.pm59
1 files changed, 43 insertions, 16 deletions
diff --git a/perllib/Open311.pm b/perllib/Open311.pm
index 12f3c2433..86a2c58fd 100644
--- a/perllib/Open311.pm
+++ b/perllib/Open311.pm
@@ -15,10 +15,8 @@ sub get_service_list {
my $self = shift;
my $service_list_xml = $self->_get( 'services.xml' );
- my $xml = XML::Simple->new();
- my $obj = $xml->XMLin( $service_list_xml );
- return $obj;
+ return $self->_get_xml_object( $service_list_xml );
}
sub get_service_meta_info {
@@ -70,14 +68,15 @@ EOT
my $response = $self->_post( 'requests.xml', $params );
if ( $response ) {
- my $xml = XML::Simple->new();
- my $obj = $xml->XMLin( $response );
-
- if ( $obj->{ request }->{ service_request_id } ) {
- return $obj->{ request }->{ service_request_id };
- } else {
- my $token = $obj->{ request }->{ token };
- return $self->get_service_request_id_from_token( $token );
+ my $obj = $self->_get_xml_object( $response );
+
+ if ( $obj ) {
+ if ( $obj->{ request }->{ service_request_id } ) {
+ return $obj->{ request }->{ service_request_id };
+ } else {
+ my $token = $obj->{ request }->{ token };
+ return $self->get_service_request_id_from_token( $token );
+ }
}
}
}
@@ -94,10 +93,9 @@ sub get_service_request_id_from_token {
my $service_token_xml = $self->_get( "tokens/$token.xml" );
- my $xml = XML::Simple->new();
- my $obj = $xml->XMLin( $service_token_xml );
+ my $obj = $self->_get_xml_object( $service_token_xml );
- if ( $obj->{ request }->{ service_request_id } ) {
+ if ( $obj && $obj->{ request }->{ service_request_id } ) {
return $obj->{ request }->{ service_request_id };
} else {
return 0;
@@ -126,7 +124,6 @@ sub _post {
my $uri = URI->new( $self->endpoint );
$uri->path( $uri->path . $path );
- use Data::Dumper;
my $req = POST $uri->as_string,
[
jurisdiction_id => $self->jurisdiction,
@@ -141,8 +138,38 @@ sub _post {
return $res->decoded_content;
} else {
warn "request failed: " . $res->status_line;
- warn $res->decoded_content;
+ warn $self->_process_error( $res->decoded_content );
return 0;
}
}
+
+sub _process_error {
+ my $self = shift;
+ my $error = shift;
+
+ my $obj = $self->_get_xml_object( $error );
+
+ my $msg = '';
+ if ( ref $obj && exists $obj->{error} ) {
+ my $errors = $obj->{error};
+ $errors = [ $errors ] if ref $errors ne 'ARRAY';
+ $msg .= sprintf( "%s: %s\n", $_->{code}, $_->{description} ) for @{ $errors };
+ }
+
+ return $msg || 'unknown error';
+}
+
+sub _get_xml_object {
+ my $self = shift;
+ my $xml= shift;
+
+ my $simple = XML::Simple->new();
+ my $obj;
+
+ eval {
+ $obj = $simple ->XMLin( $xml );
+ };
+
+ return $obj;
+}
1;