diff options
-rw-r--r-- | lib/WebCoso/Config.pm | 6 | ||||
-rw-r--r-- | lib/WebCoso/Driver.pm | 16 | ||||
-rw-r--r-- | lib/WebCoso/Pipeline.pm | 7 | ||||
-rw-r--r-- | lib/WebCoso/X.pm | 39 | ||||
-rw-r--r-- | t/02-driver.t | 27 | ||||
-rw-r--r-- | t/lib/WebCoso/Pipeline/Test.pm | 17 |
6 files changed, 110 insertions, 2 deletions
diff --git a/lib/WebCoso/Config.pm b/lib/WebCoso/Config.pm index a72e49c..187602e 100644 --- a/lib/WebCoso/Config.pm +++ b/lib/WebCoso/Config.pm @@ -4,6 +4,7 @@ use warnings; use WebCoso::Config::Collections; use WebCoso::Pipeline; use WebCoso::X; +use utf8; my @resources; my $collections=WebCoso::Config::Collections->new(); @@ -21,7 +22,7 @@ EOF if ($@) { WebCoso::X::ConfigError->throw( filename => $filename, - error => $@, + nested => $@, ); } else { @@ -93,7 +94,8 @@ sub res { } @source_files; my $pipeline_name="WebCoso::Pipeline::$short_pipeline_name"; - if (! $pipeline_name->can('process') ) { + + if (! WebCoso::Pipeline->is_pipeline($pipeline_name)) { WebCoso::X::NoSuchPipeline->throw( pipeline => $short_pipeline_name, ); diff --git a/lib/WebCoso/Driver.pm b/lib/WebCoso/Driver.pm new file mode 100644 index 0000000..2bbafbd --- /dev/null +++ b/lib/WebCoso/Driver.pm @@ -0,0 +1,16 @@ +package WebCoso::Driver; +use strict; +use warnings; +use WebCoso::Config; + +sub run { + my @resources=WebCoso::Config->get_all_resources(); + + for my $resource (@resources) { + WebCoso::Config->get_pipeline_for($resource)->process($resource); + } + + return 1; +} + +1; diff --git a/lib/WebCoso/Pipeline.pm b/lib/WebCoso/Pipeline.pm index d3e811a..b45d431 100644 --- a/lib/WebCoso/Pipeline.pm +++ b/lib/WebCoso/Pipeline.pm @@ -7,5 +7,12 @@ use Module::Pluggable::Fast require => 1; my @pipelines=_pipelines(); +my %pipelines; +@pipelines{@pipelines}=(); + +sub is_pipeline { + my ($class,$pipeline_name)=@_; + return exists $pipelines{$pipeline_name}; +} 1; diff --git a/lib/WebCoso/X.pm b/lib/WebCoso/X.pm index cd0c888..1894a28 100644 --- a/lib/WebCoso/X.pm +++ b/lib/WebCoso/X.pm @@ -5,12 +5,17 @@ use warnings; use Exception::Class ( + 'WebCoso::X::Base' => { + description => 'eccezione di base', + }, 'WebCoso::X::FileError' => { + isa => 'WebCoso::X::Base', fields => [ 'filename' ], description => 'classe base per errori relativi a file', }, 'WebCoso::X::ConfigError' => { isa => 'WebCoso::X::FileError', + fields => [ 'nested' ], description => 'errore nel file di configurazione', }, 'WebCoso::X::FileNotFound' => { @@ -23,13 +28,47 @@ use Exception::Class description => ' non è stato possibile aprire un file', }, 'WebCoso::X::NoSuchPipeline' => { + isa => 'WebCoso::X::Base', fields => [ 'pipeline' ], description => 'è stata richiesta una pipeline ignota', }, 'WebCoso::X::NoSuchResource' => { + isa => 'WebCoso::X::Base', fields => [ 'resource' ], description => 'è stata richiesta una risorsa ignota', }, ); +WebCoso::X::Base->Trace(1); + +sub WebCoso::X::ConfigError::full_message { + my ($self)=@_; + return 'Errore di configuazione: ' . $self->nested(); +} + +sub WebCoso::X::FileError::full_message { + my ($self)=@_; + return 'Errore relativo al file: ' . $self->filename(); +} + +sub WebCoso::X::FileNotFoundError::full_message { + my ($self)=@_; + return 'Impossibile trovare il file: ' . $self->filename(); +} + +sub WebCoso::X::OpenError::full_message { + my ($self)=@_; + return 'Impossibile aprire il file: ' . $self->filename(); +} + +sub WebCoso::X::NoSuchPipeline::full_message { + my ($self)=@_; + return 'Pipeline ignota: ' . $self->pipeline(); +} + +sub WebCoso::X::NoSuchResource::full_message { + my ($self)=@_; + return 'Risorsa ignota: ' . $self->resource(); +} + 1; diff --git a/t/02-driver.t b/t/02-driver.t new file mode 100644 index 0000000..444d5d6 --- /dev/null +++ b/t/02-driver.t @@ -0,0 +1,27 @@ +#!/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; + +my $thisdir=file($0)->parent->absolute; + +BEGIN { use_ok('WebCoso::Driver'); } + +my $conf_file=<<'EOF'; +res('src/file1.rest.txt','Test','dst/file.html'); +EOF + +WebCoso::Config->read_scalar($conf_file,"$thisdir/config-in-test"); + +ok(WebCoso::Driver->run(), 'il driver va'); + +my @calls=WebCoso::Pipeline::Test->get_calls(); +my @resources=WebCoso::Config->get_all_resources(); +is(scalar @calls,1,'una chiamata'); +is($calls[0]->{resource}, + $resources[0], + 'alla risorsa giusta'); diff --git a/t/lib/WebCoso/Pipeline/Test.pm b/t/lib/WebCoso/Pipeline/Test.pm new file mode 100644 index 0000000..239d74b --- /dev/null +++ b/t/lib/WebCoso/Pipeline/Test.pm @@ -0,0 +1,17 @@ +package WebCoso::Pipeline::Test; +use strict; +use warnings; + +my @calls; + +sub process { + my ($class,$resource)=@_; + push @calls, { resource => $resource }; + return 1; +} + +sub get_calls { + return @calls; +} + +1; |