# $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;