diff options
author | Daniel Friesel <derf@finalrewind.org> | 2015-12-21 18:45:58 +0100 |
---|---|---|
committer | Daniel Friesel <derf@finalrewind.org> | 2015-12-21 18:45:58 +0100 |
commit | 702918a5e19153c1de8af669743eed8bb46f3487 (patch) | |
tree | fbcc41f787004f6d46a9e635796aa19d72a3e41e | |
parent | 1737099d4b5629903eaea16e367980dffa80d281 (diff) |
Result: Add ->datetime, ->countdown and ->countdown_sec accessors
-rwxr-xr-x | Build.PL | 2 | ||||
-rw-r--r-- | Changelog | 5 | ||||
-rw-r--r-- | README | 2 | ||||
-rw-r--r-- | lib/Travel/Status/DE/HAFAS.pm | 14 | ||||
-rw-r--r-- | lib/Travel/Status/DE/HAFAS/Result.pm | 22 |
5 files changed, 44 insertions, 1 deletions
@@ -20,6 +20,8 @@ Module::Build->new( 'perl' => '5.10.1', 'Carp' => 0, 'Class::Accessor' => '0.16', + 'DateTime' => 0, + 'DateTime::Format::Strptime' => 0, 'Getopt::Long' => 0, 'JSON' => 0, 'List::MoreUtils' => 0, @@ -1,3 +1,8 @@ +git HEAD + + * New dependencies: DateTime and DateTime::Format::Strptime + * Result: New accessors ->datetime, ->countdown and ->countdown_sec + Travel::Status::DE::DeutscheBahn 2.01 - Sat Oct 10 2015 * Result: Fix ->type accessor (was not working for all backends) @@ -10,6 +10,8 @@ Dependencies * perl version 5.10.1 or newer * Class::Accessor + * DateTime + * DateTime::Format::Strptime * JSON * List::MoreUtils * LWP::UserAgent (usually shipped by libwww-perl) diff --git a/lib/Travel/Status/DE/HAFAS.pm b/lib/Travel/Status/DE/HAFAS.pm index 55c79df..a0535c3 100644 --- a/lib/Travel/Status/DE/HAFAS.pm +++ b/lib/Travel/Status/DE/HAFAS.pm @@ -8,6 +8,8 @@ use utf8; no if $] >= 5.018, warnings => 'experimental::smartmatch'; use Carp qw(confess); +use DateTime; +use DateTime::Format::Strptime; use LWP::UserAgent; use POSIX qw(strftime); use Travel::Status::DE::HAFAS::Result; @@ -291,6 +293,14 @@ sub results { $self->{results} = []; + $self->{datetime_now} //= DateTime->now( + time_zone => 'Europe/Berlin', + ); + $self->{strptime_obj} //= DateTime::Format::Strptime->new( + pattern => '%d.%m.%YT%H:%M', + time_zone => 'Europe/Berlin', + ); + for my $tr ( @{ $self->{tree}->findnodes($xp_element) } ) { my @message_nodes = $tr->findnodes($xp_msg); @@ -328,10 +338,14 @@ sub results { $train =~ s{#.*$}{}; + my $datetime = $self->{strptime_obj}->parse_datetime("${date}T${time}"); + push( @{ $self->{results} }, Travel::Status::DE::HAFAS::Result->new( date => $date, + datetime => $datetime, + datetime_now => $self->{datetime_now}, raw_delay => $delay, raw_e_delay => $e_delay, messages => \@messages, diff --git a/lib/Travel/Status/DE/HAFAS/Result.pm b/lib/Travel/Status/DE/HAFAS/Result.pm index d2d27ab..117e1ea 100644 --- a/lib/Travel/Status/DE/HAFAS/Result.pm +++ b/lib/Travel/Status/DE/HAFAS/Result.pm @@ -11,7 +11,7 @@ use parent 'Class::Accessor'; our $VERSION = '2.01'; Travel::Status::DE::HAFAS::Result->mk_ro_accessors( - qw(date info raw_e_delay raw_delay time train route_end)); + qw(date datetime info raw_e_delay raw_delay time train route_end)); sub new { my ( $obj, %conf ) = @_; @@ -21,6 +21,26 @@ sub new { return bless( $ref, $obj ); } +sub countdown { + my ($self) = @_; + + $self->{countdown} + //= $self->datetime->subtract_datetime( $self->{datetime_now} ) + ->in_units('minutes'); + + return $self->{countdown}; +} + +sub countdown_sec { + my ($self) = @_; + + $self->{countdown_sec} + //= $self->datetime->subtract_datetime( $self->{datetime_now} ) + ->in_units('seconds'); + + return $self->{countdown_sec}; +} + sub delay { my ($self) = @_; |