diff options
Diffstat (limited to 'lib/WWW')
-rw-r--r-- | lib/WWW/Efa.pm | 56 | ||||
-rw-r--r-- | lib/WWW/Efa/Error.pm | 60 | ||||
-rw-r--r-- | lib/WWW/Efa/Error/Backend.pm | 48 | ||||
-rw-r--r-- | lib/WWW/Efa/Error/Setup.pm | 32 |
4 files changed, 105 insertions, 91 deletions
diff --git a/lib/WWW/Efa.pm b/lib/WWW/Efa.pm index b5fb724..38eeecf 100644 --- a/lib/WWW/Efa.pm +++ b/lib/WWW/Efa.pm @@ -40,7 +40,8 @@ use 5.010; use base 'Exporter'; use XML::LibXML; -use WWW::Efa::Error; +use WWW::Efa::Error::Setup; +use WWW::Efa::Error::Backend; use WWW::Mechanize; our @EXPORT_OK = (); @@ -60,8 +61,8 @@ sub post_time { } if ($time !~ / ^ [0-2]? \d : [0-5]? \d $ /x) { - die WWW::Efa::Error->new( - 'internal', 'conf', ['time', $time, 'Must match HH:MM'] + die WWW::Efa::Error::Setup->new( + 'time', $time, 'Must match HH:MM' ); } @{$post}{'itdTimeHour', 'itdTimeMinute'} = split(/:/, $time); @@ -71,8 +72,8 @@ sub post_date { my ($post, $date) = @_; if ($date !~ /^ [0-3]? \d \. [01]? \d \. (?: \d{4} )? $/x) { - die WWW::Efa::Error->new( - 'internal', 'conf', ['date', $date, 'Must match DD.MM.[YYYY]'] + die WWW::Efa::Error::Setup->new( + 'date', $date, 'Must match DD.MM.[YYYY]' ); } @{$post}{'itdDateDay', 'itdDateMonth', 'itdDateYear'} = split(/\./, $date); @@ -95,13 +96,10 @@ sub post_exclude { } } if (not $ok) { - die WWW::Efa::Error->new( - 'internal', 'conf', - [ - 'exclude', - join(q{ }, @exclude), - 'Must consist of ' . join(q{ }, @mapping) - ] + die WWW::Efa::Error::Setup->new( + 'exclude', + join(q{ }, @exclude), + 'Must consist of ' . join(q{ }, @mapping) ); } } @@ -115,9 +113,8 @@ sub post_prefer { when ('nowait') { $post->{'routeType'} = 'LEASTINTERCHANGE' } when ('nowalk') { $post->{'routeType'} = 'LEASTWALKING' } default { - die WWW::Efa::Error->new( - 'internal', 'conf', - ['prefer', $prefer, 'Must be either speed, nowait or nowalk'] + die WWW::Efa::Error::Setup->new( + 'prefer', $prefer, 'Must be either speed, nowait or nowalk' ); } } @@ -131,9 +128,8 @@ sub post_include { when ('ic') { $post->{'lineRestriction'} = 401 } when ('ice') { $post->{'lineRestriction'} = 400 } default { - die WWW::Efa::Error->new( - 'internal', 'conf', - ['include', $include, 'Must be one of local/ic/ice'] + die WWW::Efa::Error::Setup->new( + 'include', $include, 'Must be one of local/ic/ice' ); } } @@ -146,9 +142,8 @@ sub post_walk_speed { $post->{'changeSpeed'} = $walk_speed; } else { - die WWW::Efa::Error->new( - 'internal', 'conf', - ['walk_speed', $walk_speed, 'Must be normal, fast or slow'] + die WWW::Efa::Error::Setup->new( + 'walk_speed', $walk_speed, 'Must be normal, fast or slow' ); } } @@ -157,9 +152,8 @@ sub post_place { my ($post, $which, $place, $stop, $type) = @_; if (not ($place and $stop)) { - die WWW::Efa::Error->new( - 'internal', 'conf', - ['place', $which, "Need at least two elements"] + die WWW::Efa::Error::Setup->new( + 'place', $which, "Need at least two elements" ); } @@ -263,8 +257,8 @@ sub parse_initial { return $cons; } else { - return WWW::Efa::Error->new( - 'efa.vrr.de', 'no data' + return WWW::Efa::Error::Backend->new( + 'no data' ); } } @@ -334,7 +328,7 @@ sub new { eval { $ref->{'post'} = create_post(\%conf); }; - if ($@ and ref($@) eq 'WWW::Efa::Error') { + if ($@ and ref($@) eq 'WWW::Efa::Error::Setup') { $ref->{'error'} = $@; } @@ -398,8 +392,8 @@ sub check_ambiguous { push(@possible, $val->textContent()); } - return WWW::Efa::Error->new( - 'efa.vrr.de', 'ambiguous', + return WWW::Efa::Error::Backend->new( + 'ambiguous', \@possible ); } @@ -415,8 +409,8 @@ sub check_no_connections { my $err_node = $tree->findnodes($xp_err_img)->[0]; if ($err_node) { - return WWW::Efa::Error->new( - 'efa.vrr.de', 'error', + return WWW::Efa::Error::Backend->new( + 'error', $err_node->parentNode()->parentNode()->textContent() ); } diff --git a/lib/WWW/Efa/Error.pm b/lib/WWW/Efa/Error.pm deleted file mode 100644 index a5fbf96..0000000 --- a/lib/WWW/Efa/Error.pm +++ /dev/null @@ -1,60 +0,0 @@ -package WWW::Efa::Error; - -use strict; -use warnings; -use 5.010; - -use base 'Exporter'; - -our @EXPORT_OK = qw{}; - -# source: internal / efa.vrr.de -# type: internal: conf -# efa.vrr.de: ambiguous / error / no data -sub new { - my ($obj, $source, $type, $data) = @_; - my $ref = {}; - - $ref->{'source'} = $source; - $ref->{'type'} = $type; - $ref->{'data'} = $data; - - return bless($ref, $obj); -} - -sub as_string { - my ($self) = @_; - my $ret; - - if ($self->{'source'} eq 'internal') { - $ret = sprintf( - "WWW::Efa config error: Wrong arg for option %s: %s\n%s\n", - @{$self->{'data'}} - ); - } - elsif ($self->{'source'} eq 'efa.vrr.de') { - given ($self->{'type'}) { - when ('no data') { - $ret = "WWW::Efa: efa.vrr.de returned no data\n"; - } - when ('ambiguous') { - $ret = sprintf( - "WWW::Efa: efa.vrr.de: Ambiguous input for %s:\n", - shift(@{$self->{'data'}}), - ); - foreach my $possible (@{$self->{'data'}}) { - $ret .= "\t${possible}\n"; - } - } - when ('error') { - $ret = sprintf( - "WWW::Efa: efa.vrr.de error:\n%s\n", - $self->{'data'}, - ); - } - } - } - return $ret; -} - -1; diff --git a/lib/WWW/Efa/Error/Backend.pm b/lib/WWW/Efa/Error/Backend.pm new file mode 100644 index 0000000..b6ffa75 --- /dev/null +++ b/lib/WWW/Efa/Error/Backend.pm @@ -0,0 +1,48 @@ +package WWW::Efa::Error::Backend; + +use strict; +use warnings; +use 5.010; + +use base 'Exporter'; + +our @EXPORT_OK = qw{}; + +sub new { + my ($obj, $type, $data) = @_; + my $ref = {}; + + $ref->{'type'} = $type; + $ref->{'data'} = $data; + + return bless($ref, $obj); +} + +sub as_string { + my ($self) = @_; + my $ret; + + given ($self->{'type'}) { + when ('no data') { + $ret = "WWW::Efa: efa.vrr.de returned no data\n"; + } + when ('ambiguous') { + $ret = sprintf( + "WWW::Efa: efa.vrr.de: Ambiguous input for %s:\n", + shift(@{$self->{'data'}}), + ); + foreach my $possible (@{$self->{'data'}}) { + $ret .= "\t${possible}\n"; + } + } + when ('error') { + $ret = sprintf( + "WWW::Efa: efa.vrr.de error:\n%s\n", + $self->{'data'}, + ); + } + } + return $ret; +} + +1; diff --git a/lib/WWW/Efa/Error/Setup.pm b/lib/WWW/Efa/Error/Setup.pm new file mode 100644 index 0000000..521bb55 --- /dev/null +++ b/lib/WWW/Efa/Error/Setup.pm @@ -0,0 +1,32 @@ +package WWW::Efa::Error::Setup; + +use strict; +use warnings; +use 5.010; + +use base 'Exporter'; + +our @EXPORT_OK = qw{}; + +sub new { + my ($obj, $key, $value, $msg) = @_; + my $ref = {}; + + $ref->{'key'} = $key; + $ref->{'value'} = $value; + $ref->{'message'} = $msg; + + return bless($ref, $obj); +} + +sub as_string { + my ($self) = @_; + my $ret; + + return sprintf( + "WWW::Efa setup error: Wrong arg for option %s: %s\n%s\n", + @{$self}{'key', 'value', 'message'}, + ); +} + +1; |