summaryrefslogtreecommitdiff
path: root/lib/Travel/Status/DE/URA/Result.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Travel/Status/DE/URA/Result.pm')
-rw-r--r--lib/Travel/Status/DE/URA/Result.pm122
1 files changed, 108 insertions, 14 deletions
diff --git a/lib/Travel/Status/DE/URA/Result.pm b/lib/Travel/Status/DE/URA/Result.pm
index 3266d62..93e129e 100644
--- a/lib/Travel/Status/DE/URA/Result.pm
+++ b/lib/Travel/Status/DE/URA/Result.pm
@@ -8,10 +8,10 @@ use parent 'Class::Accessor';
use DateTime::Format::Duration;
-our $VERSION = '0.02';
+our $VERSION = '2.01';
Travel::Status::DE::URA::Result->mk_ro_accessors(
- qw(datetime destination line line_id stop stop_id));
+ qw(datetime destination line line_id stop stop_id stop_indicator));
sub new {
my ( $obj, %conf ) = @_;
@@ -46,16 +46,81 @@ sub date {
return $self->datetime->strftime('%d.%m.%Y');
}
+sub platform {
+ my ($self) = @_;
+
+ return $self->{stop_indicator};
+}
+
sub time {
my ($self) = @_;
return $self->datetime->strftime('%H:%M:%S');
}
-sub route_timetable {
+sub type {
+ return 'Bus';
+}
+
+sub route_interesting {
+ my ( $self, $max_parts ) = @_;
+
+ my @via = $self->route_post;
+ my ( @via_main, @via_show, $last_stop );
+ $max_parts //= 3;
+
+ for my $stop (@via) {
+ if (
+ $stop->name =~ m{ bf | hbf | Flughafen | bahnhof
+ | Krankenhaus | Klinik | bushof | busstation }iox
+ )
+ {
+ push( @via_main, $stop );
+ }
+ }
+ $last_stop = pop(@via);
+
+ if ( @via_main and $via_main[-1] == $last_stop ) {
+ pop(@via_main);
+ }
+ if ( @via and $via[-1] == $last_stop ) {
+ pop(@via);
+ }
+
+ if ( @via_main and @via and $via[0] == $via_main[0] ) {
+ shift(@via_main);
+ }
+
+ if ( @via < $max_parts ) {
+ @via_show = @via;
+ }
+ else {
+ if ( @via_main >= $max_parts ) {
+ @via_show = ( $via[0] );
+ }
+ else {
+ @via_show = splice( @via, 0, $max_parts - @via_main );
+ }
+
+ while ( @via_show < $max_parts and @via_main ) {
+ my $stop = shift(@via_main);
+ push( @via_show, $stop );
+ }
+ }
+
+ return @via_show;
+}
+
+sub route_pre {
+ my ($self) = @_;
+
+ return @{ $self->{route_pre} };
+}
+
+sub route_post {
my ($self) = @_;
- return @{ $self->{route_timetable} };
+ return @{ $self->{route_post} };
}
sub TO_JSON {
@@ -85,7 +150,7 @@ departure received by Travel::Status::DE::URA
=head1 VERSION
-version 0.02
+version 2.01
=head1 DESCRIPTION
@@ -129,27 +194,56 @@ The name of the line.
The number of the line.
-=item $departure->route_timetable
+=item $departure->platform
+
+Shortcut for $departure->stop_indicator, see there.
+
+=item $departure->route_interesting(I<num_stops>)
+
+If the B<results> method of Travel::Status::DE::URA(3pm) was called with
+B<calculate_routes> => true: Returns a list of up to I<num_stops> (defaults to
+3) stops considered interesting (usually of major importance in the transit
+area). Each stop is a Travel::Status::DE::URA::Stop(3pm) object. Note that the
+importance is determined heuristically based on the stop name, so it is not
+always accurate.
+
+Returns an empty list if B<calculate_routes> was false.
+
+=item $departure->route_pre
If the B<results> method of Travel::Status::DE::URA(3pm) was called with
-B<full_routes> => true:
-Returns a list of arrayrefs describing the entire route. I.e.
-C<< [[$time1, $stop1], [$time2, $stop2], ...] >>.
-The times are DateTime::Duration(3pm) objects, the stops are only names,
-not IDs (subject to change). Returns an empty list otherwise.
+B<calculate_routes> => true:
+Returns a list containing all stops after the requested one.
+Each stop is a Travel::Status::DE::URA::Stop(3pm) object.
+Returns an empty list otherwise.
+
+=item $departure->route_post
+
+Same as B<route_pre>, but contains the stops before the requested one.
=item $departure->stop
-The stop belonging to this departure.
+The stop (name, not object) belonging to this departure.
=item $departure->stop_id
The stop ID belonging to this departure.
+=item $departure->stop_indicator
+
+The indicator for this departure at the corresponding stop, usually
+describes a platform or sub-stop number. undef if the stop does not
+have such a distinction.
+
=item $departure->time
Departure time (HH:MM:SS).
+=item $departure->type
+
+Vehicle type for this departure. At the moment, this always returns "Bus".
+This option exists for compatibility with other Travel::Status libraries.
+
=back
=head2 INTERNAL
@@ -185,11 +279,11 @@ Unknown.
=head1 SEE ALSO
-Travel::Status::DE::URA(3pm).
+Travel::Status::DE::URA(3pm), Travel::Status::DE::URA::Stop(3pm).
=head1 AUTHOR
-Copyright (C) 2013 by Daniel Friesel E<lt>derf@finalrewind.orgE<gt>
+Copyright (C) 2013-2016 by Birte Kristina Friesel E<lt>derf@finalrewind.orgE<gt>
=head1 LICENSE