diff options
Diffstat (limited to 'lib/Travel/Status/DE/URA')
| -rw-r--r-- | lib/Travel/Status/DE/URA/Result.pm | 122 | ||||
| -rw-r--r-- | lib/Travel/Status/DE/URA/Stop.pm | 114 |
2 files changed, 222 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 diff --git a/lib/Travel/Status/DE/URA/Stop.pm b/lib/Travel/Status/DE/URA/Stop.pm new file mode 100644 index 0000000..cd0c38f --- /dev/null +++ b/lib/Travel/Status/DE/URA/Stop.pm @@ -0,0 +1,114 @@ +package Travel::Status::DE::URA::Stop; + +use strict; +use warnings; +use 5.010; + +use parent 'Class::Accessor'; + +our $VERSION = '2.01'; + +Travel::Status::DE::URA::Stop->mk_ro_accessors(qw(datetime name)); + +sub new { + my ( $obj, %conf ) = @_; + + my $ref = \%conf; + + return bless( $ref, $obj ); +} + +sub date { + my ($self) = @_; + + return $self->{datetime}->strftime('%d.%m.%Y'); +} + +sub time { + my ($self) = @_; + + return $self->{datetime}->strftime('%H:%M:%S'); +} + +sub TO_JSON { + my ($self) = @_; + + return { %{$self} }; +} + +1; + +__END__ + +=head1 NAME + +Travel::Status::DE::URA::Stop - Information about a stop + +=head1 SYNOPSIS + + for my $stop ($departure->route_post) { + printf( + "%s %s\n", + $stop->time, $stop->name + ); + } + +=head1 VERSION + +version 2.01 + +=head1 DESCRIPTION + +Travel::Status::DE::URA::Stop describes a single stop of a departure's route. + +=head1 METHODS + +=head2 ACCESSORS + +=over + +=item $stop->datetime + +DateTime object holding the arrival/departure date and time. + +=item $stop->date + +Arrival/departure date in dd.mm.YYYY format. + +=item $stop->time + +Arrival/departure time in HH:MM:SS format. + +=item $stop->name + +Stop name. + +=back + +=head1 DIAGNOSTICS + +None. + +=head1 DEPENDENCIES + +=over + +=item Class::Accessor(3pm) + +=back + +=head1 BUGS AND LIMITATIONS + +Unknown. + +=head1 SEE ALSO + +Travel::Status::DE::URA(3pm). + +=head1 AUTHOR + +Copyright (C) 2015-2016 by Birte Kristina Friesel E<lt>derf@finalrewind.orgE<gt> + +=head1 LICENSE + +This module is licensed under the same terms as Perl itself. |
