diff options
-rw-r--r-- | lib/WebCoso/Config.pm | 1 | ||||
-rw-r--r-- | lib/WebCoso/Config/Collection.pm | 39 | ||||
-rw-r--r-- | lib/WebCoso/Config/Resource.pm | 12 | ||||
-rw-r--r-- | t/01-config.t | 59 |
4 files changed, 98 insertions, 13 deletions
diff --git a/lib/WebCoso/Config.pm b/lib/WebCoso/Config.pm index d339bed..74c150b 100644 --- a/lib/WebCoso/Config.pm +++ b/lib/WebCoso/Config.pm @@ -41,6 +41,7 @@ sub get_all_collections { sub clear { @resources=(); + @collections=(); } package WebCoso::Config::Helpers; diff --git a/lib/WebCoso/Config/Collection.pm b/lib/WebCoso/Config/Collection.pm index 4b27026..6b5d201 100644 --- a/lib/WebCoso/Config/Collection.pm +++ b/lib/WebCoso/Config/Collection.pm @@ -5,13 +5,50 @@ use Class::Std; use WebCoso::Config; { -my %name_of :ATTR( :init_arg<name> ); +my %names_of :ATTR( :get<names> ); sub BUILD { my ($self,$ident,$args_ref)=@_; + + my $names=$args_ref->{name}; + # trasformo un nome semplice in un nome "per qualsiasi lingua" + $names={''=>$names} unless ref($names) eq 'HASH'; + $names_of{$ident}=$names; + WebCoso::Config->add_collection($self); } +sub axes { + return 'language'; +} + +sub axis { + my ($self,$axis_name)=@_; + if ($axis_name eq 'language') { + return keys %{ $self->get_names() } + } + else { + return; + } +} + +sub properties { + my ($self,$axis_name,$axis_value,@rest)=@_; + + if (@rest==0 and $axis_name eq 'language') { + if ( grep { $_ eq $axis_value } + keys %{ $self->get_names() } + ) { + return { + name => $self->get_names()->{$axis_value} + }; + } + else { + return; + } + } +} + } 1; diff --git a/lib/WebCoso/Config/Resource.pm b/lib/WebCoso/Config/Resource.pm index b499fec..4b5cd60 100644 --- a/lib/WebCoso/Config/Resource.pm +++ b/lib/WebCoso/Config/Resource.pm @@ -6,9 +6,9 @@ use WebCoso::Config; { -my %sources_of :ATTR( :init_arg<source> ); -my %pipelines_of :ATTR( :init_arg<pipeline> ); -my %dest_of :ATTR( :init_arg<destination> ); +my %sources_of :ATTR( :init_arg<source> :get<sources>); +my %pipelines_of :ATTR( :init_arg<pipeline> :get<pipeline>); +my %dest_of :ATTR( :init_arg<destination> :get<destination>); sub BUILD { my ($self,$ident,$args_ref)=@_; @@ -22,7 +22,7 @@ sub axes { sub axis { my ($self,$axis_name)=@_; if ($axis_name eq 'filename') { - return @{$sources_of{ident($self)}}; + return @{ $self->get_sources() }; } else { return; @@ -32,7 +32,9 @@ sub axis { sub datastream { my ($self,$axis_name,$axis_value,@rest)=@_; if (@rest==0 and $axis_name eq 'filename') { - if ( grep { $_ eq $axis_value } @{$sources_of{ident($self)}} ) { + if ( grep { $_ eq $axis_value } + @{ $self->get_sources() } + ) { return _read_file($axis_value); } } diff --git a/t/01-config.t b/t/01-config.t index 6ae9fce..c10dad6 100644 --- a/t/01-config.t +++ b/t/01-config.t @@ -14,7 +14,8 @@ my $conf_file=<<'EOF'; res('src/file1.rest.txt','Id','dst/file.html'); EOF -ok(WebCoso::Config->read_scalar($conf_file,"$thisdir/config-in-test"),'eseguita la configurazione'); +ok(WebCoso::Config->read_scalar($conf_file,"$thisdir/config-in-test"), + 'eseguita la configurazione'); my @resources=WebCoso::Config->get_all_resources(); is(scalar @resources,1,'una risorsa definta'); @@ -53,7 +54,8 @@ my $conf_file=<<'EOF'; res('src/file1.rest.txt','src/nonce.rest.txt','Id','dst/file.html'); EOF -ok(WebCoso::Config->read_scalar($conf_file,"$thisdir/config-in-test"),'eseguita la configurazione'); +ok(WebCoso::Config->read_scalar($conf_file,"$thisdir/config-in-test"), + 'eseguita la configurazione'); my @resources=WebCoso::Config->get_all_resources(); is(scalar @resources,1,'una risorsa definta'); @@ -62,9 +64,11 @@ is_deeply( [$resources[0]->axis('filename')], ["$thisdir/src/file1.rest.txt", "$thisdir/src/nonce.rest.txt"], 'filenames'); -dies_ok {$resources[0]->datastream(filename=>"$thisdir/src/nonce.rest.txt")} 'muore se non trova il file'; - - +dies_ok + { + $resources[0]->datastream(filename=>"$thisdir/src/nonce.rest.txt") + } + 'muore se non trova il file'; } WebCoso::Config->clear(); @@ -74,13 +78,54 @@ my $conf_file=<<'EOF'; coll('coll1'); EOF -ok(WebCoso::Config->read_scalar($conf_file,"$thisdir/config-in-test"),'eseguita la configurazione'); +ok(WebCoso::Config->read_scalar($conf_file,"$thisdir/config-in-test"), + 'eseguita la configurazione'); is(scalar WebCoso::Config->get_all_resources(),0,'nessuna risorsa'); my @collections=WebCoso::Config->get_all_collections(); - is(scalar @collections,1,'una collezione'); +is_deeply( + [$collections[0]->axes()], + ['language'], + 'multilingua'); +is_deeply( + [$collections[0]->axis('language')], + [''], + 'ma nessuna definita'); +my $props=$collections[0]->properties(language=>''); +isa_ok($props,'HASH'); +is_deeply( + $props, + {name=>'coll1'}, + 'solo il nome'); +} + +WebCoso::Config->clear(); +{ +my $conf_file=<<'EOF'; +my $c1=coll({it=>'coll1',en=>'coll1-en'}); +coll('coll2',[$c1]); +EOF + +ok(WebCoso::Config->read_scalar($conf_file,"$thisdir/config-in-test"), + 'eseguita la configurazione'); + +my @collections=WebCoso::Config->get_all_collections(); +is(scalar @collections,2,'due collezioni'); + +is_deeply( + [sort $collections[0]->axis('language')], + ['en', 'it'], + 'due lingue'); +is( + $collections[0]->properties(language=>'en')->{name}, + 'coll1-en', + 'nome en'); +is( + $collections[0]->properties(language=>'it')->{name}, + 'coll1', + 'nome it'); } |