1 package Packaging
::Tools
::Plugin
;
10 Packaging::Tools::Plugin - base class for Packaging::Tools plugins to define API
14 use Carp qw
/carp croak/;
16 our $VERSION = '0.001';
18 require File
::Basename
;
24 has
'_column_defs' => (
26 isa
=> 'ArrayRef[Str]',
27 builder
=> '_default_column_defs',
30 has
'packaged_modules' => (
34 builder
=> 'find_packaged_modules',
37 has
'installed_packages' => (
41 builder
=> 'find_installed_packages',
45 eval { require Packaging
::Tools
::Plugin
::Role
::Cache
; }
46 and with
"Packaging::Tools::Plugin::Role::Cache";
50 =head1 SUBROUTINES/METHODS
54 sub _default_column_defs
57 qw(PKG_IDENT DIST_NAME DIST_VERSION DIST_FILE),
58 qw(PKG_NAME PKG_VERSION PKG_MAINTAINER PKG_INSTALLED),
59 qw(PKG_LOCATION PKG_HOMEPAGE PKG_LICENSE PKG_MASTER_SITES)
63 =head2 find_installed_packages
67 sub find_installed_packages
{ ... }
69 sub _find_packaged_modules
{ ... }
71 =head2 find_packaged_modules
75 sub find_packaged_modules
79 return $self->_find_packaged_modules();
82 sub _get_pkg_details
{ ... }
84 =head2 get_pkg_details($pkg_ident,@var_names)
86 Returns package details.
92 One value from the list of L</find_packaged_modules|packaged modules>.
120 =item PKG_MASTER_SITES
130 my ( $self, $pkg_ident, @var_names ) = @_;
132 defined( $self->packaged_modules()->{$pkg_ident} )
133 or $self->_get_pkg_details( $pkg_ident, @var_names );
137 $self->_cache->{dbh
} or $self->_open_cache();
139 my $dbh = $self->_cache->{dbh
};
140 defined( $self->packaged_modules()->{$pkg_ident} )
142 and $self->_update_cache( $self->_column_defs()->[0] => $pkg_ident,
143 %{ $self->packaged_modules()->{$pkg_ident} } );
144 delete $self->_cache->{stale_pkg_idents
}->{$pkg_ident};
146 if ( $self->_cache->{_last_scan
}
147 and scalar( keys %{ $self->_cache->{stale_pkg_idents
} } ) == 0 )
149 $self->_cache->{last_scan
} = delete $self->_cache->{_last_scan
};
151 $sql = "DELETE FROM LAST_SCAN";
152 $sth = $dbh->prepare($sql);
153 $sth->execute() or carp
( $dbh->errstr() );
155 $sql = "INSERT INTO LAST_SCAN (LAST_SCAN) VALUES(" . $self->_cache->{last_scan
} . ")";
156 $sth = $dbh->prepare($sql);
157 $sth->execute() or carp
( $dbh->errstr() );
161 return @
{ $self->packaged_modules()->{$pkg_ident} }{@var_names};
164 sub _fetch_all_pkgs_details
168 defined( $self->_cache ) and $self->_cache->{last_scan
} and return;
169 $have_cache and !$self->_cache->{dbh
} and $self->_open_cache();
172 if ( $have_cache and $self->_cache->{stale_pkg_idents
} )
174 @stale_pkgs = keys %{ $self->_cache->{stale_pkg_idents
} };
178 my %stale_tmp = map { $_ => 1 } $self->find_packaged_modules();
179 delete @stale_tmp{ keys %{ $self->{pkg_details
} } };
182 foreach my $stale_pkg (@stale_pkgs)
184 $self->get_pkg_details( $stale_pkg, qw(DIST_NAME) );
192 my ( $self, %match ) = @_;
194 scalar( keys %match ) > 0 or croak
("find_package( key => value )");
195 $self->_fetch_all_pkgs_details();
200 my $dbh = $self->_cache->{dbh
};
202 "SELECT DISTINCT %s FROM DIST_PKGS WHERE %s",
203 $self->_column_defs()->[0],
205 " AND ", map { $_ . "=" . $dbh->quote( $match{$_} ) } keys %match
208 @found = $dbh->selectrow_array($sql);
212 my @keys = keys %match;
213 my @values = @match{@keys};
214 my $pkgs = $self->packaged_modules;
215 @found = grep { @values ~~ @
{ $pkgs->{$_} }{@keys}; } keys %{$pkgs};
218 1 == scalar(@found) and return $found[0];
222 has
'template_directories' => (
224 isa
=> 'ArrayRef[Str]',
230 sub _get_template_directories
{ return; }
236 $self->_cache->{dbh
} and $self->_cache->{dbh
}->disconnect();
237 $self->_clear_cache();