Loading Changelog +2 −0 Original line number Original line Diff line number Diff line Loading @@ -6,6 +6,8 @@ git HEAD and expected arrival at a destination station and expected arrival at a destination station * db-iris: Add -r / --realtime option to compute times using delay * db-iris: Add -r / --realtime option to compute times using delay data data * Result: Remove duplicates in qos_messages and delay_messages, return all messages in reverse order (newest first) Travel::Status::DE::IRIS 0.01 - Fri Jan 24 2014 Travel::Status::DE::IRIS 0.01 - Fri Jan 24 2014 Loading bin/db-iris +4 −6 Original line number Original line Diff line number Diff line Loading @@ -200,8 +200,7 @@ sub display_result { if ( $edata{delays} if ( $edata{delays} and $d->delay_messages ) and $d->delay_messages ) { { printf( ' %s', printf( ' %s', join( q{ }, map { $_->[1] } $d->delay_messages ) ); join( q{ }, map { $_->[1] } ( reverse $d->delay_messages ) ) ); } } if ( $edata{delay} if ( $edata{delay} and ( $d->delay or $d->is_cancelled ) and ( $d->delay or $d->is_cancelled ) Loading @@ -210,8 +209,7 @@ sub display_result { printf( ' %s', ( $d->delay_messages )[-1]->[1] ); printf( ' %s', ( $d->delay_messages )[-1]->[1] ); } } if ( $edata{qos} and $d->qos_messages ) { if ( $edata{qos} and $d->qos_messages ) { printf( ' %s', printf( ' %s', join( q{ }, map { $_->[1] } $d->qos_messages ) ); join( q{ }, map { $_->[1] } ( reverse $d->qos_messages ) ) ); } } print "\n"; print "\n"; Loading @@ -233,7 +231,7 @@ sub display_result { } } if ( $edata{messages} ) { if ( $edata{messages} ) { for my $message ( reverse $d->messages ) { for my $message ( $d->messages ) { # leading spaces to align with regular output # leading spaces to align with regular output printf( " %s %s\n", printf( " %s %s\n", Loading Loading @@ -520,7 +518,7 @@ None. =head1 BUGS AND LIMITATIONS =head1 BUGS AND LIMITATIONS B<-oD> and B<-oq> contain duplicate entries. Unknown. =head1 AUTHOR =head1 AUTHOR Loading lib/Travel/Status/DE/IRIS/Result.pm +30 −26 Original line number Original line Diff line number Diff line Loading @@ -11,7 +11,7 @@ use parent 'Class::Accessor'; use Carp qw(cluck); use Carp qw(cluck); use DateTime; use DateTime; use DateTime::Format::Strptime; use DateTime::Format::Strptime; use List::MoreUtils qw(none uniq); use List::MoreUtils qw(none uniq firstval); our $VERSION = '0.01'; our $VERSION = '0.01'; Loading Loading @@ -181,13 +181,16 @@ sub delay_messages { time_zone => 'Europe/Berlin', time_zone => 'Europe/Berlin', ); ); my @keys = sort keys %{ $self->{messages} }; my @keys = reverse sort keys %{ $self->{messages} }; my @msgs my @msgs = grep { $_->[1] eq 'd' } map { $self->{messages}{$_} } @keys; = uniq( grep { $_->[1] eq 'd' } map { $self->{messages}{$_} } @keys ); my @msgids = uniq( map { $_->[2] } @msgs ); my @ret; my @ret = map { for my $id (@msgids) { [ $strp->parse_datetime( $_->[0] ), $self->translate_msg( $_->[2] ) ] my $msg = firstval { $_->[2] == $id } @msgs; } @msgs; push( @ret, [ $strp->parse_datetime( $msg->[0] ), $self->translate_msg($id) ] ); } return @ret; return @ret; } } Loading @@ -208,17 +211,18 @@ sub qos_messages { if ( my @superseded = $self->superseded_messages( $msg->[2] ) ) { if ( my @superseded = $self->superseded_messages( $msg->[2] ) ) { @ret = grep { not( $_->[2] ~~ \@superseded ) } @ret; @ret = grep { not( $_->[2] ~~ \@superseded ) } @ret; } } @ret = grep { $_->[2] != $msg->[2] } @ret; # 88 is "no qos shortcomings" and only required to filter previous # 88 is "no qos shortcomings" and only required to filter previous # qos messages # qos messages if ( $msg->[2] != 88 and ( none { $_->[2] == $msg->[2] } @ret ) ) { if ( $msg->[2] != 88 ) { push( @ret, $msg ); push( @ret, $msg ); } } } } @ret = map { @ret = map { [ $strp->parse_datetime( $_->[0] ), $self->translate_msg( $_->[2] ) ] [ $strp->parse_datetime( $_->[0] ), $self->translate_msg( $_->[2] ) ] } @ret; } reverse @ret; return @ret; return @ret; } } Loading @@ -231,7 +235,7 @@ sub messages { time_zone => 'Europe/Berlin', time_zone => 'Europe/Berlin', ); ); my @messages = sort keys %{ $self->{messages} }; my @messages = reverse sort keys %{ $self->{messages} }; my @ret = map { my @ret = map { [ [ $strp->parse_datetime( $self->{messages}->{$_}->[0] ), $strp->parse_datetime( $self->{messages}->{$_}->[0] ), Loading Loading @@ -511,11 +515,11 @@ arrived early. =item $result->delay_messages =item $result->delay_messages Get all delay messages entered for this train. Returns a list Get all delay messages entered for this train. Returns a list of [datetime, of [datetime, string] listrefs. The datetime part is a DateTime(3pm) object string] listrefs sorted by newest first. The datetime part is a DateTime(3pm) corresponding to the point in time when the message was entered, the string object corresponding to the point in time when the message was entered, the is the message. If a delay reason was entered more than once, only its oldest string is the message. If a delay reason was entered more than once, only its record will be returned. most recent record will be returned. =item $result->departure =item $result->departure Loading Loading @@ -553,11 +557,11 @@ Example: For the line C<< S 1 >>, line_no will return C<< 1 >>. =item $result->messages =item $result->messages Get all qos and delay messages ever entered for this train. Returns a list Get all qos and delay messages ever entered for this train. Returns a list of of [datetime, string] listrefs. The datetime part is a DateTime(3pm) object [datetime, string] listrefs sorted by newest first. The datetime part is a corresponding to the point in time when the message was entered, the string DateTime(3pm) object corresponding to the point in time when the message was is the message. Note that neither duplicates nor superseded messages are entered, the string is the message. Note that neither duplicates nor superseded filtered from this list. messages are filtered from this list. =item $result->origin =item $result->origin Loading @@ -565,10 +569,11 @@ Alias for route_start. =item $result->qos_messages =item $result->qos_messages Get all current qos messages for this train. Returns a list Get all current qos messages for this train. Returns a list of [datetime, of [datetime, string] listrefs. The datetime part is a DateTime(3pm) object string] listrefs sorted by newest first. The datetime part is a DateTime(3pm) corresponding to the point in time when the message was entered, the string object corresponding to the point in time when the message was entered, the is the message. Contains neither superseded messages nor duplicates. string is the message. Contains neither superseded messages nor duplicates (in case of a duplicate, only the most recent message is present) =item $result->platform =item $result->platform Loading Loading @@ -882,8 +887,7 @@ None. =head1 BUGS AND LIMITATIONS =head1 BUGS AND LIMITATIONS The messages returned by B<delay_messages> and B<qos_messages> contain Unknown. duplicates. =head1 SEE ALSO =head1 SEE ALSO Loading t/32-result-messages.t +40 −28 Original line number Original line Diff line number Diff line Loading @@ -31,26 +31,38 @@ my $s9 = $results[8]; my $hkx = $results[10]; my $hkx = $results[10]; my $abr = $results[13]; my $abr = $results[13]; is_deeply([$ice645->info], is_deeply( [ $ice645->info ], [ 'Witterungsbedingte Störung', 'Unwetter', 'Abweichende Wagenreihung' ], [ 'Witterungsbedingte Störung', 'Unwetter', 'Abweichende Wagenreihung' ], 'info: no dups, sorted, msg+qos'); 'info: no dups, sorted, msg+qos' ); is_deeply([$ice645->messages], [ is_deeply( ['2014-01-03T19:03:00', 'Witterungsbedingte Störung'], [ $ice645->messages ], ['2014-01-03T19:15:00', 'Witterungsbedingte Störung'], [ ['2014-01-03T19:48:00', 'Witterungsbedingte Störung'], [ '2014-01-03T20:02:00', 'Abweichende Wagenreihung' ], ['2014-01-03T19:58:00', 'Witterungsbedingte Störung'], ['2014-01-03T19:59:00', 'Witterungsbedingte Störung'], ['2014-01-03T20:00:00', 'Witterungsbedingte Störung'], [ '2014-01-03T20:01:00', 'Unwetter' ], [ '2014-01-03T20:01:00', 'Unwetter' ], ['2014-01-03T20:02:00', 'Abweichende Wagenreihung']], 'messages: with dups'); [ '2014-01-03T20:00:00', 'Witterungsbedingte Störung' ], [ '2014-01-03T19:59:00', 'Witterungsbedingte Störung' ], [ '2014-01-03T19:58:00', 'Witterungsbedingte Störung' ], [ '2014-01-03T19:48:00', 'Witterungsbedingte Störung' ], [ '2014-01-03T19:15:00', 'Witterungsbedingte Störung' ], [ '2014-01-03T19:03:00', 'Witterungsbedingte Störung' ] ], 'messages: with dups' ); is_deeply([$ice645->qos_messages], [ is_deeply( ['2014-01-03T20:02:00', 'Abweichende Wagenreihung']], 'qos_messages'); [ $ice645->qos_messages ], [ [ '2014-01-03T20:02:00', 'Abweichende Wagenreihung' ] ], 'qos_messages' ); TODO: { is_deeply( local $TODO = 'no duplicate finding yet'; [ $ice645->delay_messages ], is_deeply([$ice645->delay_messages], [ [ ['2014-01-03T19:03:00', 'Witterungsbedingte Störung'], [ '2014-01-03T20:01:00', 'Unwetter' ], ['2014-01-03T20:01:00', 'Unwetter']], 'delay_messages: no dups'); [ '2014-01-03T20:00:00', 'Witterungsbedingte Störung' ] } ], 'delay_messages: no dups' ); Loading
Changelog +2 −0 Original line number Original line Diff line number Diff line Loading @@ -6,6 +6,8 @@ git HEAD and expected arrival at a destination station and expected arrival at a destination station * db-iris: Add -r / --realtime option to compute times using delay * db-iris: Add -r / --realtime option to compute times using delay data data * Result: Remove duplicates in qos_messages and delay_messages, return all messages in reverse order (newest first) Travel::Status::DE::IRIS 0.01 - Fri Jan 24 2014 Travel::Status::DE::IRIS 0.01 - Fri Jan 24 2014 Loading
bin/db-iris +4 −6 Original line number Original line Diff line number Diff line Loading @@ -200,8 +200,7 @@ sub display_result { if ( $edata{delays} if ( $edata{delays} and $d->delay_messages ) and $d->delay_messages ) { { printf( ' %s', printf( ' %s', join( q{ }, map { $_->[1] } $d->delay_messages ) ); join( q{ }, map { $_->[1] } ( reverse $d->delay_messages ) ) ); } } if ( $edata{delay} if ( $edata{delay} and ( $d->delay or $d->is_cancelled ) and ( $d->delay or $d->is_cancelled ) Loading @@ -210,8 +209,7 @@ sub display_result { printf( ' %s', ( $d->delay_messages )[-1]->[1] ); printf( ' %s', ( $d->delay_messages )[-1]->[1] ); } } if ( $edata{qos} and $d->qos_messages ) { if ( $edata{qos} and $d->qos_messages ) { printf( ' %s', printf( ' %s', join( q{ }, map { $_->[1] } $d->qos_messages ) ); join( q{ }, map { $_->[1] } ( reverse $d->qos_messages ) ) ); } } print "\n"; print "\n"; Loading @@ -233,7 +231,7 @@ sub display_result { } } if ( $edata{messages} ) { if ( $edata{messages} ) { for my $message ( reverse $d->messages ) { for my $message ( $d->messages ) { # leading spaces to align with regular output # leading spaces to align with regular output printf( " %s %s\n", printf( " %s %s\n", Loading Loading @@ -520,7 +518,7 @@ None. =head1 BUGS AND LIMITATIONS =head1 BUGS AND LIMITATIONS B<-oD> and B<-oq> contain duplicate entries. Unknown. =head1 AUTHOR =head1 AUTHOR Loading
lib/Travel/Status/DE/IRIS/Result.pm +30 −26 Original line number Original line Diff line number Diff line Loading @@ -11,7 +11,7 @@ use parent 'Class::Accessor'; use Carp qw(cluck); use Carp qw(cluck); use DateTime; use DateTime; use DateTime::Format::Strptime; use DateTime::Format::Strptime; use List::MoreUtils qw(none uniq); use List::MoreUtils qw(none uniq firstval); our $VERSION = '0.01'; our $VERSION = '0.01'; Loading Loading @@ -181,13 +181,16 @@ sub delay_messages { time_zone => 'Europe/Berlin', time_zone => 'Europe/Berlin', ); ); my @keys = sort keys %{ $self->{messages} }; my @keys = reverse sort keys %{ $self->{messages} }; my @msgs my @msgs = grep { $_->[1] eq 'd' } map { $self->{messages}{$_} } @keys; = uniq( grep { $_->[1] eq 'd' } map { $self->{messages}{$_} } @keys ); my @msgids = uniq( map { $_->[2] } @msgs ); my @ret; my @ret = map { for my $id (@msgids) { [ $strp->parse_datetime( $_->[0] ), $self->translate_msg( $_->[2] ) ] my $msg = firstval { $_->[2] == $id } @msgs; } @msgs; push( @ret, [ $strp->parse_datetime( $msg->[0] ), $self->translate_msg($id) ] ); } return @ret; return @ret; } } Loading @@ -208,17 +211,18 @@ sub qos_messages { if ( my @superseded = $self->superseded_messages( $msg->[2] ) ) { if ( my @superseded = $self->superseded_messages( $msg->[2] ) ) { @ret = grep { not( $_->[2] ~~ \@superseded ) } @ret; @ret = grep { not( $_->[2] ~~ \@superseded ) } @ret; } } @ret = grep { $_->[2] != $msg->[2] } @ret; # 88 is "no qos shortcomings" and only required to filter previous # 88 is "no qos shortcomings" and only required to filter previous # qos messages # qos messages if ( $msg->[2] != 88 and ( none { $_->[2] == $msg->[2] } @ret ) ) { if ( $msg->[2] != 88 ) { push( @ret, $msg ); push( @ret, $msg ); } } } } @ret = map { @ret = map { [ $strp->parse_datetime( $_->[0] ), $self->translate_msg( $_->[2] ) ] [ $strp->parse_datetime( $_->[0] ), $self->translate_msg( $_->[2] ) ] } @ret; } reverse @ret; return @ret; return @ret; } } Loading @@ -231,7 +235,7 @@ sub messages { time_zone => 'Europe/Berlin', time_zone => 'Europe/Berlin', ); ); my @messages = sort keys %{ $self->{messages} }; my @messages = reverse sort keys %{ $self->{messages} }; my @ret = map { my @ret = map { [ [ $strp->parse_datetime( $self->{messages}->{$_}->[0] ), $strp->parse_datetime( $self->{messages}->{$_}->[0] ), Loading Loading @@ -511,11 +515,11 @@ arrived early. =item $result->delay_messages =item $result->delay_messages Get all delay messages entered for this train. Returns a list Get all delay messages entered for this train. Returns a list of [datetime, of [datetime, string] listrefs. The datetime part is a DateTime(3pm) object string] listrefs sorted by newest first. The datetime part is a DateTime(3pm) corresponding to the point in time when the message was entered, the string object corresponding to the point in time when the message was entered, the is the message. If a delay reason was entered more than once, only its oldest string is the message. If a delay reason was entered more than once, only its record will be returned. most recent record will be returned. =item $result->departure =item $result->departure Loading Loading @@ -553,11 +557,11 @@ Example: For the line C<< S 1 >>, line_no will return C<< 1 >>. =item $result->messages =item $result->messages Get all qos and delay messages ever entered for this train. Returns a list Get all qos and delay messages ever entered for this train. Returns a list of of [datetime, string] listrefs. The datetime part is a DateTime(3pm) object [datetime, string] listrefs sorted by newest first. The datetime part is a corresponding to the point in time when the message was entered, the string DateTime(3pm) object corresponding to the point in time when the message was is the message. Note that neither duplicates nor superseded messages are entered, the string is the message. Note that neither duplicates nor superseded filtered from this list. messages are filtered from this list. =item $result->origin =item $result->origin Loading @@ -565,10 +569,11 @@ Alias for route_start. =item $result->qos_messages =item $result->qos_messages Get all current qos messages for this train. Returns a list Get all current qos messages for this train. Returns a list of [datetime, of [datetime, string] listrefs. The datetime part is a DateTime(3pm) object string] listrefs sorted by newest first. The datetime part is a DateTime(3pm) corresponding to the point in time when the message was entered, the string object corresponding to the point in time when the message was entered, the is the message. Contains neither superseded messages nor duplicates. string is the message. Contains neither superseded messages nor duplicates (in case of a duplicate, only the most recent message is present) =item $result->platform =item $result->platform Loading Loading @@ -882,8 +887,7 @@ None. =head1 BUGS AND LIMITATIONS =head1 BUGS AND LIMITATIONS The messages returned by B<delay_messages> and B<qos_messages> contain Unknown. duplicates. =head1 SEE ALSO =head1 SEE ALSO Loading
t/32-result-messages.t +40 −28 Original line number Original line Diff line number Diff line Loading @@ -31,26 +31,38 @@ my $s9 = $results[8]; my $hkx = $results[10]; my $hkx = $results[10]; my $abr = $results[13]; my $abr = $results[13]; is_deeply([$ice645->info], is_deeply( [ $ice645->info ], [ 'Witterungsbedingte Störung', 'Unwetter', 'Abweichende Wagenreihung' ], [ 'Witterungsbedingte Störung', 'Unwetter', 'Abweichende Wagenreihung' ], 'info: no dups, sorted, msg+qos'); 'info: no dups, sorted, msg+qos' ); is_deeply([$ice645->messages], [ is_deeply( ['2014-01-03T19:03:00', 'Witterungsbedingte Störung'], [ $ice645->messages ], ['2014-01-03T19:15:00', 'Witterungsbedingte Störung'], [ ['2014-01-03T19:48:00', 'Witterungsbedingte Störung'], [ '2014-01-03T20:02:00', 'Abweichende Wagenreihung' ], ['2014-01-03T19:58:00', 'Witterungsbedingte Störung'], ['2014-01-03T19:59:00', 'Witterungsbedingte Störung'], ['2014-01-03T20:00:00', 'Witterungsbedingte Störung'], [ '2014-01-03T20:01:00', 'Unwetter' ], [ '2014-01-03T20:01:00', 'Unwetter' ], ['2014-01-03T20:02:00', 'Abweichende Wagenreihung']], 'messages: with dups'); [ '2014-01-03T20:00:00', 'Witterungsbedingte Störung' ], [ '2014-01-03T19:59:00', 'Witterungsbedingte Störung' ], [ '2014-01-03T19:58:00', 'Witterungsbedingte Störung' ], [ '2014-01-03T19:48:00', 'Witterungsbedingte Störung' ], [ '2014-01-03T19:15:00', 'Witterungsbedingte Störung' ], [ '2014-01-03T19:03:00', 'Witterungsbedingte Störung' ] ], 'messages: with dups' ); is_deeply([$ice645->qos_messages], [ is_deeply( ['2014-01-03T20:02:00', 'Abweichende Wagenreihung']], 'qos_messages'); [ $ice645->qos_messages ], [ [ '2014-01-03T20:02:00', 'Abweichende Wagenreihung' ] ], 'qos_messages' ); TODO: { is_deeply( local $TODO = 'no duplicate finding yet'; [ $ice645->delay_messages ], is_deeply([$ice645->delay_messages], [ [ ['2014-01-03T19:03:00', 'Witterungsbedingte Störung'], [ '2014-01-03T20:01:00', 'Unwetter' ], ['2014-01-03T20:01:00', 'Unwetter']], 'delay_messages: no dups'); [ '2014-01-03T20:00:00', 'Witterungsbedingte Störung' ] } ], 'delay_messages: no dups' );