Commit 75f87ced authored by Frank Becker's avatar Frank Becker Committed by Dave Lawrence

Bug 775056 - Add prefix to filter() and filter_wants()

r=dkl, a=LpSolit
parent 47126598
...@@ -22,22 +22,24 @@ our @EXPORT_OK = qw( ...@@ -22,22 +22,24 @@ our @EXPORT_OK = qw(
params_to_objects params_to_objects
); );
sub filter ($$) { sub filter ($$;$) {
my ($params, $hash) = @_; my ($params, $hash, $prefix) = @_;
my %newhash = %$hash; my %newhash = %$hash;
foreach my $key (keys %$hash) { foreach my $key (keys %$hash) {
delete $newhash{$key} if !filter_wants($params, $key); delete $newhash{$key} if !filter_wants($params, $key, $prefix);
} }
return \%newhash; return \%newhash;
} }
sub filter_wants ($$) { sub filter_wants ($$;$) {
my ($params, $field) = @_; my ($params, $field, $prefix) = @_;
my %include = map { $_ => 1 } @{ $params->{'include_fields'} || [] }; my %include = map { $_ => 1 } @{ $params->{'include_fields'} || [] };
my %exclude = map { $_ => 1 } @{ $params->{'exclude_fields'} || [] }; my %exclude = map { $_ => 1 } @{ $params->{'exclude_fields'} || [] };
$field = "${prefix}.${field}" if $prefix;
if (defined $params->{include_fields}) { if (defined $params->{include_fields}) {
return 0 if !$include{$field}; return 0 if !$include{$field};
} }
...@@ -150,6 +152,13 @@ of WebService methods. Given a hash (the second argument to this subroutine), ...@@ -150,6 +152,13 @@ of WebService methods. Given a hash (the second argument to this subroutine),
this will remove any keys that are I<not> in C<include_fields> and then remove this will remove any keys that are I<not> in C<include_fields> and then remove
any keys that I<are> in C<exclude_fields>. any keys that I<are> in C<exclude_fields>.
An optional third option can be passed that prefixes the field name to allow
filtering of data two or more levels deep.
For example, if you want to filter out the C<id> key/value in components returned
by Product.get, you would use the value C<component.id> in your C<exclude_fields>
list.
=head2 filter_wants =head2 filter_wants
Returns C<1> if a filter would preserve the specified field when passing Returns C<1> if a filter would preserve the specified field when passing
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment