File Coverage

blib/lib/Enbld/Condition.pm
Criterion Covered Total %
statement 41 42 97.6
branch 22 24 91.6
condition 16 18 88.8
subroutine 12 13 92.3
pod 0 9 0.0
total 91 106 85.8


line stmt bran cond sub pod time code
1             package Enbld::Condition;
2              
3 5     5   1486 use strict;
  5         5  
  5         121  
4 5     5   13 use warnings;
  5         7  
  5         2096  
5              
6             sub new {
7 100     100 0 19432 my $class = shift;
8              
9 100         362 my $self = {
10             version => 'latest',
11             make_test => undef,
12             modules => undef,
13             arguments => undef,
14             annotation => undef,
15             @_,
16             };
17              
18 100         144 bless $self, $class;
19              
20 100         255 return $self;
21             }
22              
23             sub name {
24 0     0 0 0 return $_[0]->{name};
25             }
26              
27             sub version {
28 38     38 0 136 return $_[0]->{version};
29             }
30              
31             sub make_test {
32 44     44 0 916 return $_[0]->{make_test};
33             }
34              
35             sub modules {
36 42     42 0 238 return $_[0]->{modules};
37             }
38              
39             sub arguments {
40 40     40 0 138 return $_[0]->{arguments};
41             }
42              
43             sub annotation {
44 11     11 0 21 return $_[0]->{annotation};
45             }
46              
47             sub serialize {
48 52     52 0 60 my $self = shift;
49              
50 52         57 my %serialized;
51 52         78 foreach my $key ( sort keys %{ $self } ) {
  52         392  
52 264 100       414 next if ( ! $self->{$key} );
53              
54 60         158 $serialized{$key} = $self->{$key};
55             }
56              
57 52         221 return \%serialized;
58             }
59              
60             sub is_equal_to {
61 12     12 0 27 my ( $self, $condition ) = @_;
62              
63 12 100       26 return unless ( _is_equal( $self->{version}, $condition->version ));
64 9 100       15 return unless ( _is_equal( $self->{make_test}, $condition->make_test ));
65 7 50       15 return unless ( _is_equal( $self->{arguments}, $condition->arguments ));
66 7 50       10 return unless ( _is_equal( $self->{annotation}, $condition->annotation ));
67 7 100       13 return unless ( _is_equal_hash( $self->{modules}, $condition->modules ));
68              
69 4         13 return $self;
70             }
71              
72             sub _is_equal {
73 35     35   32 my ( $val1, $val2 ) = @_;
74              
75 35 100 66     93 return 1 if ( ( ! defined $val1 ) && ( ! defined $val2 ) );
76 15 100 100     103 return 1 if ( ( defined $val1 ) && ( defined $val2 ) && $val1 eq $val2 );
      100        
77              
78 5         29 return;
79             }
80              
81             sub _is_equal_hash {
82 7     7   8 my ( $val1, $val2 ) = @_;
83              
84 7 100 66     27 return 1 if ( ( ! defined $val1 ) && ( ! defined $val2 ) );
85              
86 4 100       6 my $str1 = join( '', keys %{ $val1 } ) if ( defined $val1 );
  3         8  
87 4 100       7 my $str2 = join( '', keys %{ $val2 } ) if ( defined $val2 );
  3         6  
88              
89 4 100 100     20 return 1 if ( ( defined $val1 ) && ( defined $val2 ) && $str1 eq $str2 );
      100        
90              
91 3         12 return;
92             }
93              
94             1;