File Coverage

blib/lib/Devel/Events/Filter/RemoveFields.pm
Criterion Covered Total %
statement 1 3 33.3
branch n/a
condition n/a
subroutine 1 1 100.0
pod n/a
total 2 4 50.0


line stmt bran cond sub pod time code
1             #!/usr/bin/perl
2              
3             package Devel::Events::Filter::RemoveFields;
4 2     2   29352 use Moose;
  0            
  0            
5              
6             with qw/Devel::Events::Filter/;
7              
8             has fields => (
9             isa => "ArrayRef",
10             is => "ro",
11             required => 1,
12             auto_deref => 1,
13             );
14              
15             has _fields_hash => (
16             isa => "HashRef",
17             is => "ro",
18             lazy => 1,
19             default => sub {
20             my $self = shift;
21             return { map { $_ => undef } $self->fields };
22             }
23             );
24              
25             sub filter_event {
26             my ( $self, $type, @data ) = @_;
27              
28             my $fields = $self->_fields_hash;
29            
30             my @ret;
31             while ( @data ) {
32             my ( $key, $value ) = splice( @data, 0, 2 );
33             push @ret, $key, $value unless exists $fields->{$key};
34             }
35              
36             return ( $type, @ret );
37             }
38              
39              
40             __PACKAGE__;
41              
42             __END__
43              
44             =pod
45              
46             =head1 NAME
47              
48             Devel::Events::Filter::RemoveFields - Remove certain fields from events
49              
50             =head1 SYNOPSIS
51              
52             use Devel::Events::Filter::RemoveFields;
53              
54             my $f = Devel::Events::Filter::RemoveFields->new(
55             fields => [qw/generator/],
56             handler => $h,
57             );
58              
59             # all events delivered to $f will be proxied to $h without any 'generator'
60             # field.
61              
62             # field order and multiple instances of a field won't be affected
63              
64             =head1 DESCRIPTION
65              
66             This simple filter will remove all instances of a certain field in an event.
67              
68             =head1 ATTRIBUTES
69              
70             =over 4
71              
72             =item fields
73              
74             An array reference.
75              
76             Tbe list of fields to remove from the event data.
77              
78             =back
79              
80             =head1 METHODS
81              
82             =over 4
83              
84             =item filter_event @event
85              
86             Removes the fields specified in C<fields> from the event data.
87              
88             =back
89              
90             =cut
91              
92