diff options
Diffstat (limited to 'lib')
-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 |
4 files changed, 66 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; |