diff options
Diffstat (limited to 'lib/Travel/Status/DE/URA/Result.pm')
| -rw-r--r-- | lib/Travel/Status/DE/URA/Result.pm | 122 |
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 |
