From 6cbb51a6bf5f4ccfc3388ce39a3bbd5b14a91217 Mon Sep 17 00:00:00 2001 From: Pascal Rigaux Date: Fri, 29 Jun 2007 13:30:24 +0000 Subject: prepare merge --- lib/Youri/Submit/Step.pm | 125 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 125 insertions(+) create mode 100644 lib/Youri/Submit/Step.pm (limited to 'lib/Youri/Submit/Step.pm') diff --git a/lib/Youri/Submit/Step.pm b/lib/Youri/Submit/Step.pm new file mode 100644 index 0000000..0085277 --- /dev/null +++ b/lib/Youri/Submit/Step.pm @@ -0,0 +1,125 @@ +# $Id: Step.pm 1687 2007-06-28 22:44:07Z guillomovitch $ +package Youri::Submit::Step; + +=head1 NAME + +Youri::Submit::Step - Abstract submission step + +=head1 DESCRIPTION + +This abstract class defines youri-submit plugin interface. + +=cut + +use warnings; +use strict; +use Carp; + +=head1 CLASS METHODS + +=head2 new(%args) + +Creates and returns a new Youri::Submit::Plugin object. + +Generic parameters: + +=over + +=item skip $skip + +List of packages for which to skip this plugin + +=over + +Warning: do not call directly, call subclass constructor instead. + +=cut + +sub new { + my $class = shift; + croak "Abstract class" if $class eq __PACKAGE__; + + my %options = ( + id => '', # object id + test => 0, # test mode + verbose => 0, # verbose mode + skip => undef, + @_ + ); + + croak "skip should be an arrayref" + if $options{skip} and ref $options{skip} ne 'ARRAY'; + + + my $self = bless { + _id => $options{id}, + _test => $options{test}, + _verbose => $options{verbose}, + _skip => { map { $_ => 1 } @{$options{skip}} } + }, $class; + + $self->_init(%options); + + return $self; +} + +sub _init { + # do nothing +} + +=head1 INSTANCE METHODS + +=head2 get_id() + +Returns plugin identity. + +=cut + +sub get_id { + my ($self) = @_; + croak "Not a class method" unless ref $self; + + return $self->{_id}; +} + +=head2 run($packages, $repository, $target, $context) + +Execute action on given L object. + +=cut + +sub run { + my ($self, $packages, $repository, $target, $context) = @_; + croak "Not a class method" unless ref $self; + croak "packages is not an array reference" unless ref $packages eq 'ARRAY'; + + # filter exceptions + $packages = [ + grep { !$self->{_skip}->{$_->get_canonical_name()} } + @$packages + ]; + + $self->process_packages($repository, $packages, $target, $context) + if @$packages; +} + + +=head1 SUBCLASSING + +The following methods have to be implemented: + +=over + +=item run + +=back + +=head1 COPYRIGHT AND LICENSE + +Copyright (C) 2002-2006, YOURI project + +This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. + +=cut + +1; -- cgit v1.2.1