diff options
author | Daniel Friesel <derf@finalrewind.org> | 2014-12-07 10:35:17 +0100 |
---|---|---|
committer | Daniel Friesel <derf@finalrewind.org> | 2014-12-07 10:35:17 +0100 |
commit | 1470a71a80b3b3e1d38f812aac9451368dc90cac (patch) | |
tree | 6820d9a9876a6a788641d9037682b05b4bbf2737 | |
parent | 4d0a56bd35f2776d6edeef5935268aa1a663d968 (diff) |
Improve error messages, especially for ambiguous input values
-rwxr-xr-x | bin/efa | 23 | ||||
-rw-r--r-- | lib/Travel/Routing/DE/EFA.pm | 19 |
2 files changed, 27 insertions, 15 deletions
@@ -49,13 +49,13 @@ sub handle_efa_exception { if ( $e->isa('Travel::Routing::DE::EFA::Exception::Setup') ) { if ( $e->message ) { printf STDERR ( - "Error: %s (option '%s'): %s\n", + "User error: %s (option '%s'): %s\n", $e->description, $e->option, $e->message ); } else { printf STDERR ( - "Error: %s (option '%s', got '%s', want '%s')\n", + "User error: %s (option '%s', got '%s', want '%s')\n", $e->description, $e->option, $e->have, $e->want ); } @@ -63,27 +63,30 @@ sub handle_efa_exception { exit 1; } if ( $e->isa('Travel::Routing::DE::EFA::Exception::Net') ) { - printf STDERR ( "Error: %s: %s\n", $e->description, - $e->http_response->as_string ); + printf STDERR ( + "Network error: %s: %s\n", + $e->description, $e->http_response->as_string + ); exit 2; } if ( $e->isa('Travel::Routing::DE::EFA::Exception::NoData') ) { - printf STDERR ( "Error: %s\n", $e->description ); + printf STDERR ( "Backend rror: %s\n", $e->description ); exit 3; } if ( $e->isa('Travel::Routing::DE::EFA::Exception::Ambiguous') ) { printf STDERR ( - "Error: %s for key %s. Specify one of %s\n", - $e->description, $e->post_key, $e->possibilities + "Backend error: The %s '%s' is ambiguous. Try one of %s\n", + $e->post_key, $e->post_value,, $e->possibilities ); exit 4; } if ( $e->isa('Travel::Routing::DE::EFA::Exception::Other') ) { - printf STDERR ( "Error: %s: %s\n", $e->description, $e->message ); + printf STDERR ( "Backend error: %s: %s\n", $e->description, + $e->message ); exit 5; } - printf STDERR ( "Uncaught exception: %s\n%s", ref($e), $e->trace ); + printf STDERR ( "Unknown error: %s\n%s", ref($e), $e->trace ); exit 10; } @@ -235,7 +238,7 @@ if ( $opt->{exclude} ) { } if ( $opt->{service} ) { - my $service = first { lc($_->{shortname}) eq lc($opt->{service}) } + my $service = first { lc( $_->{shortname} ) eq lc( $opt->{service} ) } Travel::Routing::DE::EFA::get_efa_urls(); if ( not $service ) { printf STDERR ( diff --git a/lib/Travel/Routing/DE/EFA.pm b/lib/Travel/Routing/DE/EFA.pm index 53d5d22..357e35b 100644 --- a/lib/Travel/Routing/DE/EFA.pm +++ b/lib/Travel/Routing/DE/EFA.pm @@ -31,7 +31,7 @@ use Exception::Class ( 'Travel::Routing::DE::EFA::Exception::Ambiguous' => { isa => 'Travel::Routing::DE::EFA::Exception', description => 'ambiguous input', - fields => [ 'post_key', 'possibilities' ], + fields => [ 'post_key', 'post_value', 'possibilities' ], }, 'Travel::Routing::DE::EFA::Exception::Other' => { isa => 'Travel::Routing::DE::EFA::Exception', @@ -687,8 +687,10 @@ sub check_ambiguous_xml { my $xp_place = XML::LibXML::XPathExpression->new('./itdOdvPlace'); my $xp_name = XML::LibXML::XPathExpression->new('./itdOdvName'); - my $xp_place_elem = XML::LibXML::XPathExpression->new('./odvPlaceElem'); - my $xp_name_elem = XML::LibXML::XPathExpression->new('./odvNameElem'); + my $xp_place_elem = XML::LibXML::XPathExpression->new('./odvPlaceElem'); + my $xp_place_input = XML::LibXML::XPathExpression->new('./odvPlaceInput'); + my $xp_name_elem = XML::LibXML::XPathExpression->new('./odvNameElem'); + my $xp_name_input = XML::LibXML::XPathExpression->new('./odvNameInput'); my $e_place = ( $tree->findnodes($xp_place) )[0]; my $e_name = ( $tree->findnodes($xp_name) )[0]; @@ -703,7 +705,11 @@ sub check_ambiguous_xml { if ( $s_place eq 'list' ) { Travel::Routing::DE::EFA::Exception::Ambiguous->throw( - post_key => 'place', + post_key => 'place', + post_value => decode( + 'UTF-8', + ( $e_place->findnodes($xp_place_input) )[0]->textContent + ), possibilities => join( q{ | }, map { decode( 'UTF-8', $_->textContent ) } @{ $e_place->findnodes($xp_place_elem) } ) @@ -711,7 +717,10 @@ sub check_ambiguous_xml { } if ( $s_name eq 'list' ) { Travel::Routing::DE::EFA::Exception::Ambiguous->throw( - post_key => 'name', + post_key => 'name', + post_value => decode( + 'UTF-8', ( $e_name->findnodes($xp_name_input) )[0]->textContent + ), possibilities => join( q{ | }, map { decode( 'UTF-8', $_->textContent ) } @{ $e_name->findnodes($xp_name_elem) } ) |