package WebCoso::Pipeline::Base; use strict; use warnings; use WebCoso::X; use WebCoso::Step; use base 'Class::Data::Inheritable'; __PACKAGE__->mk_classdata('_steps'); sub set_steps { my ($class,@steps)=@_; my @step_instances=(); while (@steps) { my $step_name=shift @steps; my $step_init_args=shift @steps; my $full_step_name="WebCoso::Step::$step_name"; if (! WebCoso::Step->is_step($full_step_name)) { WebCoso::X::NoSuchStep->throw( pipeline => $class, step => $_, ); } push @step_instances,$full_step_name->new($step_init_args); } $class->_steps([@step_instances]); } sub process { my ($class, $resource,$stage)=@_; for my $step (@{$class->_steps()}) { $step->process($resource,$stage); } return 1; } 1;