summaryrefslogtreecommitdiff
path: root/lib/Travel/Status/DE/DBRIS/Stop.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Travel/Status/DE/DBRIS/Stop.pm')
-rw-r--r--lib/Travel/Status/DE/DBRIS/Stop.pm87
1 files changed, 87 insertions, 0 deletions
diff --git a/lib/Travel/Status/DE/DBRIS/Stop.pm b/lib/Travel/Status/DE/DBRIS/Stop.pm
new file mode 100644
index 0000000..d717ec4
--- /dev/null
+++ b/lib/Travel/Status/DE/DBRIS/Stop.pm
@@ -0,0 +1,87 @@
+package Travel::Status::DE::DBRIS::Stop;
+
+use strict;
+use warnings;
+use 5.020;
+
+use parent 'Class::Accessor';
+
+our $VERSION = '0.01';
+
+Travel::Status::DE::DBRIS::Stop->mk_ro_accessors(
+ qw(type dep sched_dep rt_dep delay is_cancelled line stop_eva id platform rt_platform destination via via_last)
+);
+
+sub new {
+ my ( $obj, %opt ) = @_;
+
+ my $json = $opt{json};
+ my $strptime = $opt{strptime_obj};
+
+ my $ref = {
+ type => $json->{verkehrmittel}{kurzText},
+ line => $json->{verkehrmittel}{mittelText},
+ id => $json->{journeyId},
+ stop_eva => $json->{bahnhofsId},
+ destination => $json->{terminus},
+ platform => $json->{gleis},
+ rt_platform => $json->{ezGleis},
+ via => $json->{ueber},
+ via_last => ( $json->{ueber} // [] )->[-1],
+ };
+
+ bless( $ref, $obj );
+
+ if ( $json->{zeit} ) {
+ $ref->{sched_dep} = $strptime->parse_datetime( $json->{zeit} );
+ }
+ if ( $json->{ezZeit} ) {
+ $ref->{rt_dep} = $strptime->parse_datetime( $json->{ezZeit} );
+ }
+ $ref->{dep} = $ref->{rt_dep} // $ref->{sched_dep};
+
+ if ( $ref->{sched_dep} and $ref->{rt_dep} ) {
+ $ref->{delay} = $ref->{rt_dep}->subtract_datetime( $ref->{sched_dep} )
+ ->in_units('minutes');
+ }
+
+ for my $message ( @{ $json->{meldungen} // [] } ) {
+ if ( $message->{type} and $message->{type} eq 'HALT_AUSFALL' ) {
+ $ref->{is_cancelled} = 1;
+ }
+ push( @{ $ref->{messages} }, $message );
+ }
+
+ return $ref;
+}
+
+sub route {
+ my ($self) = @_;
+
+ if ( $self->{route} ) {
+ return @{ $self->{route} };
+ }
+
+ @{ $self->{route} }
+ = map { Travel::Status::DE::DBRIS::Location->new( json => $_ ) }
+ ( @{ $self->{raw_route} // [] },
+ @{ $self->{raw_cancelled_route} // [] } );
+
+ return @{ $self->{route} };
+}
+
+sub messages {
+ my ($self) = @_;
+
+ return @{ $self->{messages} // [] };
+}
+
+sub TO_JSON {
+ my ($self) = @_;
+
+ my $ret = { %{$self} };
+
+ return $ret;
+}
+
+1;