From 3752aa0fb16aaee7b8b55f5bdac42f21b3d0ee43 Mon Sep 17 00:00:00 2001 From: Birte Kristina Friesel Date: Thu, 26 Sep 2024 05:09:21 +0200 Subject: Trip->route: return Stop instances --- lib/Travel/Status/DE/EFA/Stop.pm | 9 ++++++++- lib/Travel/Status/DE/EFA/Trip.pm | 28 +++++++++++++++++++++++----- 2 files changed, 31 insertions(+), 6 deletions(-) (limited to 'lib/Travel') diff --git a/lib/Travel/Status/DE/EFA/Stop.pm b/lib/Travel/Status/DE/EFA/Stop.pm index 0332311..1df8cc8 100644 --- a/lib/Travel/Status/DE/EFA/Stop.pm +++ b/lib/Travel/Status/DE/EFA/Stop.pm @@ -9,13 +9,20 @@ use parent 'Class::Accessor'; our $VERSION = '2.02'; Travel::Status::DE::EFA::Stop->mk_ro_accessors( - qw(arr dep place name full_name id platform)); + qw(sched_arr rt_arr arr + sched_dep rt_dep dep + place name full_name id latlon + platform niveau) +); sub new { my ( $obj, %conf ) = @_; my $ref = \%conf; + $ref->{arr} //= $ref->{rt_arr} // $ref->{sched_arr}; + $ref->{dep} //= $ref->{rt_dep} // $ref->{sched_dep}; + return bless( $ref, $obj ); } diff --git a/lib/Travel/Status/DE/EFA/Trip.pm b/lib/Travel/Status/DE/EFA/Trip.pm index 3f5b134..9c83816 100644 --- a/lib/Travel/Status/DE/EFA/Trip.pm +++ b/lib/Travel/Status/DE/EFA/Trip.pm @@ -5,6 +5,7 @@ use warnings; use 5.010; use DateTime::Format::Strptime; +use Travel::Status::DE::EFA::Stop; use parent 'Class::Accessor'; @@ -63,20 +64,37 @@ sub route { } for my $stop ( @{ $self->{route_raw} // [] } ) { + my $chain = $stop; + my ( $platform, $place, $name, $name_full ); + while ( $chain->{type} ) { + if ( $chain->{type} eq 'platform' ) { + $platform = $chain->{properties}{platformName} + // $chain->{properties}{platform}; + } + elsif ( $chain->{type} eq 'stop' ) { + $name = $chain->{disassembledName}; + $name_full = $chain->{name}; + } + elsif ( $chain->{type} eq 'locality' ) { + $place = $chain->{name}; + } + $chain = $chain->{parent}; + } push( @{ $self->{route} }, - { + Travel::Status::DE::EFA::Stop->new( sched_arr => $self->parse_dt( $stop->{arrivalTimePlanned} ), sched_dep => $self->parse_dt( $stop->{departureTimePlanned} ), rt_arr => $self->parse_dt( $stop->{arrivalTimeEstimated} ), rt_dep => $self->parse_dt( $stop->{departureTimeEstimated} ), latlon => $stop->{coord}, - name_full => $stop->{name}, - name => $stop->{parent}{disassembledName}, - place => $stop->{parent}{parent}{name}, + full_name => $name_full, + name => $name, + place => $place, niveau => $stop->{niveau}, + platform => $platform, id => $stop->{id}, - } + ) ); } -- cgit v1.2.3