File Coverage

blib/lib/Enbld/Config.pm
Criterion Covered Total %
statement 56 59 94.9
branch 17 20 85.0
condition n/a
subroutine 13 13 100.0
pod 0 10 0.0
total 86 102 84.3


line stmt bran cond sub pod time code
1             package Enbld::Config;
2              
3 3     3   910 use strict;
  3         5  
  3         93  
4 3     3   10 use warnings;
  3         6  
  3         63  
5              
6 3     3   11 use Carp;
  3         40  
  3         1716  
7              
8             require Enbld::Exception;
9              
10             sub new {
11 47     47 0 11869 my $class = shift;
12              
13 47         211 my $self = {
14             name => undef,
15             enabled => undef,
16             installed => {},
17             @_,
18             };
19              
20 47         104 bless $self, $class;
21              
22 47         158 return $self;
23             }
24              
25             sub name {
26 22     22 0 140 return $_[0]->{name};
27             }
28              
29             sub installed {
30 4     4 0 24 return $_[0]->{installed};
31             }
32              
33             sub condition {
34 29     29 0 49 my ( $self, $version ) = @_;
35              
36 29         134 require Enbld::Condition;
37              
38 29 100       72 if ( ! $version ) {
39 25         63 return Enbld::Condition->new(
40 25         22 %{ $self->{installed}{$self->enabled} }
41             );
42             }
43              
44 4 100       15 if ( exists $self->{installed}{$version} ) {
45 3         19 return Enbld::Condition->new(
46 3         5 %{ $self->{installed}{$version} }
47             );
48             }
49              
50 1         3 return;
51             }
52              
53             sub is_installed_version {
54 7     7 0 19 my ( $self, $version ) = @_;
55              
56 7 100       19 return unless $version;
57 6 100       17 return unless keys %{ $self->{installed} };
  6         28  
58              
59 5 100       34 return $version if ( exists $self->{installed}{$version} );
60              
61 2         8 return;
62             }
63              
64             sub enabled {
65 98     98 0 1035 return $_[0]->{enabled};
66             }
67              
68             sub drop_enabled {
69 2     2 0 7 my $self = shift;
70              
71 2         6 return ( $self->{enabled} = undef );
72             }
73              
74             sub set_enabled {
75 48     48 0 145 my ( $self, $version, $condition ) = @_;
76              
77 48         119 $self->{enabled} = $version;
78 48         164 $self->{installed}{$version} = $condition->serialize;
79              
80 48         385 return $self->{enabled};
81             }
82              
83             sub serialize {
84 1     1 0 1 my $self = shift;
85              
86 1         2 my $serialized;
87 1         1 foreach my $key ( sort keys %{ $self } ) {
  1         4  
88 3         6 $serialized->{$key} = $self->{$key};
89             }
90              
91 1         4 return $serialized;
92             }
93              
94             sub DSL {
95 3     3 0 10 my $self = shift;
96              
97 3         3 my @config;
98              
99 3         490 require Enbld::Feature;
100 3 100       9 my $version = Enbld::Feature->is_current_mode ?
101             $self->enabled : $self->condition->version;
102              
103 3         8 push @config, "target '" . $self->name . "' => define {\n";
104 3         5 push @config, " version '". $version . "';\n";
105 3 100       6 if ( $self->condition->make_test ) {
106 1         2 push @config, " make_test '" . $self->condition->make_test . "';\n";
107             }
108              
109 3 50       8 if ( $self->condition->arguments ) {
110 0         0 push @config, " arguments '" . $self->condition->arguments . "';\n";
111             }
112              
113 3 50       6 if ( $self->condition->annotation ) {
114 0         0 push @config, " annotation '" . $self->condition->annotation ."';\n";
115             }
116              
117 3 50       6 if ( $self->condition->module_file ) {
118 0         0 push @config, " module_file '" . $self->condition->module_file ."';\n";
119              
120             }
121              
122 3         6 push @config, "};\n";
123              
124 3         6 return \@config;
125             }
126              
127             1;