From 34018d3ad054574694774f892e2f4fede107be09 Mon Sep 17 00:00:00 2001 From: dakkar Date: Sat, 5 Nov 2005 11:48:32 +0000 Subject: aggiunta gestione pipeline e test relativi git-svn-id: svn://luxion/repos/WebCoso/trunk@21 fcb26f47-9200-0410-b104-b98ab5b095f3 --- lib/WebCoso/Config.pm | 41 +++++++++++++++++++++++++++++++++++------ lib/WebCoso/Config/Resource.pm | 1 - lib/WebCoso/Pipeline.pm | 11 +++++++++++ lib/WebCoso/Pipeline/Id.pm | 8 ++++++++ lib/WebCoso/X.pm | 10 ++++++++++ t/01-config.t | 25 ++++++++++++++++++++++++- 6 files changed, 88 insertions(+), 8 deletions(-) create mode 100644 lib/WebCoso/Pipeline.pm create mode 100644 lib/WebCoso/Pipeline/Id.pm diff --git a/lib/WebCoso/Config.pm b/lib/WebCoso/Config.pm index f8dee5a..a72e49c 100644 --- a/lib/WebCoso/Config.pm +++ b/lib/WebCoso/Config.pm @@ -2,10 +2,12 @@ package WebCoso::Config; use strict; use warnings; use WebCoso::Config::Collections; +use WebCoso::Pipeline; use WebCoso::X; my @resources; my $collections=WebCoso::Config::Collections->new(); +my %resource_to_pipeline; sub read_scalar { my ($class,$content,$filename)=@_; @@ -19,7 +21,8 @@ EOF if ($@) { WebCoso::X::ConfigError->throw( filename => $filename, - error => $@); + error => $@, + ); } else { return 1; @@ -44,9 +47,20 @@ sub get_collections { return $collections; } +sub get_pipeline_for { + my ($class, $resource)=@_; + + WebCoso::X::NoSuchResource->throw( + resource => $resource, + ) unless exists $resource_to_pipeline{$resource}; + + return $resource_to_pipeline{$resource}; +} + sub clear { @resources=(); $collections=WebCoso::Config::Collections->new(); + %resource_to_pipeline=(); } package WebCoso::Config::Helpers; @@ -60,7 +74,7 @@ use vars qw($FILENAME @EXPORT); sub res { my $dest_filename=pop @_; - my $pipeline_name=pop @_; + my $short_pipeline_name=pop @_; my @source_files=@_; my $config_dir=file($FILENAME)->parent->absolute; @@ -72,26 +86,41 @@ sub res { if (!-e $abs_name) { WebCoso::X::FileNotFound->throw( filename => $_, - abs_filename => $abs_name); + abs_filename => $abs_name, + ); }; $abs_name; } @source_files; - WebCoso::Config::Resource->new({ + my $pipeline_name="WebCoso::Pipeline::$short_pipeline_name"; + if (! $pipeline_name->can('process') ) { + WebCoso::X::NoSuchPipeline->throw( + pipeline => $short_pipeline_name, + ); + }; + + my $resource=WebCoso::Config::Resource->new({ sources=>[@abs_source_files], - pipeline=>$pipeline_name, destination=>$dest_filename }); + + # brutto! + $resource_to_pipeline{$resource}=$pipeline_name; + + return $resource; } sub coll { my ($name,$parents,$children,$resources)=@_; - WebCoso::Config::Collection->new({ + + my $collection=WebCoso::Config::Collection->new({ name=>$name, parents=>$parents||[], children=>$children||[], resources=>$resources||[], }); + + return $collection; } 1; diff --git a/lib/WebCoso/Config/Resource.pm b/lib/WebCoso/Config/Resource.pm index b21bdcd..96a1d33 100644 --- a/lib/WebCoso/Config/Resource.pm +++ b/lib/WebCoso/Config/Resource.pm @@ -10,7 +10,6 @@ use WebCoso::X; { my %sources_of :ATTR( :init_arg :get); -my %pipelines_of :ATTR( :init_arg :get); my %dest_of :ATTR( :init_arg :get); my %collections_of :ATTR( :get ); diff --git a/lib/WebCoso/Pipeline.pm b/lib/WebCoso/Pipeline.pm new file mode 100644 index 0000000..d3e811a --- /dev/null +++ b/lib/WebCoso/Pipeline.pm @@ -0,0 +1,11 @@ +package WebCoso::Pipeline; +use strict; +use warnings; +use Module::Pluggable::Fast + name => '_pipelines', + search => [ 'WebCoso::Pipeline' ], + require => 1; + +my @pipelines=_pipelines(); + +1; diff --git a/lib/WebCoso/Pipeline/Id.pm b/lib/WebCoso/Pipeline/Id.pm new file mode 100644 index 0000000..bcd5615 --- /dev/null +++ b/lib/WebCoso/Pipeline/Id.pm @@ -0,0 +1,8 @@ +package WebCoso::Pipeline::Id; +use strict; +use warnings; + +sub process { +} + +1; diff --git a/lib/WebCoso/X.pm b/lib/WebCoso/X.pm index 9376d73..cd0c888 100644 --- a/lib/WebCoso/X.pm +++ b/lib/WebCoso/X.pm @@ -1,5 +1,7 @@ package WebCoso::X; use utf8; +use strict; +use warnings; use Exception::Class ( @@ -20,6 +22,14 @@ use Exception::Class isa => 'WebCoso::X::FileError', description => ' non è stato possibile aprire un file', }, + 'WebCoso::X::NoSuchPipeline' => { + fields => [ 'pipeline' ], + description => 'è stata richiesta una pipeline ignota', + }, + 'WebCoso::X::NoSuchResource' => { + fields => [ 'resource' ], + description => 'è stata richiesta una risorsa ignota', + }, ); 1; diff --git a/t/01-config.t b/t/01-config.t index b0261df..5a3e6b7 100644 --- a/t/01-config.t +++ b/t/01-config.t @@ -44,11 +44,20 @@ is_deeply( [$resources[0]->get_collections()], [], 'no collections'); + +is(WebCoso::Config->get_pipeline_for($resources[0]), + 'WebCoso::Pipeline::Id', + 'si segna le pipeline'); + +throws_ok { + WebCoso::Config->get_pipeline_for('not-a-resource') + } + 'WebCoso::X::NoSuchResource', + 'muore se gli si chiede una risorsa ignota'; } WebCoso::Config->clear(); - { my $conf_file=<<'EOF'; res('src/file1.rest.txt','src/nonce.rest.txt','Id','dst/file.html'); @@ -292,3 +301,17 @@ is_deeply( [$resources[0]], 'aggancio c->r'); } + +WebCoso::Config->clear(); + +{ +my $conf_file=<<'EOF'; +res('src/file1.rest.txt','NoSuchPipeline','dst/file.html'); +EOF + +throws_ok { + WebCoso::Config->read_scalar($conf_file,"$thisdir/config-in-test") + } + 'WebCoso::X::ConfigError', + 'muore se la pipeline è ignota'; +} -- cgit v1.2.3