summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/Net/Travel/DE/VRR.pm89
1 files changed, 64 insertions, 25 deletions
diff --git a/lib/Net/Travel/DE/VRR.pm b/lib/Net/Travel/DE/VRR.pm
index 57b5f66..ab60a40 100644
--- a/lib/Net/Travel/DE/VRR.pm
+++ b/lib/Net/Travel/DE/VRR.pm
@@ -11,18 +11,21 @@ use XML::LibXML;
our $VERSION = '1.3';
-sub post_time {
- my ( $self, $conf ) = @_;
+sub set_time {
+ my ( $self, %conf ) = @_;
my $time;
- if ( $conf->{departure_time} ) {
+ if ( $conf{departure_time} ) {
$self->{post}->{itdTripDateTimeDepArr} = 'dep';
- $time = $conf->{departure_time} || $conf->{time};
+ $time = $conf{departure_time};
}
- else {
+ elsif ( $conf{arrival_time} ) {
$self->{post}->{itdTripDateTimeDepArr} = 'arr';
- $time = $conf->{arrival_time};
+ $time = $conf{arrival_time};
+ }
+ else {
+ confess('time: Specify either departure_time or arrival_time');
}
if ( $time !~ / ^ [0-2]? \d : [0-5]? \d $ /x ) {
@@ -34,7 +37,19 @@ sub post_time {
return;
}
-sub post_date {
+sub departure_time {
+ my ( $self, $time ) = @_;
+
+ return $self->set_time( departure_time => $time );
+}
+
+sub arrival_time {
+ my ( $self, $time ) = @_;
+
+ return $self->set_time( arrival_time => $time );
+}
+
+sub date {
my ( $self, $date ) = @_;
my ( $day, $month, $year ) = split( /[.]/, $date );
@@ -57,7 +72,7 @@ sub post_date {
return;
}
-sub post_exclude {
+sub exclude {
my ( $self, @exclude ) = @_;
my @mapping = qw{
@@ -81,7 +96,15 @@ sub post_exclude {
return;
}
-sub post_prefer {
+sub max_interchanges {
+ my ( $self, $max ) = @_;
+
+ $self->{post}->{maxChanges} = $max;
+
+ return;
+}
+
+sub select_interchange_by {
my ( $self, $prefer ) = @_;
given ($prefer) {
@@ -98,7 +121,7 @@ sub post_prefer {
return;
}
-sub post_include {
+sub train_type {
my ( $self, $include ) = @_;
given ($include) {
@@ -113,7 +136,15 @@ sub post_include {
return;
}
-sub post_walk_speed {
+sub use_near_stops {
+ my ( $self, $toggle ) = @_;
+
+ $self->{post}->{useProxFootSearch} = $toggle;
+
+ return;
+}
+
+sub walk_speed {
my ( $self, $walk_speed ) = @_;
if ( $walk_speed ~~ [ 'normal', 'fast', 'slow' ] ) {
@@ -126,11 +157,19 @@ sub post_walk_speed {
return;
}
-sub post_place {
+sub with_bike {
+ my ( $self, $bike ) = @_;
+
+ $self->{post}->{bikeTakeAlong} = $bike;
+
+ return;
+}
+
+sub place {
my ( $self, $which, $place, $stop, $type ) = @_;
if ( not( $place and $stop ) ) {
- confess('place: Need two elements');
+ confess('place: Need >= three elements');
}
$type //= 'stop';
@@ -238,38 +277,38 @@ sub create_post {
useRealtime => 1
};
- $self->post_place( 'origin', @{ $conf->{origin} } );
- $self->post_place( 'destination', @{ $conf->{destination} } );
+ $self->place( 'origin', @{ $conf->{origin} } );
+ $self->place( 'destination', @{ $conf->{destination} } );
if ( $conf->{via} ) {
- $self->post_place( 'via', @{ $conf->{via} } );
+ $self->place( 'via', @{ $conf->{via} } );
}
if ( $conf->{arrival_time} || $conf->{departure_time} ) {
- $self->post_time($conf);
+ $self->set_time( %{$conf} );
}
if ( $conf->{date} ) {
- $self->post_date( $conf->{date} );
+ $self->date( $conf->{date} );
}
if ( $conf->{exclude} ) {
- $self->post_exclude( @{ $conf->{exclude} } );
+ $self->exclude( @{ $conf->{exclude} } );
}
if ( $conf->{max_interchanges} ) {
- $self->{post}->{maxChanges} = $conf->{max_interchanges};
+ $self->max_interchanges( $conf->{max_interchanges} );
}
if ( $conf->{select_interchange_by} ) {
- $self->post_prefer( $conf->{select_interchange_by} );
+ $self->select_interchange_by( $conf->{select_interchange_by} );
}
if ( $conf->{use_near_stops} ) {
- $self->{post}->{useProxFootSearch} = 1;
+ $self->use_near_stops(1);
}
if ( $conf->{train_type} ) {
- $self->post_include( $conf->{train_type} );
+ $self->train_type( $conf->{train_type} );
}
if ( $conf->{walk_speed} ) {
- $self->post_walk_speed( $conf->{walk_speed} );
+ $self->walk_speed( $conf->{walk_speed} );
}
if ( $conf->{with_bike} ) {
- $self->{post}->{bikeTakeAlong} = 1;
+ $self->with_bike(1);
}
return;