diff options
Diffstat (limited to 'lib/Travel/Routing/DE/VRR')
-rw-r--r-- | lib/Travel/Routing/DE/VRR/Route.pm | 99 | ||||
-rw-r--r-- | lib/Travel/Routing/DE/VRR/Route/Part.pm | 150 |
2 files changed, 249 insertions, 0 deletions
diff --git a/lib/Travel/Routing/DE/VRR/Route.pm b/lib/Travel/Routing/DE/VRR/Route.pm new file mode 100644 index 0000000..c250be7 --- /dev/null +++ b/lib/Travel/Routing/DE/VRR/Route.pm @@ -0,0 +1,99 @@ +package Travel::Routing::DE::VRR::Route; + +use strict; +use warnings; +use 5.010; + +use Travel::Routing::DE::VRR::Route::Part; + +our $VERSION = '1.3'; + +sub new { + my ( $obj, @parts ) = @_; + + my $ref = {}; + + for my $part (@parts) { + push( + @{ $ref->{parts} }, + Travel::Routing::DE::VRR::Route::Part->new( %{$part} ) + ); + } + + return bless( $ref, $obj ); +} + +sub parts { + my ($self) = @_; + + return @{ $self->{parts} }; +} + +1; + +__END__ + +=head1 NAME + +Travel::Routing::DE::VRR::Route - Single route (connection) between two points + +=head1 SYNOPSIS + + for my $route ( $efa->routes() ) { + for my $part ( $route->parts() ) { + # $part is a Travel::Routing::DE::VRR::Route::Part object + } + } + +=head1 VERSION + +version 1.3 + +=head1 DESCRIPTION + +Travel::Routing::DE::VRR::Route describes a single method of getting from one +point to another. It holds a bunch of Travel::Routing::DE::VRR::Route::Part(3pm) +objects describing the parts of the route in detail. Each part depends on the +previous one. + +You usually want to acces it via C<< $efa->routes() >>. + +=head1 METHODS + +=over + +=item my $route = Travel::Routing::DE::VRR::Route->new(I<@parts>) + +Creates a new Travel::Routing::DE::VRR::Route elements consisting of I<parts>, +which are Travel::Routing::DE::VRR::Route::Part elements. + +=item $route->parts() + +Returns a list of Travel::Routing::DE::VRR::Route::Part(3pm) elements describing +the actual route. + +=back + +=head1 DIAGNOSTICS + +None. + +=head1 DEPENDENCIES + +None. + +=head1 BUGS AND LIMITATIONS + +None known. + +=head1 SEE ALSO + +Travel::Routing::DE::VRR(3pm), Travel::Routing::DE::VRR::Route::Part(3pm). + +=head1 AUTHOR + +Copyright (C) 2011 by Daniel Friesel E<lt>derf@finalrewind.orgE<gt> + +=head1 LICENSE + + 0. You just DO WHAT THE FUCK YOU WANT TO. diff --git a/lib/Travel/Routing/DE/VRR/Route/Part.pm b/lib/Travel/Routing/DE/VRR/Route/Part.pm new file mode 100644 index 0000000..e47a512 --- /dev/null +++ b/lib/Travel/Routing/DE/VRR/Route/Part.pm @@ -0,0 +1,150 @@ +package Travel::Routing::DE::VRR::Route::Part; + +use strict; +use warnings; +use 5.010; + +use parent 'Class::Accessor'; + +our $VERSION = '1.3'; + +Travel::Routing::DE::VRR::Route::Part->mk_ro_accessors( + qw(arrival_stop arrival_time departure_stop departure_time train_line + train_destination) +); + +sub new { + my ( $obj, %conf ) = @_; + + my $ref = \%conf; + + return bless( $ref, $obj ); +} + +sub extra { + my ($self) = @_; + + return @{ $self->{extra} // [] }; +} + +1; + +__END__ + +=head1 NAME + +Travel::Routing::DE::VRR::Route::Part - Describes one connection between two +points, without interchanges + +=head1 SYNOPSIS + + for my $part ( $route->parts() ) { + + if ( $part->extra() ) { + say join( "\n", $part->extra() ); + } + + printf( + "%s at %s -> %s at %s, via %s to %s", + $part->departure_time, $part->departure_stop, + $part->arrival_time, $part->arrival_stop, + $part->train_line, $part->train_destination, + ); + } + +=head1 VERSION + +version 0.3 + +=head1 DESCRIPTION + +B<Travel::Routing::DE::VRR::Route::Part> holds one specific connection (without +interchanges) between two points. It specifies the start/stop point and time, +the train line and its destination, and optional additional data. + +It is usually obtained by a call to Travel::Routing::DE::VRR::Route(3pm)'s +B<parts> method. + +=head1 METHODS + +=over + +=item $part = Travel::Routing::DE::VRR::Route::Part->new(I<%data>) + +Creates a new Travel::Routing::DE::VRR::Route::Part object. I<data> consists of: + +=over + +=item B<arrival_time> => I<HH>:I<MM> + +Arrival time + +=item B<arrival_stop> => I<name> + +Arrival stop (city plus station / address) + +=item B<departure_time> => I<HH:MM> + +Departure time + +=item B<departure_stop> => I<name> + +Departure stop (city plus station / address) + +=item B<train_destination> => I<name> + +Destination of the train connecting the stops + +=item B<train_line> => I<name> + +The train's line name. + +=item B<extra> => B<[> [ I<line1>, [ I<line2> [ I<...> ] ] ] B<]> + +Additional information about this connection. Array-ref of newline-terminated +strings. + +=back + +=item $part->get(I<name>) + +Returns the value of I<name> (B<arrival_time>, B<arrival_stop> etc., see +B<new>). + +Each of these I<names> also has an accessor. So C<< $part->departure_time() >> +is the same as C<< $part->get('departure_time') >>. + +=item $part->extra() + +Returns a list of additional information about this route part, if provided. +Returns an empty list otherwise. + +=back + +=head1 DIAGNOSTICS + +None. + +=head1 DEPENDENCIES + +=over + +=item * Class::Accessor(3pm) + +=back + +=head1 BUGS AND LIMITATIONS + +None known. + +=head1 SEE ALSO + +Travel::Routing::DE::VRR(3pm). + +=head1 AUTHOR + +Copyright (C) 2011 by Daniel Friesel E<lt>derf@finalrewind.orgE<gt> + +=head1 LICENSE + + 0. You just DO WHAT THE FUCK YOU WANT TO. |