File Coverage

blib/lib/OPTIMADE/Filter/Negation.pm
Criterion Covered Total %
statement 26 30 86.6
branch 4 6 66.6
condition n/a
subroutine 8 9 88.8
pod 0 6 0.0
total 38 51 74.5


line stmt bran cond sub pod time code
1             package OPTIMADE::Filter::Negation;
2              
3 5     5   31 use strict;
  5         10  
  5         188  
4 5     5   24 use warnings;
  5         7  
  5         286  
5              
6 5     5   24 use parent 'OPTIMADE::Filter::Modifiable';
  5         8  
  5         26  
7              
8             our $VERSION = '0.11.0'; # VERSION
9              
10             sub new {
11 23     23 0 67 my( $class, $inner ) = @_;
12 23         126 return bless { inner => $inner }, $class;
13             }
14              
15             sub inner
16             {
17 66     66 0 127 my( $self, $inner ) = @_;
18 66         127 my $previous_inner = $self->{inner};
19 66 50       159 $self->{inner} = $inner if defined $inner;
20 66         221 return $previous_inner;
21             }
22              
23             sub to_filter
24             {
25 22     22 0 5111 my( $self ) = @_;
26 22         78 $self->validate;
27 22         55 return '(NOT ' . $self->inner->to_filter . ')';
28             }
29              
30             sub to_SQL
31             {
32 11     11 0 80 my( $self, $options ) = @_;
33 11         35 $self->validate;
34              
35 11         29 my( $sql, $values ) = $self->inner->to_SQL( $options );
36 10 100       32 if( wantarray ) {
37 8         42 return ( "NOT ($sql)", $values );
38             } else {
39 2         13 return "NOT ($sql)";
40             }
41             }
42              
43             sub modify
44             {
45 0     0 0 0 my $self = shift;
46 0         0 my $code = shift;
47              
48 0         0 $self->inner( $self->inner->modify( $code, @_ ) );
49 0         0 return $code->( $self, @_ );
50             }
51              
52             sub validate
53             {
54 33     33 0 66 my $self = shift;
55 33 50       96 die 'inner undefined for OPTIMADE::Filter::Negation' if !$self->inner;
56             }
57              
58             1;