Unverified Commit 21174bc9 authored by Birte Kristina Friesel's avatar Birte Kristina Friesel
Browse files

place_candidates, name_candidates: return Stop objects

parent d9779056
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
git HEAD

    * Breaking change: $efa->name_candidates and $efa->place_candidates now
      return lists of Travel::Status::DE::EFA::Stop objects rather than
      just strings.

Travel::Status::DE::VRR 3.09 - Sun Mar 23 2025

    * Trip: Add polyline accessor
+6 −2
Original line number Diff line number Diff line
@@ -555,11 +555,15 @@ if ( my $err = $efa->errstr ) {

	if ( $efa->place_candidates ) {
		say 'You might want to try one of the following places:';
		say join( "\n", $efa->place_candidates );
		for my $candidate ( $efa->place_candidates ) {
			printf( "%d  %s\n", $candidate->id_num, $candidate->name );
		}
	}
	elsif ( $efa->name_candidates ) {
		say 'You might want to try one of the following names:';
		say join( "\n", $efa->name_candidates );
		for my $candidate ( $efa->name_candidates ) {
			printf( "%d  %s\n", $candidate->id_num, $candidate->name );
		}
	}

	exit 2;
+28 −6
Original line number Diff line number Diff line
@@ -413,14 +413,36 @@ sub check_for_ambiguous {
	for my $m ( @{ $json->{dm}{message} // [] } ) {
		if ( $m->{name} eq 'error' and $m->{value} eq 'name list' ) {
			$self->{errstr}          = "ambiguous name parameter";
			$self->{name_candidates}
			  = [ map { $_->{name} } @{ $json->{dm}{points} // [] } ];
			$self->{name_candidates} = [];
			for my $point ( @{ $json->{dm}{points} // [] } ) {
				my $place = $point->{ref}{place};
				push(
					@{ $self->{name_candidates} },
					Travel::Status::DE::EFA::Stop->new(
						place     => $place,
						full_name => $point->{name},
						name      => $point->{name} =~ s{\Q$place\E,? ?}{}r,
						id_num    => $point->{ref}{id},
					)
				);
			}
			return;
		}
		if ( $m->{name} eq 'error' and $m->{value} eq 'place list' ) {
			$self->{errstr}           = "ambiguous name parameter";
			$self->{place_candidates}
			  = [ map { $_->{name} } @{ $json->{dm}{points} // [] } ];
			$self->{place_candidates} = [];
			for my $point ( @{ $json->{dm}{points} // [] } ) {
				my $place = $point->{ref}{place};
				push(
					@{ $self->{place_candidates} },
					Travel::Status::DE::EFA::Stop->new(
						place     => $place,
						full_name => $point->{name},
						name      => $point->{name} =~ s{\Q$place\E,? ?}{}r,
						id_num    => $point->{ref}{id},
					)
				);
			}
			return;
		}
	}
+4 −4
Original line number Diff line number Diff line
@@ -27,11 +27,11 @@ is( $status->errstr, 'ambiguous name parameter', 'errstr ok' );

is_deeply( [ $status->place_candidates ], [], 'place candidates ok' );
is_deeply(
	[ $status->name_candidates ],
	[ map { $_->id_num . ' ' . $_->full_name } $status->name_candidates ],
	[
		'Essen, Alfred-Krupp-Schule',
		'Essen, Alfredbrücke',
		'Essen, Alfredusbad'
		'20009114 Essen, Alfred-Krupp-Schule',
		'20009113 Essen, Alfredbrücke',
		'20009115 Essen, Alfredusbad',
	],
	'name candidates ok'
);