From 6b2932cd9b7df92ec8a35326fa861fa4291f0fb4 Mon Sep 17 00:00:00 2001 From: Daniel Friesel Date: Fri, 9 Oct 2015 18:26:41 +0200 Subject: use Stop.pm for stop data instead of arrayrefs --- bin/aseag-m | 10 ++-- lib/Travel/Status/DE/URA.pm | 17 +++--- lib/Travel/Status/DE/URA/Result.pm | 2 +- lib/Travel/Status/DE/URA/Stop.pm | 114 +++++++++++++++++++++++++++++++++++++ 4 files changed, 130 insertions(+), 13 deletions(-) create mode 100644 lib/Travel/Status/DE/URA/Stop.pm diff --git a/bin/aseag-m b/bin/aseag-m index 7edb7d6..999d4a6 100755 --- a/bin/aseag-m +++ b/bin/aseag-m @@ -136,16 +136,18 @@ sub show_route { @res = map { [ $dt_format->format_duration( - $_->[0]->subtract_datetime($dt_now) + $_->datetime->subtract_datetime($dt_now) ), q{}, - $_->[1] + $_->name, + q{}, ] } @routes; } else { - @res = map { [ $_->[0]->strftime($strftime_format), q{}, $_->[1] ] } - @routes; + @res = map { + [ $_->datetime->strftime($strftime_format), q{}, $_->name, q{}, ] + } @routes; } return @res; diff --git a/lib/Travel/Status/DE/URA.pm b/lib/Travel/Status/DE/URA.pm index f86d05c..5eee5d8 100644 --- a/lib/Travel/Status/DE/URA.pm +++ b/lib/Travel/Status/DE/URA.pm @@ -15,6 +15,7 @@ use List::MoreUtils qw(firstval none uniq); use LWP::UserAgent; use Text::CSV; use Travel::Status::DE::URA::Result; +use Travel::Status::DE::URA::Stop; sub new { my ( $class, %opt ) = @_; @@ -188,22 +189,22 @@ sub results { map { [ $_, $_->[0] ] } @route_post; @route_pre = map { - [ - DateTime->from_epoch( + Travel::Status::DE::URA::Stop->new( + datetime => DateTime->from_epoch( epoch => $_->[0], time_zone => 'Europe/Berlin' ), - decode( 'UTF-8', $_->[1] ) - ] + name => decode( 'UTF-8', $_->[1] ) + ) } @route_pre; @route_post = map { - [ - DateTime->from_epoch( + Travel::Status::DE::URA::Stop->new( + datetime => DateTime->from_epoch( epoch => $_->[0], time_zone => 'Europe/Berlin' ), - decode( 'UTF-8', $_->[1] ) - ] + name => decode( 'UTF-8', $_->[1] ) + ) } @route_post; } diff --git a/lib/Travel/Status/DE/URA/Result.pm b/lib/Travel/Status/DE/URA/Result.pm index 8ead690..b3a17c3 100644 --- a/lib/Travel/Status/DE/URA/Result.pm +++ b/lib/Travel/Status/DE/URA/Result.pm @@ -59,7 +59,7 @@ sub type { sub route_interesting { my ( $self, $max_parts ) = @_; - my @via = map { $_->[1] } @{ $self->{route_post} }; + my @via = map { $_->name } @{ $self->{route_post} }; my ( @via_main, @via_show, $last_stop ); $max_parts //= 3; diff --git a/lib/Travel/Status/DE/URA/Stop.pm b/lib/Travel/Status/DE/URA/Stop.pm new file mode 100644 index 0000000..73543c8 --- /dev/null +++ b/lib/Travel/Status/DE/URA/Stop.pm @@ -0,0 +1,114 @@ +package Travel::Status::DE::URA::Stop; + +use strict; +use warnings; +use 5.010; + +use parent 'Class::Accessor'; + +our $VERSION = '0.04'; + +Travel::Status::DE::URA::Stop->mk_ro_accessors(qw(datetime name)); + +sub new { + my ( $obj, %conf ) = @_; + + my $ref = \%conf; + + return bless( $ref, $obj ); +} + +sub date { + my ($self) = @_; + + return $self->{datetime}->strftime('%d.%m.%Y'); +} + +sub time { + my ($self) = @_; + + return $self->{datetime}->strftime('%H:%M:%S'); +} + +sub TO_JSON { + my ($self) = @_; + + return { %{$self} }; +} + +1; + +__END__ + +=head1 NAME + +Travel::Status::DE::URA::Stop - Information about a stop + +=head1 SYNOPSIS + + for my $stop ($departure->route_post) { + printf( + "%s %s\n", + $stop->time, $stop->name + ); + } + +=head1 VERSION + +version 0.04 + +=head1 DESCRIPTION + +Travel::Status::DE::URA::Stop describes a single stop of a departure's route. + +=head1 METHODS + +=head2 ACCESSORS + +=over + +=item $stop->datetime + +DateTime object holding the arrival/departure date and time. + +=item $stop->date + +Arrival/departure date in dd.mm.YYYY format. + +=item $stop->time + +Arrival/departure time in HH:MM:SS format. + +=item $stop->name + +Stop name. + +=back + +=head1 DIAGNOSTICS + +None. + +=head1 DEPENDENCIES + +=over + +=item Class::Accessor(3pm) + +=back + +=head1 BUGS AND LIMITATIONS + +Unknown. + +=head1 SEE ALSO + +Travel::Status::DE::URA(3pm). + +=head1 AUTHOR + +Copyright (C) 2015 by Daniel Friesel Ederf@finalrewind.orgE + +=head1 LICENSE + +This module is licensed under the same terms as Perl itself. -- cgit v1.2.3