in lib/Search/Elasticsearch/Role/Client/Direct.pm [43:87]
sub _parse_path {
#===================================
my ( $self, $defn, $params ) = @_;
return delete $params->{path}
if $params->{path};
my $paths = $defn->{paths};
my $parts = $defn->{parts};
my %args;
keys %$parts;
no warnings 'uninitialized';
while ( my ( $key, $req ) = each %$parts ) {
my $val = delete $params->{$key};
if ( ref $val eq 'ARRAY' ) {
die "Param ($key) must contain a single value\n"
if @$val > 1 and not $req->{multi};
$val = join ",", @$val;
}
if ( !length $val ) {
die "Missing required param ($key)\n"
if $req->{required};
next;
}
utf8::encode($val);
$args{$key} = uri_escape($val);
}
PATH: for my $path (@$paths) {
my @keys = keys %{ $path->[0] };
next PATH unless @keys == keys %args;
for (@keys) {
next PATH unless exists $args{$_};
}
my ( $pos, @parts ) = @$path;
for ( keys %$pos ) {
$parts[ $pos->{$_} ] = $args{$_};
}
return join "/", '', @parts;
}
throw(
'Internal',
"Couldn't determine path",
{ params => $params, defn => $defn }
);
}