diff options
-rw-r--r-- | lib/WebCoso/Pipeline/Base.pm | 37 | ||||
-rw-r--r-- | lib/WebCoso/Step.pm | 18 | ||||
-rw-r--r-- | lib/WebCoso/X.pm | 11 | ||||
-rw-r--r-- | t/03-pipeline.t | 35 | ||||
-rw-r--r-- | t/lib/WebCoso/Pipeline/Test.pm | 13 | ||||
-rw-r--r-- | t/lib/WebCoso/Step/Step1.pm | 24 | ||||
-rw-r--r-- | t/lib/WebCoso/Step/Step2.pm | 24 |
7 files changed, 160 insertions, 2 deletions
diff --git a/lib/WebCoso/Pipeline/Base.pm b/lib/WebCoso/Pipeline/Base.pm new file mode 100644 index 0000000..7018fc0 --- /dev/null +++ b/lib/WebCoso/Pipeline/Base.pm @@ -0,0 +1,37 @@ +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 @full_steps=map { + my $full_step_name="WebCoso::Step::$_"; + if (! WebCoso::Step->is_step($full_step_name)) { + WebCoso::X::NoSuchStep->throw( + pipeline => $class, + step => $_, + ); + } + $full_step_name; + } @steps; + + $class->_steps([@full_steps]); +} + +sub process { + my ($class, $resource)=@_; + + for my $step (@{$class->_steps()}) { + $resource = $step->process($resource); + } + + return 1; +} + +1; diff --git a/lib/WebCoso/Step.pm b/lib/WebCoso/Step.pm new file mode 100644 index 0000000..71a4f07 --- /dev/null +++ b/lib/WebCoso/Step.pm @@ -0,0 +1,18 @@ +package WebCoso::Step; +use strict; +use warnings; +use Module::Pluggable::Fast + name => '_steps', + search => [ 'WebCoso::Step' ], + require => 1; + +my @steps=_steps(); +my %steps; +@steps{@steps}=(); + +sub is_step { + my ($class,$step_name)=@_; + return exists $steps{$step_name}; +} + +1; diff --git a/lib/WebCoso/X.pm b/lib/WebCoso/X.pm index 1894a28..57acd58 100644 --- a/lib/WebCoso/X.pm +++ b/lib/WebCoso/X.pm @@ -37,6 +37,11 @@ use Exception::Class fields => [ 'resource' ], description => 'è stata richiesta una risorsa ignota', }, + 'WebCoso::X::NoSuchStep' => { + isa => 'WebCoso::X::Base', + fields => [ 'pipeline', 'step' ], + description => 'una pipeline vuole usare uno step ignoto', + }, ); WebCoso::X::Base->Trace(1); @@ -71,4 +76,10 @@ sub WebCoso::X::NoSuchResource::full_message { return 'Risorsa ignota: ' . $self->resource(); } +sub WebCoso::X::NoSuchStep::full_message { + my ($self)=@_; + + return 'La pipeline ' . $self->pipeline() . ' vuole usare lo step ' . $self->step() . ' che è ignoto'; +} + 1; diff --git a/t/03-pipeline.t b/t/03-pipeline.t new file mode 100644 index 0000000..0095596 --- /dev/null +++ b/t/03-pipeline.t @@ -0,0 +1,35 @@ +#!/usr/bin/perl +use strict; +use warnings; +use Path::Class; +use Test::More 'no_plan'; +use Test::Exception; +use lib 't/lib'; +use WebCoso::Config; +use WebCoso::Driver; +use WebCoso::Pipeline::Test; + +my $thisdir=file($0)->parent->absolute; + +my $conf_file=<<'EOF'; +res('src/file1.rest.txt','Test','dst/file.html'); +EOF + +WebCoso::Config->read_scalar($conf_file,"$thisdir/config-in-test"); + +WebCoso::Driver->run(); + +my @resources=WebCoso::Config->get_all_resources(); + +my @calls1=WebCoso::Step::Step1->get_calls(); +is(scalar @calls1,1,"1 chiamata a Step1"); +is($calls1[0]->{resource}, + $resources[0], + 'risorsa giusta passata a Step1'); + +my @calls2=WebCoso::Step::Step2->get_calls(); +is(scalar @calls2,1,"1 chiamata a Step2"); +is($calls2[0]->{resource}, + $calls1[0]->{out_res}, + 'risorsa giusta passata a Step2'); + diff --git a/t/lib/WebCoso/Pipeline/Test.pm b/t/lib/WebCoso/Pipeline/Test.pm index 239d74b..6920f46 100644 --- a/t/lib/WebCoso/Pipeline/Test.pm +++ b/t/lib/WebCoso/Pipeline/Test.pm @@ -1,13 +1,22 @@ package WebCoso::Pipeline::Test; use strict; use warnings; +use base 'WebCoso::Pipeline::Base'; + +__PACKAGE__->set_steps(qw(Step1 Step2)); my @calls; sub process { my ($class,$resource)=@_; - push @calls, { resource => $resource }; - return 1; + + my $call={ resource => $resource }; + + my $ret=$class->SUPER::process($resource); + + push @calls, $call; + + return $ret; } sub get_calls { diff --git a/t/lib/WebCoso/Step/Step1.pm b/t/lib/WebCoso/Step/Step1.pm new file mode 100644 index 0000000..8a36d1d --- /dev/null +++ b/t/lib/WebCoso/Step/Step1.pm @@ -0,0 +1,24 @@ +package WebCoso::Step::Step1; +use strict; +use warnings; + +my @calls; + +sub process { + my ($class,$resource)=@_; + + my $out='stuff'; + + push @calls,{ + resource => $resource, + out_res => $out, + }; + + return $out; +} + +sub get_calls { + return @calls; +} + +1; diff --git a/t/lib/WebCoso/Step/Step2.pm b/t/lib/WebCoso/Step/Step2.pm new file mode 100644 index 0000000..0868842 --- /dev/null +++ b/t/lib/WebCoso/Step/Step2.pm @@ -0,0 +1,24 @@ +package WebCoso::Step::Step2; +use strict; +use warnings; + +my @calls; + +sub process { + my ($class,$resource)=@_; + + my $out='other'; + + push @calls,{ + resource => $resource, + out_res => $out, + }; + + return $out; +} + +sub get_calls { + return @calls; +} + +1; |