| Lines 21-26
          use Modern::Perl;
      
      
        Link Here | 
        
          | 21 |  | 21 |  | 
        
          | 22 | use Module::Pluggable require => 1; | 22 | use Module::Pluggable require => 1; | 
        
          | 23 | use Cwd qw(abs_path); | 23 | use Cwd qw(abs_path); | 
            
              |  |  | 24 | use List::Util qw(max); | 
        
          | 24 |  | 25 |  | 
        
          | 25 | use base qw{Module::Bundled::Files}; | 26 | use base qw{Module::Bundled::Files}; | 
        
          | 26 |  | 27 |  | 
  
    | Lines 43-55
          sub new {
      
      
        Link Here | 
        
          | 43 |  | 44 |  | 
        
          | 44 |     my $self = bless( $args, $class ); | 45 |     my $self = bless( $args, $class ); | 
        
          | 45 |  | 46 |  | 
            
              |  |  | 47 |     my $plugin_version = $self->get_metadata->{version}; | 
            
              | 48 |     my $database_version = $self->retrieve_data('__INSTALLED_VERSION__'); | 
            
              | 49 |  | 
        
          | 46 |     ## Run the installation method if it exists and hasn't been run before | 50 |     ## Run the installation method if it exists and hasn't been run before | 
        
          | 47 |     if ( $self->can('install') && !$self->retrieve_data('__INSTALLED__') ) { | 51 |     if ( $self->can('install') && !$self->retrieve_data('__INSTALLED__') ) { | 
        
          | 48 |         if ( $self->install() ) { | 52 |         if ( $self->install() ) { | 
        
          | 49 |             $self->store_data( { '__INSTALLED__' => 1 } ); | 53 |             $self->store_data( { '__INSTALLED__' => 1 } ); | 
            
              |  |  | 54 |             if ( my $version = $plugin_version ) { | 
            
              | 55 |                 $self->store_data({ '__INSTALLED_VERSION__' => $version }); | 
            
              | 56 |             } | 
        
          | 50 |         } else { | 57 |         } else { | 
        
          | 51 |             warn "Plugin $class failed during installation!"; | 58 |             warn "Plugin $class failed during installation!"; | 
        
          | 52 |         } | 59 |         } | 
            
              |  |  | 60 |     } elsif ( $self->can('upgrade') && $plugin_version && $database_version ) { | 
            
              | 61 |         if ( _version_compare( $plugin_version, $database_version ) == 1 ) { | 
            
              | 62 |             if ( $self->upgrade() ) { | 
            
              | 63 |                 $self->store_data({ '__INSTALLED_VERSION__' => $plugin_version }); | 
            
              | 64 |                 warn "Plugin $class failed during upgrade!"; | 
            
              | 65 |             } | 
            
              | 66 |         } | 
        
          | 53 |     } | 67 |     } | 
        
          | 54 |  | 68 |  | 
        
          | 55 |     return $self; | 69 |     return $self; | 
  
    | Lines 218-223
          sub output {
      
      
        Link Here | 
        
          | 218 |     output_with_http_headers( $self->{cgi}, undef, $data, $content_type, $status, $extra_options ); | 232 |     output_with_http_headers( $self->{cgi}, undef, $data, $content_type, $status, $extra_options ); | 
        
          | 219 | } | 233 | } | 
        
          | 220 |  | 234 |  | 
            
              |  |  | 235 | =head2 _version_compare | 
            
              | 236 |  | 
            
              | 237 | Utility method to compare two version numbers. | 
            
              | 238 | Returns 1 if the first argument is the higher version | 
            
              | 239 | Returns -1 if the first argument is the lower version | 
            
              | 240 | Returns 0 if both versions are equal | 
            
              | 241 |  | 
            
              | 242 | if ( _version_compare( '2.6.26', '2.6.0' ) == 1 ) { | 
            
              | 243 |     print "2.6.26 is greater than 2.6.0\n"; | 
            
              | 244 | } | 
            
              | 245 |  | 
            
              | 246 | =cut | 
            
              | 247 |  | 
            
              | 248 | sub _version_compare { | 
            
              | 249 |     my $ver1 = shift || 0; | 
            
              | 250 |     my $ver2 = shift || 0; | 
            
              | 251 |  | 
            
              | 252 |     my @v1 = split /[.+:~-]/, $ver1; | 
            
              | 253 |     my @v2 = split /[.+:~-]/, $ver2; | 
            
              | 254 |  | 
            
              | 255 |     for ( my $i = 0 ; $i < max( scalar(@v1), scalar(@v2) ) ; $i++ ) { | 
            
              | 256 |  | 
            
              | 257 |         # Add missing version parts if one string is shorter than the other | 
            
              | 258 |         # i.e. 0 should be lt 0.2.1 and not equal, so we append .0 | 
            
              | 259 |         # 0.0.0 <=> 0.2.1 = -1 | 
            
              | 260 |         push( @v1, 0 ) unless defined( $v1[$i] ); | 
            
              | 261 |         push( @v2, 0 ) unless defined( $v2[$i] ); | 
            
              | 262 |         if ( int( $v1[$i] ) > int( $v2[$i] ) ) { | 
            
              | 263 |             return 1; | 
            
              | 264 |         } | 
            
              | 265 |         elsif ( int( $v1[$i] ) < int( $v2[$i] ) ) { | 
            
              | 266 |             return -1; | 
            
              | 267 |         } | 
            
              | 268 |     } | 
            
              | 269 |     return 0; | 
            
              | 270 | } | 
            
              | 271 |  | 
        
          | 221 | 1; | 272 | 1; | 
        
          | 222 | __END__ | 273 | __END__ | 
        
          | 223 |  | 274 |  |