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   34 use strict;
  5         10  
  5         142  
4 5     5   25 use warnings;
  5         9  
  5         130  
5              
6 5     5   24 use parent 'OPTIMADE::Filter::Modifiable';
  5         9  
  5         21  
7              
8             our $VERSION = '0.10.2'; # VERSION
9              
10             sub new {
11 21     21 0 44 my( $class, $inner ) = @_;
12 21         69 return bless { inner => $inner }, $class;
13             }
14              
15             sub inner
16             {
17 60     60 0 97 my( $self, $inner ) = @_;
18 60         98 my $previous_inner = $self->{inner};
19 60 50       108 $self->{inner} = $inner if defined $inner;
20 60         163 return $previous_inner;
21             }
22              
23             sub to_filter
24             {
25 20     20 0 2144 my( $self ) = @_;
26 20         53 $self->validate;
27 20         40 return '(NOT ' . $self->inner->to_filter . ')';
28             }
29              
30             sub to_SQL
31             {
32 10     10 0 50 my( $self, $options ) = @_;
33 10         24 $self->validate;
34              
35 10         21 my( $sql, $values ) = $self->inner->to_SQL( $options );
36 10 100       24 if( wantarray ) {
37 8         31 return ( "NOT ($sql)", $values );
38             } else {
39 2         11 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 30     30 0 47 my $self = shift;
55 30 50       57 die 'inner undefined for OPTIMADE::Filter::Negation' if !$self->inner;
56             }
57              
58             1;