summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Friesel <derf@finalrewind.org>2014-06-23 18:24:17 +0200
committerDaniel Friesel <derf@finalrewind.org>2014-06-23 18:24:17 +0200
commitf734fa35b4a14b9091632aa305b7fcceed7c4c57 (patch)
tree7c49a39f2d9e8119a1915076ec74324b03614f8b
parent616d793d710df2a18e9ef89dbe1b6e56e1c1c5d5 (diff)
Do not error out if only partial data is available (closes #4)
-rw-r--r--Changelog2
-rwxr-xr-xbin/db-iris9
-rw-r--r--lib/Travel/Status/DE/IRIS.pm22
-rw-r--r--t/30-iris-const.t2
4 files changed, 29 insertions, 6 deletions
diff --git a/Changelog b/Changelog
index d759f57..54d951c 100644
--- a/Changelog
+++ b/Changelog
@@ -1,6 +1,8 @@
git HEAD
* Fix --track-via <stop> not matching trains changing their ID at <stop>
+ * Do not errour out if only partial data is available, show partial data
+ and a warning instead (closes #4)
Travel::Status::DE::IRIS 0.03 - Fri Feb 14 2014
diff --git a/bin/db-iris b/bin/db-iris
index f1bff19..38e30cd 100755
--- a/bin/db-iris
+++ b/bin/db-iris
@@ -259,12 +259,19 @@ if ( my $err = $status->errstr ) {
say STDERR "Request error: ${err}";
exit 2;
}
+if ( my $warning = $status->warnstr ) {
+ say STDERR "Request warning: ${warning}";
+}
if ( $status_via and $status_via->errstr ) {
my $err = $status_via->errstr;
- say STDERR "Request error: ${err}";
+ say STDERR "Request error in --via : ${err}";
exit 2;
}
+if ( $status_via and $status_via->warnstr ) {
+ my $warning = $status_via->warnstr;
+ say STDERR "Request warning in --via : ${warning}";
+}
sanitize_options();
diff --git a/lib/Travel/Status/DE/IRIS.pm b/lib/Travel/Status/DE/IRIS.pm
index 381b021..89cbb88 100644
--- a/lib/Travel/Status/DE/IRIS.pm
+++ b/lib/Travel/Status/DE/IRIS.pm
@@ -43,7 +43,8 @@ sub new {
my $res_st = $ua->get( $self->{iris_base} . '/station/' . $opt{station} );
if ( $res_st->is_error ) {
- $self->{errstr} = $res_st->status_line;
+ $self->{errstr} = 'Failed to fetch station data: Server returned '
+ . $res_st->status_line;
return $self;
}
@@ -159,7 +160,8 @@ sub get_timetable {
$dt->strftime( $self->{iris_base} . "/plan/${eva}/%y%m%d/%H" ) );
if ( $res->is_error ) {
- $self->{errstr} = $res->status_line;
+ $self->{warnstr} = 'Failed to fetch a schedule part: Server returned '
+ . $res->status_line;
return $self;
}
@@ -184,7 +186,8 @@ sub get_realtime {
my $res = $self->{user_agent}->get( $self->{iris_base} . "/fchg/${eva}" );
if ( $res->is_error ) {
- $self->{errstr} = $res->status_line;
+ $self->{warnstr} = 'Failed to fetch realtime data: Server returned '
+ . $res->status_line;
return $self;
}
@@ -282,6 +285,12 @@ sub results {
return @{ $self->{results} // [] };
}
+sub warnstr {
+ my ($self) = @_;
+
+ return $self->{warnstr};
+}
+
1;
__END__
@@ -364,7 +373,7 @@ All other options are passed to the LWP::UserAgent(3pm) constructor.
=item $status->errstr
-In case of an HTTP request or IRIS error, returns a string describing it.
+In case of a fatal HTTP request or IRIS error, returns a string describing it.
Returns undef otherwise.
=item $status->results
@@ -372,6 +381,11 @@ Returns undef otherwise.
Returns a list of Travel::Status::DE::IRIS(3pm) objects, each one describing
one arrival and/or departure.
+=item $status->errstr
+
+In case of a (probably) non-fatal HTTP request or IRIS error, returns a string
+describing it. Returns undef otherwise.
+
=back
=head1 DIAGNOSTICS
diff --git a/t/30-iris-const.t b/t/30-iris-const.t
index e8e60ae..aed46ef 100644
--- a/t/30-iris-const.t
+++ b/t/30-iris-const.t
@@ -37,7 +37,7 @@ $status = Travel::Status::DE::IRIS->new(
)
);
-ok( defined $status->errstr, 'constructor with missing data has errstr' );
+ok( defined $status->warnstr, 'constructor with missing data has warnstr' );
$status = Travel::Status::DE::IRIS->new(
iris_base => 'file:t/in',