File Coverage

blib/lib/OTRS/OPM/Installer/Utils/OTRS.pm
Criterion Covered Total %
statement 83 84 98.8
branch 20 24 83.3
condition 6 10 60.0
subroutine 17 17 100.0
pod 0 2 0.0
total 126 137 91.9


line stmt bran cond sub pod time code
1             package OTRS::OPM::Installer::Utils::OTRS;
2             $OTRS::OPM::Installer::Utils::OTRS::VERSION = '0.05';
3             # ABSTRACT: class that provides helper functionality regarding the OTRS installation
4              
5 4     4   209218 use strict;
  4         44  
  4         120  
6 4     4   21 use warnings;
  4         8  
  4         93  
7              
8 4     4   43 use Carp;
  4         8  
  4         209  
9 4     4   1241 use Moo;
  4         23204  
  4         31  
10 4     4   5804 use Module::Path qw/module_path/;
  4         2688  
  4         255  
11 4     4   1192 use Types::Standard qw(ArrayRef Str);
  4         153842  
  4         40  
12              
13 4     4   4969 use OTRS::OPM::Installer::Types qw(OTRSVersion);
  4         14  
  4         112  
14 4     4   1793 use OTRS::OPM::Installer::Utils::File;
  4         14  
  4         4728  
15              
16             has path => ( is => 'ro' );
17             has obj_env => ( is => 'ro', lazy => 1, default => \&_obj_env );
18             has os_env => ( is => 'ro', lazy => 1, default => \&_os_env );
19             has otrs_version => ( is => 'rwp', lazy => 1, default => \&_find_version);#isa => OTRSVersion );
20             has inc => ( is => 'rwp', lazy => 1, default => \&_build_inc );#isa => ArrayRef[Str] );
21             has manager => ( is => 'rwp', lazy => 1, default => \&_build_manager );#isa => Object );
22             has db => ( is => 'rwp', lazy => 1, default => \&_get_db ); #sub { my $class = $self->obj_env; my $string = $class . '::_get_db'; $self->$string(); } );#isa => Object );
23              
24             sub is_installed {
25 8     8 0 1314 my ($self, %param) = @_;
26              
27 8         20 my $sql = 'SELECT name, version FROM package_repository WHERE name = ?';
28              
29 8 50       187 return if !$self->db;
30              
31             $self->db->Prepare(
32             SQL => $sql,
33 8         189 Bind => [ \$param{package} ],
34             );
35              
36 8         163 my %info;
37 8         147 while ( my @row = $self->db->FetchrowArray() ) {
38 6         240 %info = (
39             name => $row[0],
40             version => $row[1],
41             );
42             }
43              
44 8 100       137 return if !%info;
45              
46 6 50       27 return $info{version} if !$param{version};
47              
48             my $is_installed = $self->_check_version(
49             installed => $info{version},
50             requested => $param{version},
51 6         29 );
52              
53 6 100       33 return $is_installed if $is_installed;
54 2         8 return;
55             }
56              
57             sub _check_version {
58 6     6   20 my ($self, %param) = @_;
59              
60 6   50     31 my @i_parts = split /\./, $param{installed} || 0;
61 6   50     21 my @r_parts = split /\./, $param{requested} || 10000000;
62              
63 6 100 66     19 my $installed = sprintf "%03d%03d%03d", map{ $i_parts[$_] && $i_parts[$_] =~ m{\A[0-9]+\z} ? $i_parts[$_] : 0 }( 0 .. 2);
  18         120  
64 6 100 66     18 my $requested = sprintf "%03d%03d%03d", map{ $r_parts[$_] && $r_parts[$_] =~ m{\A[0-9]+\z} ? $r_parts[$_] : 0 }( 0 .. 2);
  18         86  
65              
66 6 100       40 return $installed if $installed >= $requested;
67 2         7 return;
68             }
69              
70             sub _get_db {
71 2     2   27 my ($self) = @_;
72              
73 2         35 my $class = $self->obj_env;
74 2         22 my $path = module_path $class;
75 2         420 require $path;
76              
77 2         12 my $string = $class . '::_get_db';
78              
79 2         15 $self->$string();
80             }
81            
82             sub _build_manager {
83 2     2   33 my ($self) = @_;
84              
85 2         34 my $class = $self->obj_env;
86 2         32 my $path = module_path $class;
87 2         1517 require $path;
88              
89 2         10 my $string = $class . '::_build_manager';
90              
91 2         17 $self->$string();
92             }
93            
94             sub _find_version {
95 2     2   26 my ($self) = @_;
96              
97 2         25 my $file = $self->path . '/RELEASE';
98 2         5 my $content = do { local ( @ARGV, $/ ) = $file; <> };
  2         12  
  2         181  
99              
100 2         24 my ($version) = $content =~ m{VERSION \s+ = \s+ ([0-9.]+)}xms;
101 2         21 return $version;
102             }
103              
104             sub _build_inc {
105 2     2   1367 my ($self) = @_;
106              
107 2         7 return [ map{ $self->path . "/" . $_ }( '', 'Kernel/cpan-lib' ) ];
  4         65  
108             }
109              
110             sub BUILDARGS {
111 3     3 0 4740 my $class = shift;
112              
113 3 50       18 if ( @_ % 2 != 0 ) {
114 0         0 croak 'Check the parameters for ' . __PACKAGE__ . '. You have to pass a hash.';
115             }
116              
117 3         11 my %args = @_;
118 3 100       12 if ( !exists $args{path} ) {
119 1         9 my $utils = OTRS::OPM::Installer::Utils::Config->new;
120 1         1136 my $cfg = $utils->rc_config;
121              
122 1 50       40 $args{path} = $cfg->{otrs_path} if defined $cfg->{otrs_path};
123             }
124              
125 3         66 return \%args;
126             }
127              
128             sub _obj_env {
129 2     2   28 my ($self) = @_;
130              
131 2         37 my ($major) = $self->otrs_version =~ m{\A(\d+)\.};
132 2 100       12 if ( $major <= 3 ) {
133 1         10 return 'OTRS::OPM::Installer::Utils::OTRS::OTRS3';
134             }
135             else {
136 1         8 return 'OTRS::OPM::Installer::Utils::OTRS::OTRS4';
137             }
138             }
139              
140             sub _os_env {
141 3 100   3   1718 if ( $ENV{OTRSOPMINSTALLERTEST} ) {
142 2         15 return 'OTRS::OPM::Installer::Utils::OTRS::Test';
143             }
144             else {
145 1         7 return 'OTRS::OPM::Installer::Utils::OTRS::Linux';
146             }
147             }
148              
149             1;
150              
151             __END__