From 1289e62a8d1a1a5b94b0b502e2aacdb2cb6d501d Mon Sep 17 00:00:00 2001 From: dakkar Date: Sat, 4 Feb 2006 16:40:52 +0000 Subject: integrate le nuove resources al posto delle vecchie config::resources git-svn-id: svn://luxion/repos/WebCoso/trunk@150 fcb26f47-9200-0410-b104-b98ab5b095f3 --- lib/WebCoso/Config.pm | 28 +++++++++--- lib/WebCoso/Config/Collection.pm | 2 +- lib/WebCoso/Config/Collections.pm | 4 +- lib/WebCoso/Config/Resource.pm | 92 --------------------------------------- lib/WebCoso/Resource.pm | 24 ++++++++++ t/01-config.t | 19 ++++---- 6 files changed, 58 insertions(+), 111 deletions(-) delete mode 100644 lib/WebCoso/Config/Resource.pm diff --git a/lib/WebCoso/Config.pm b/lib/WebCoso/Config.pm index 187602e..78c9dbe 100644 --- a/lib/WebCoso/Config.pm +++ b/lib/WebCoso/Config.pm @@ -66,7 +66,7 @@ sub clear { package WebCoso::Config::Helpers; use Path::Class; -use WebCoso::Config::Resource; +use WebCoso::Resource; use WebCoso::Config::Collection; use Exporter::Lite; use vars qw($FILENAME @EXPORT); @@ -101,10 +101,18 @@ sub res { ); }; - my $resource=WebCoso::Config::Resource->new({ - sources=>[@abs_source_files], - destination=>$dest_filename - }); + my $resource=WebCoso::Resource->new(); + $resource->set_property(sources=>[@abs_source_files]); + $resource->set_property(destination=>$dest_filename); + + for my $filename (@abs_source_files) { + $resource->set_property( + {filename=>$filename}, + datastream => _open_file($filename), + ); + } + + WebCoso::Config->add_resource($resource); # brutto! $resource_to_pipeline{$resource}=$pipeline_name; @@ -125,4 +133,14 @@ sub coll { return $collection; } +sub _open_file { + my ($filename)=@_; + + open my $fh,'<:raw',$filename + or WebCoso::X::OpenError->throw( + filename => $filename, + error => $!); + return $fh; +} + 1; diff --git a/lib/WebCoso/Config/Collection.pm b/lib/WebCoso/Config/Collection.pm index 961bc55..23b1aea 100644 --- a/lib/WebCoso/Config/Collection.pm +++ b/lib/WebCoso/Config/Collection.pm @@ -39,7 +39,7 @@ sub get_axes { return 'language'; } -sub get_axis_value { +sub get_axis_values { my ($self,$axis_name)=@_; if ($axis_name eq 'language') { return grep { $_ } keys %{ $self->get_names() } diff --git a/lib/WebCoso/Config/Collections.pm b/lib/WebCoso/Config/Collections.pm index 9cb3bbe..7c70e64 100644 --- a/lib/WebCoso/Config/Collections.pm +++ b/lib/WebCoso/Config/Collections.pm @@ -46,7 +46,7 @@ sub get_axes { return 'language'; } -sub get_axis_value { +sub get_axis_values { my ($self,$axis_name)=@_; if ($axis_name eq 'language') { return $self->_get_languages(); @@ -61,7 +61,7 @@ sub _get_languages { my %langs=(); for my $collection ($self->get_all_collections()) { - @langs{ $collection->get_axis_value('language') } = (); + @langs{ $collection->get_axis_values('language') } = (); } delete $langs{''}; diff --git a/lib/WebCoso/Config/Resource.pm b/lib/WebCoso/Config/Resource.pm deleted file mode 100644 index 96a1d33..0000000 --- a/lib/WebCoso/Config/Resource.pm +++ /dev/null @@ -1,92 +0,0 @@ -package WebCoso::Config::Resource; -use strict; -use warnings; -use Class::Std; -use Scalar::Util 'weaken'; -use List::MoreUtils 'any'; -use WebCoso::Config; -use WebCoso::X; - -{ - -my %sources_of :ATTR( :init_arg :get); -my %dest_of :ATTR( :init_arg :get); -my %collections_of :ATTR( :get ); - -sub BUILD { - my ($self,$ident,$args_ref)=@_; - - $collections_of{$ident}=[]; - - WebCoso::Config->add_resource($self); - - return; -} - -sub get_axes { - return 'filename'; -} - -sub get_axis_value { - my ($self,$axis_name)=@_; - if ($axis_name eq 'filename') { - return @{ $self->get_sources() }; - } - else { - return; - } -} - -sub get_datastream { - my ($self,$axis_name,$axis_value,@rest)=@_; - if (@rest==0 and $axis_name eq 'filename') { - if ( grep { $_ eq $axis_value } - @{ $self->get_sources() } - ) { - return _read_file($axis_value); - } - } - else { - return; - } -} - -sub get_properties { - return (); -} - -sub get_collections { - my ($self)=@_; - - return @{ $self->get_collections_ref() }; -} - -sub add_coll { - my ($self, $collection)=@_; - - return if any { $_ eq $collection } @{ $self->get_collections_ref() }; - - my $weak_collection = $collection; - weaken $weak_collection; - - push @{ $self->get_collections_ref() }, $weak_collection; - - $collection->add_res($self); - - return; -} - -sub _read_file :PRIVATE { - my ($filename)=@_; - - local $/; - open my $fh,'<:raw',$filename - or WebCoso::X::OpenError->throw( - filename => $filename, - error => $!); - return scalar <$fh>; -} - -} - -1; diff --git a/lib/WebCoso/Resource.pm b/lib/WebCoso/Resource.pm index 29146f2..077c577 100644 --- a/lib/WebCoso/Resource.pm +++ b/lib/WebCoso/Resource.pm @@ -2,6 +2,8 @@ package WebCoso::Resource; use strict; use warnings; use Class::Std; +use Scalar::Util 'weaken'; +use List::MoreUtils 'any'; #use WebCoso::X; #use Smart::Comments;$Data::Dumper::Useqq=1; @@ -9,6 +11,7 @@ use Class::Std; my %values_of :ATTR(:default<{}>); my %propnames_of :ATTR(:default<{}>); my %axes_of :ATTR(:default<{}>); +my %collections_of :ATTR(:get :default<[]>); sub get_axes { my ($self)=@_; @@ -67,6 +70,27 @@ sub get_property { return; } +sub get_collections { + my ($self)=@_; + + return @{ $self->get_collections_ref() }; +} + +sub add_coll { + my ($self, $collection)=@_; + + return if any { $_ eq $collection } @{ $self->get_collections_ref() }; + + my $weak_collection = $collection; + weaken $weak_collection; + + push @{ $self->get_collections_ref() }, $weak_collection; + + $collection->add_res($self); + + return; +} + sub _populate_axes_from { my ($self,$axes_spec)=@_; diff --git a/t/01-config.t b/t/01-config.t index 5a3e6b7..f5dd870 100644 --- a/t/01-config.t +++ b/t/01-config.t @@ -20,26 +20,23 @@ ok(WebCoso::Config->read_scalar($conf_file,"$thisdir/config-in-test"), my @resources=WebCoso::Config->get_all_resources(); is(scalar @resources,1,'una risorsa definta'); -isa_ok($resources[0],'WebCoso::Config::Resource'); +isa_ok($resources[0],'WebCoso::Resource'); is_deeply( [$resources[0]->get_axes()], ['filename'], 'un solo asse'); is_deeply( - [$resources[0]->get_axis_value('filename')], + [$resources[0]->get_axis_values('filename')], ["$thisdir/src/file1.rest.txt"], 'filename'); -is($resources[0]->get_datastream(filename=>"$thisdir/src/file1.rest.txt"), +my $content=do {my $fh=$resources[0]->get_property({filename=>"$thisdir/src/file1.rest.txt"},'datastream');local $/;<$fh>}; +is($content, <<'EOF',''); Titolo ====== testo EOF -is_deeply( - [$resources[0]->get_properties()], - [], - 'no properties'); is_deeply( [$resources[0]->get_collections()], [], @@ -92,7 +89,7 @@ is_deeply( ['language'], 'multilingua'); is_deeply( - [$collections[0]->get_axis_value('language')], + [$collections[0]->get_axis_values('language')], [], 'ma nessuna definita'); is_deeply( @@ -100,7 +97,7 @@ is_deeply( ['language'], 'multilingua, insieme'); is_deeply( - [$collections->get_axis_value('language')], + [$collections->get_axis_values('language')], [], 'ma nessuna definita, insieme'); my $props=$collections[0]->get_properties(language=>''); @@ -151,11 +148,11 @@ is(scalar @collections,2,'due collezioni'); # definizione. Forse non sarĂ  sempre vero is_deeply( - [sort $collections[0]->get_axis_value('language')], + [sort $collections[0]->get_axis_values('language')], ['en', 'it'], 'due lingue'); is_deeply( - [sort $collections->get_axis_value('language')], + [sort $collections->get_axis_values('language')], ['en', 'it'], 'due lingue'); is( -- cgit v1.2.3