diff options
author | Birte Kristina Friesel <derf@finalrewind.org> | 2024-09-26 05:09:21 +0200 |
---|---|---|
committer | Birte Kristina Friesel <derf@finalrewind.org> | 2024-09-26 05:09:21 +0200 |
commit | 3752aa0fb16aaee7b8b55f5bdac42f21b3d0ee43 (patch) | |
tree | 0182d89ad528e25b743fadd7285cee4e24c7863a /lib/Travel | |
parent | 385b25b93a3f10a4044df9fc73027b8ae70dbc8a (diff) |
Trip->route: return Stop instances
Diffstat (limited to 'lib/Travel')
-rw-r--r-- | lib/Travel/Status/DE/EFA/Stop.pm | 9 | ||||
-rw-r--r-- | lib/Travel/Status/DE/EFA/Trip.pm | 28 |
2 files changed, 31 insertions, 6 deletions
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}, - } + ) ); } |