Loading Changelog +4 −0 Original line number Diff line number Diff line git HEAD * Route::Part: Add {arrival,departure}_{route,station}maps accessors Travel::Routing::DE::VRR 2.05 - Mon Mar 03 2014 * Move all logic to Travel::Routing::DE::EFA and require an EFA url to Loading lib/Travel/Routing/DE/EFA.pm +57 −15 Original line number Diff line number Diff line Loading @@ -411,8 +411,12 @@ sub new { ); } # $ref->{config}->{rm_base} //= 'http://efa.vrr.de/vrr/'; # $ref->{config}->{sm_base} //= 'http://efa.vrr.de/download/envmaps/'; $ref->{config}->{efa_url} =~ m{ (?<netroot> (?<root> [^:]+ : // [^/]+ ) / [^/]+ / ) }ox; $ref->{config}->{rm_base} = $+{netroot}; $ref->{config}->{sm_base} = $+{root} . '/download/envmaps/'; $ref->create_post; Loading @@ -428,6 +432,17 @@ sub new_from_xml { my $self = { xml_reply => $opt{xml} }; $self->{config} = { efa_url => $opt{efa_url}, }; $self->{config}->{efa_url} =~ m{ (?<netroot> (?<root> [^:]+ : // [^/]+ ) / [^/]+ / ) }ox; $self->{config}->{rm_base} = $+{netroot}; $self->{config}->{sm_base} = $+{root} . '/download/envmaps/'; bless( $self, $class ); $self->parse_xml; Loading Loading @@ -495,6 +510,11 @@ sub parse_xml_part { my $xp_info = XML::LibXML::XPathExpression->new('./itdInfoTextList/infoTextListElem'); my $xp_mapitem_rm = XML::LibXML::XPathExpression->new( './itdMapItemList/itdMapItem[@type="RM"]/itdImage'); my $xp_mapitem_sm = XML::LibXML::XPathExpression->new( './itdMapItemList/itdMapItem[@type="SM"]/itdImage'); my $xp_fare = XML::LibXML::XPathExpression->new('./itdFare/itdSingleTicket'); Loading Loading @@ -529,9 +549,26 @@ sub parse_xml_part { my $e_mot = ( $e->findnodes($xp_mot) )[0]; my $e_delay = ( $e->findnodes($xp_delay) )[0]; my @e_info = $e->findnodes($xp_info); my @e_dmap_rm = $e_dep->findnodes($xp_mapitem_rm); my @e_dmap_sm = $e_dep->findnodes($xp_mapitem_sm); my @e_amap_rm = $e_arr->findnodes($xp_mapitem_rm); my @e_amap_sm = $e_arr->findnodes($xp_mapitem_sm); my $delay = $e_delay ? $e_delay->getAttribute('delayMinutes') : 0; my ( @dep_rms, @dep_sms, @arr_rms, @arr_sms ); if ( $self->{config}->{rm_base} ) { my $base = $self->{config}->{rm_base}; @dep_rms = map { $base . $_->getAttribute('src') } @e_dmap_rm; @arr_rms = map { $base . $_->getAttribute('src') } @e_amap_rm; } if ( $self->{config}->{sm_base} ) { my $base = $self->{config}->{sm_base}; @dep_sms = map { $base . $_->getAttribute('src') } @e_dmap_sm; @arr_sms = map { $base . $_->getAttribute('src') } @e_amap_sm; } my $hash = { delay => $delay, departure_date => $self->itddate_str($e_ddate), Loading @@ -554,6 +591,11 @@ sub parse_xml_part { $hash->{$key} = decode( 'UTF-8', $hash->{$key} ); } $hash->{departure_routemaps} = \@dep_rms; $hash->{departure_stationmaps} = \@dep_sms; $hash->{arrival_routemaps} = \@arr_rms; $hash->{arrival_stationmaps} = \@arr_sms; for my $ve ( $e->findnodes($xp_via) ) { my $e_vdate = ( $ve->findnodes($xp_date) )[-1]; my $e_vtime = ( $ve->findnodes($xp_time) )[-1]; Loading lib/Travel/Routing/DE/EFA/Route/Part.pm +50 −4 Original line number Diff line number Diff line Loading @@ -10,10 +10,10 @@ our $VERSION = '2.05'; Travel::Routing::DE::EFA::Route::Part->mk_ro_accessors( qw(arrival_platform arrival_stop arrival_date arrival_time arrival_sdate arrival_stime delay departure_platform departure_stop departure_date departure_time departure_sdate departure_stime train_line train_destination arrival_date arrival_time arrival_sdate arrival_stime delay departure_platform departure_stop departure_date departure_time departure_sdate departure_stime train_line train_destination ) ); Loading @@ -25,6 +25,18 @@ sub new { return bless( $ref, $obj ); } sub arrival_routemaps { my ($self) = @_; return @{ $self->{arrival_routemaps} }; } sub arrival_stationmaps { my ($self) = @_; return @{ $self->{arrival_stationmaps} }; } sub arrival_stop_and_platform { my ($self) = @_; Loading @@ -35,6 +47,18 @@ sub arrival_stop_and_platform { return $self->arrival_stop; } sub departure_routemaps { my ($self) = @_; return @{ $self->{departure_routemaps} }; } sub departure_stationmaps { my ($self) = @_; return @{ $self->{departure_stationmaps} }; } sub departure_stop_and_platform { my ($self) = @_; Loading Loading @@ -134,6 +158,17 @@ Scheduled arrival date in DD.MM.YYYY format Scheduled arrival time in HH:MM format =item $part->arrival_routemaps List of URLs, may be empty. Each URL poinst to a transfer map for the arrival station, usually outlining fow to transfer from this train to the next one (if applicable). =item $part->arrival_stationmaps List of URLs, may be empty. Each URL points to an HTML map of the arrival station. =item $part->delay delay in minutes, 0 if unknown Loading Loading @@ -166,6 +201,17 @@ Scheduled departure date in DD.MM.YYYY format Scheduled departure time in HH:MM format =item $part->departure_routemaps List of URLs, may be empty. Each URL points to a PDF a transfer map for the departure station, usually outlining fow to transfer from thep previous train (if applicable) to this one. =item $part->departure_stationmaps List of URLs, may be empty. Each URL poinst to an HTML map of the departure station. =item $part->extra Additional information about the connection. Returns a list of Loading t/20-vrr.t +2 −0 Original line number Diff line number Diff line Loading @@ -16,6 +16,8 @@ sub efa_conf { efa_url => 'http://efa.vrr.de/vrr/XSLT_TRIP_REQUEST2', origin => ['Essen', 'HBf'], destination => ['Koeln', 'HBf'], rm_base => 'http://efa.vrr.de/vrr/', sm_base => 'http://efa.vrr.de/download/envmaps/', lwp_options => {}, submit => 0, }; Loading t/21-vrr.t +10 −2 Original line number Diff line number Diff line Loading @@ -7,7 +7,7 @@ use utf8; use Encode qw(decode); use File::Slurp qw(slurp); use Test::More tests => 74; use Test::More tests => 82; BEGIN { use_ok('Travel::Routing::DE::EFA'); Loading @@ -16,7 +16,7 @@ require_ok('Travel::Routing::DE::EFA'); my $xml = slurp('t/in/e_alf_d_hbf.xml'); my $routing = Travel::Routing::DE::EFA->new_from_xml( xml => $xml ); my $routing = Travel::Routing::DE::EFA->new_from_xml( efa_url => 'http://efa.vrr.de/vrr/XSLT_TRIP_REQUEST2', xml => $xml ); isa_ok( $routing, 'Travel::Routing::DE::EFA' ); can_ok( $routing, 'routes' ); Loading Loading @@ -52,6 +52,10 @@ my ( $c0, $c1 ) = $r0->parts; is( $c0->delay, 0, 'r0,0: delay' ); is_deeply( [ $c0->extra ], [], 'r0,0: extra' ); is_deeply( [ $c0->departure_routemaps ], ['http://efa.vrr.de/vrr/FILELOAD?Filename=dwa_4ED23486C.pdf'], 'r0,0: departure_routemaps'); is_deeply( [ $c0->departure_stationmaps ], [], 'r0,0: departure_stationmaps'); is_deeply( [ $c0->arrival_routemaps ], ['http://efa.vrr.de/vrr/FILELOAD?Filename=dwa_4ED23486D.pdf'], 'r0,0: arrival_routemaps'); is_deeply( [ $c0->arrival_stationmaps ], ['http://efa.vrr.de/download/envmaps/vrr/09289_e_hbf_1.htm'], 'r0,0: arrival_stationmaps'); is( $c0->train_line, decode( 'UTF-8', 'Straßenbahn 107' ), 'r0,0: line' ); is( $c0->train_destination, 'Essen Hanielstr. Schleife', 'r0,0: dest' ); is( $c0->departure_stop, 'Essen Alfredusbad', 'r0,0: dstop' ); Loading Loading @@ -84,6 +88,10 @@ is_deeply( [ decode( 'UTF-8', 'Fahrradmitnahme begrenzt möglich' ) ], 'r0,1: extra' ); is_deeply( [ $c1->departure_routemaps ], ['http://efa.vrr.de/vrr/FILELOAD?Filename=dwa_4ED23486D.pdf'], 'r0,0: departure_routemaps'); is_deeply( [ $c1->departure_stationmaps ], ['http://efa.vrr.de/download/envmaps/vrr/09289_e_hbf_1.htm'], 'r0,0: departure_stationmaps'); is_deeply( [ $c1->arrival_routemaps ], ['http://efa.vrr.de/vrr/FILELOAD?Filename=dwa_4ED23486E.pdf'], 'r0,0: arrival_routemaps'); is_deeply( [ $c1->arrival_stationmaps ], ['http://efa.vrr.de/download/envmaps/vrr/18235_d_hbf_1.htm'], 'r0,0: arrival_stationmaps'); is( $c1->train_line, 'R-Bahn RE1', 'r0,1: line' ); is( $c1->train_destination, 'Aachen, Hbf', 'r0,1: dest' ); is( $c1->departure_stop, 'Essen Hauptbahnhof', 'r0,1: dstop' ); Loading Loading
Changelog +4 −0 Original line number Diff line number Diff line git HEAD * Route::Part: Add {arrival,departure}_{route,station}maps accessors Travel::Routing::DE::VRR 2.05 - Mon Mar 03 2014 * Move all logic to Travel::Routing::DE::EFA and require an EFA url to Loading
lib/Travel/Routing/DE/EFA.pm +57 −15 Original line number Diff line number Diff line Loading @@ -411,8 +411,12 @@ sub new { ); } # $ref->{config}->{rm_base} //= 'http://efa.vrr.de/vrr/'; # $ref->{config}->{sm_base} //= 'http://efa.vrr.de/download/envmaps/'; $ref->{config}->{efa_url} =~ m{ (?<netroot> (?<root> [^:]+ : // [^/]+ ) / [^/]+ / ) }ox; $ref->{config}->{rm_base} = $+{netroot}; $ref->{config}->{sm_base} = $+{root} . '/download/envmaps/'; $ref->create_post; Loading @@ -428,6 +432,17 @@ sub new_from_xml { my $self = { xml_reply => $opt{xml} }; $self->{config} = { efa_url => $opt{efa_url}, }; $self->{config}->{efa_url} =~ m{ (?<netroot> (?<root> [^:]+ : // [^/]+ ) / [^/]+ / ) }ox; $self->{config}->{rm_base} = $+{netroot}; $self->{config}->{sm_base} = $+{root} . '/download/envmaps/'; bless( $self, $class ); $self->parse_xml; Loading Loading @@ -495,6 +510,11 @@ sub parse_xml_part { my $xp_info = XML::LibXML::XPathExpression->new('./itdInfoTextList/infoTextListElem'); my $xp_mapitem_rm = XML::LibXML::XPathExpression->new( './itdMapItemList/itdMapItem[@type="RM"]/itdImage'); my $xp_mapitem_sm = XML::LibXML::XPathExpression->new( './itdMapItemList/itdMapItem[@type="SM"]/itdImage'); my $xp_fare = XML::LibXML::XPathExpression->new('./itdFare/itdSingleTicket'); Loading Loading @@ -529,9 +549,26 @@ sub parse_xml_part { my $e_mot = ( $e->findnodes($xp_mot) )[0]; my $e_delay = ( $e->findnodes($xp_delay) )[0]; my @e_info = $e->findnodes($xp_info); my @e_dmap_rm = $e_dep->findnodes($xp_mapitem_rm); my @e_dmap_sm = $e_dep->findnodes($xp_mapitem_sm); my @e_amap_rm = $e_arr->findnodes($xp_mapitem_rm); my @e_amap_sm = $e_arr->findnodes($xp_mapitem_sm); my $delay = $e_delay ? $e_delay->getAttribute('delayMinutes') : 0; my ( @dep_rms, @dep_sms, @arr_rms, @arr_sms ); if ( $self->{config}->{rm_base} ) { my $base = $self->{config}->{rm_base}; @dep_rms = map { $base . $_->getAttribute('src') } @e_dmap_rm; @arr_rms = map { $base . $_->getAttribute('src') } @e_amap_rm; } if ( $self->{config}->{sm_base} ) { my $base = $self->{config}->{sm_base}; @dep_sms = map { $base . $_->getAttribute('src') } @e_dmap_sm; @arr_sms = map { $base . $_->getAttribute('src') } @e_amap_sm; } my $hash = { delay => $delay, departure_date => $self->itddate_str($e_ddate), Loading @@ -554,6 +591,11 @@ sub parse_xml_part { $hash->{$key} = decode( 'UTF-8', $hash->{$key} ); } $hash->{departure_routemaps} = \@dep_rms; $hash->{departure_stationmaps} = \@dep_sms; $hash->{arrival_routemaps} = \@arr_rms; $hash->{arrival_stationmaps} = \@arr_sms; for my $ve ( $e->findnodes($xp_via) ) { my $e_vdate = ( $ve->findnodes($xp_date) )[-1]; my $e_vtime = ( $ve->findnodes($xp_time) )[-1]; Loading
lib/Travel/Routing/DE/EFA/Route/Part.pm +50 −4 Original line number Diff line number Diff line Loading @@ -10,10 +10,10 @@ our $VERSION = '2.05'; Travel::Routing::DE::EFA::Route::Part->mk_ro_accessors( qw(arrival_platform arrival_stop arrival_date arrival_time arrival_sdate arrival_stime delay departure_platform departure_stop departure_date departure_time departure_sdate departure_stime train_line train_destination arrival_date arrival_time arrival_sdate arrival_stime delay departure_platform departure_stop departure_date departure_time departure_sdate departure_stime train_line train_destination ) ); Loading @@ -25,6 +25,18 @@ sub new { return bless( $ref, $obj ); } sub arrival_routemaps { my ($self) = @_; return @{ $self->{arrival_routemaps} }; } sub arrival_stationmaps { my ($self) = @_; return @{ $self->{arrival_stationmaps} }; } sub arrival_stop_and_platform { my ($self) = @_; Loading @@ -35,6 +47,18 @@ sub arrival_stop_and_platform { return $self->arrival_stop; } sub departure_routemaps { my ($self) = @_; return @{ $self->{departure_routemaps} }; } sub departure_stationmaps { my ($self) = @_; return @{ $self->{departure_stationmaps} }; } sub departure_stop_and_platform { my ($self) = @_; Loading Loading @@ -134,6 +158,17 @@ Scheduled arrival date in DD.MM.YYYY format Scheduled arrival time in HH:MM format =item $part->arrival_routemaps List of URLs, may be empty. Each URL poinst to a transfer map for the arrival station, usually outlining fow to transfer from this train to the next one (if applicable). =item $part->arrival_stationmaps List of URLs, may be empty. Each URL points to an HTML map of the arrival station. =item $part->delay delay in minutes, 0 if unknown Loading Loading @@ -166,6 +201,17 @@ Scheduled departure date in DD.MM.YYYY format Scheduled departure time in HH:MM format =item $part->departure_routemaps List of URLs, may be empty. Each URL points to a PDF a transfer map for the departure station, usually outlining fow to transfer from thep previous train (if applicable) to this one. =item $part->departure_stationmaps List of URLs, may be empty. Each URL poinst to an HTML map of the departure station. =item $part->extra Additional information about the connection. Returns a list of Loading
t/20-vrr.t +2 −0 Original line number Diff line number Diff line Loading @@ -16,6 +16,8 @@ sub efa_conf { efa_url => 'http://efa.vrr.de/vrr/XSLT_TRIP_REQUEST2', origin => ['Essen', 'HBf'], destination => ['Koeln', 'HBf'], rm_base => 'http://efa.vrr.de/vrr/', sm_base => 'http://efa.vrr.de/download/envmaps/', lwp_options => {}, submit => 0, }; Loading
t/21-vrr.t +10 −2 Original line number Diff line number Diff line Loading @@ -7,7 +7,7 @@ use utf8; use Encode qw(decode); use File::Slurp qw(slurp); use Test::More tests => 74; use Test::More tests => 82; BEGIN { use_ok('Travel::Routing::DE::EFA'); Loading @@ -16,7 +16,7 @@ require_ok('Travel::Routing::DE::EFA'); my $xml = slurp('t/in/e_alf_d_hbf.xml'); my $routing = Travel::Routing::DE::EFA->new_from_xml( xml => $xml ); my $routing = Travel::Routing::DE::EFA->new_from_xml( efa_url => 'http://efa.vrr.de/vrr/XSLT_TRIP_REQUEST2', xml => $xml ); isa_ok( $routing, 'Travel::Routing::DE::EFA' ); can_ok( $routing, 'routes' ); Loading Loading @@ -52,6 +52,10 @@ my ( $c0, $c1 ) = $r0->parts; is( $c0->delay, 0, 'r0,0: delay' ); is_deeply( [ $c0->extra ], [], 'r0,0: extra' ); is_deeply( [ $c0->departure_routemaps ], ['http://efa.vrr.de/vrr/FILELOAD?Filename=dwa_4ED23486C.pdf'], 'r0,0: departure_routemaps'); is_deeply( [ $c0->departure_stationmaps ], [], 'r0,0: departure_stationmaps'); is_deeply( [ $c0->arrival_routemaps ], ['http://efa.vrr.de/vrr/FILELOAD?Filename=dwa_4ED23486D.pdf'], 'r0,0: arrival_routemaps'); is_deeply( [ $c0->arrival_stationmaps ], ['http://efa.vrr.de/download/envmaps/vrr/09289_e_hbf_1.htm'], 'r0,0: arrival_stationmaps'); is( $c0->train_line, decode( 'UTF-8', 'Straßenbahn 107' ), 'r0,0: line' ); is( $c0->train_destination, 'Essen Hanielstr. Schleife', 'r0,0: dest' ); is( $c0->departure_stop, 'Essen Alfredusbad', 'r0,0: dstop' ); Loading Loading @@ -84,6 +88,10 @@ is_deeply( [ decode( 'UTF-8', 'Fahrradmitnahme begrenzt möglich' ) ], 'r0,1: extra' ); is_deeply( [ $c1->departure_routemaps ], ['http://efa.vrr.de/vrr/FILELOAD?Filename=dwa_4ED23486D.pdf'], 'r0,0: departure_routemaps'); is_deeply( [ $c1->departure_stationmaps ], ['http://efa.vrr.de/download/envmaps/vrr/09289_e_hbf_1.htm'], 'r0,0: departure_stationmaps'); is_deeply( [ $c1->arrival_routemaps ], ['http://efa.vrr.de/vrr/FILELOAD?Filename=dwa_4ED23486E.pdf'], 'r0,0: arrival_routemaps'); is_deeply( [ $c1->arrival_stationmaps ], ['http://efa.vrr.de/download/envmaps/vrr/18235_d_hbf_1.htm'], 'r0,0: arrival_stationmaps'); is( $c1->train_line, 'R-Bahn RE1', 'r0,1: line' ); is( $c1->train_destination, 'Aachen, Hbf', 'r0,1: dest' ); is( $c1->departure_stop, 'Essen Hauptbahnhof', 'r0,1: dstop' ); Loading