From fce73c4f1cb1c3ebed4551e43108f3506bb66f51 Mon Sep 17 00:00:00 2001 From: dakkar Date: Sun, 17 Dec 2006 12:08:23 +0000 Subject: pulizia: si ricomincia (di nuovo...) git-svn-id: svn://luxion/repos/WebCoso/trunk@234 fcb26f47-9200-0410-b104-b98ab5b095f3 --- Build.PL | 17 --- lib/WebCoso.pm | 8 - lib/WebCoso/Collection.pm | 133 ---------------- lib/WebCoso/Collections.pm | 74 --------- lib/WebCoso/Config.pm | 176 ---------------------- lib/WebCoso/Driver.pm | 19 --- lib/WebCoso/Pipeline.pm | 18 --- lib/WebCoso/Pipeline/Base.pm | 43 ------ lib/WebCoso/Pipeline/Id.pm | 8 - lib/WebCoso/Resource.pm | 183 ---------------------- lib/WebCoso/Step.pm | 18 --- lib/WebCoso/Step/Base.pm | 7 - lib/WebCoso/Step/ReST/SplitLang.pm | 87 ----------- lib/WebCoso/Step/ReST/ToXml.pm | 139 ----------------- lib/WebCoso/X.pm | 95 ------------ t/01-config.t | 300 ------------------------------------- t/02-driver.t | 36 ----- t/03-pipeline.t | 53 ------- t/04-resource.t | 84 ----------- t/05-naming.t | 43 ------ t/lib/WebCoso/Pipeline/Test.pm | 29 ---- t/lib/WebCoso/Step/Step1.pm | 26 ---- t/lib/WebCoso/Step/Step2.pm | 26 ---- t/src/file1.rest.txt | 4 - t/steps/rest-splitlang.t | 103 ------------- t/steps/rest-xml.t | 156 ------------------- 26 files changed, 1885 deletions(-) delete mode 100644 Build.PL delete mode 100644 lib/WebCoso.pm delete mode 100644 lib/WebCoso/Collection.pm delete mode 100644 lib/WebCoso/Collections.pm delete mode 100644 lib/WebCoso/Config.pm delete mode 100644 lib/WebCoso/Driver.pm delete mode 100644 lib/WebCoso/Pipeline.pm delete mode 100644 lib/WebCoso/Pipeline/Base.pm delete mode 100644 lib/WebCoso/Pipeline/Id.pm delete mode 100644 lib/WebCoso/Resource.pm delete mode 100644 lib/WebCoso/Step.pm delete mode 100644 lib/WebCoso/Step/Base.pm delete mode 100644 lib/WebCoso/Step/ReST/SplitLang.pm delete mode 100644 lib/WebCoso/Step/ReST/ToXml.pm delete mode 100644 lib/WebCoso/X.pm delete mode 100644 t/01-config.t delete mode 100644 t/02-driver.t delete mode 100644 t/03-pipeline.t delete mode 100644 t/04-resource.t delete mode 100644 t/05-naming.t delete mode 100644 t/lib/WebCoso/Pipeline/Test.pm delete mode 100644 t/lib/WebCoso/Step/Step1.pm delete mode 100644 t/lib/WebCoso/Step/Step2.pm delete mode 100644 t/src/file1.rest.txt delete mode 100644 t/steps/rest-splitlang.t delete mode 100644 t/steps/rest-xml.t diff --git a/Build.PL b/Build.PL deleted file mode 100644 index aaaf0dc..0000000 --- a/Build.PL +++ /dev/null @@ -1,17 +0,0 @@ -#!/usr/bin/perl -use Module::Build; - -my $build=Module::Build->new( - module_name => 'WebCoso', - license => 'GPL', - requires => { - Class::Std => 0, - Path::Class => 0, - Exporter::Lite => 0, - }, - build_requires => { - Test::More => 0, - }, - recusive_test_files => 1, -); -$build->create_build_script(); diff --git a/lib/WebCoso.pm b/lib/WebCoso.pm deleted file mode 100644 index 67bee2f..0000000 --- a/lib/WebCoso.pm +++ /dev/null @@ -1,8 +0,0 @@ -package WebCoso; -use strict; -use warnings; -use vars '$VERSION'; - -$VERSION='0.1'; - -1; diff --git a/lib/WebCoso/Collection.pm b/lib/WebCoso/Collection.pm deleted file mode 100644 index 42442f1..0000000 --- a/lib/WebCoso/Collection.pm +++ /dev/null @@ -1,133 +0,0 @@ -package WebCoso::Collection; -use strict; -use warnings; -use Class::Std; -use Scalar::Util 'weaken'; -use List::MoreUtils 'any'; -use WebCoso::Config; - -{ -my %names_of :ATTR( :get ); -my %parents_of :ATTR( :get ); -my %children_of :ATTR( :get ); -my %resources_of :ATTR( :init_arg :get ); - -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; - - my $parents=$args_ref->{parents} || []; - $parents_of{$ident}=$parents; - $_->add_child($self) for @$parents; - - my $children=$args_ref->{children} || []; - $children_of{$ident}=$children; - $_->add_parent($self) for @$children; - - $resources_of{$ident}=[]; - - WebCoso::Config->add_collection($self); - - return; -} - -sub get_axes { - return 'language'; -} - -sub get_axis_values { - my ($self,$axis_name)=@_; - if ($axis_name eq 'language') { - return grep { $_ } keys %{ $self->get_names() } - } - else { - return; - } -} - -sub get_properties { - my ($self,$axis_name,$axis_value,@rest)=@_; - - if (@rest==0 and $axis_name eq 'language') { - if ( any { $_ eq $axis_value } - keys %{ $self->get_names() } - ) { - return { - name => $self->get_names()->{$axis_value} - }; - } - elsif (exists ${$self->get_names()}{''}) { - return { - name => $self->get_names()->{''} - }; - } - else { - return; - } - } -} - -sub add_child { - my ($self,$child)=@_; - - return if any { $_ eq $child } @{ $self->get_children_ref() }; - - push @{ $self->get_children_ref() },$child; - $child->add_parent($self); - - return; -} -sub add_parent { - my ($self,$parent)=@_; - - return if any { $_ eq $parent } @{ $self->get_parents_ref() }; - - my $weak_parent=$parent; - weaken $weak_parent; - - push @{ $self->get_parents_ref() },$weak_parent; - $parent->add_child($self); - - return; -} -sub add_res { - my ($self, @resources)=@_; - - # creo una tabellina di look-up per evitare i duplicati - # NOTA: le chiavi sono stringhe, non ref, non si può usare per - # pescare gli oggetti - my %res_key; - @res_key{ @{ $self->get_resources_ref() } } = (); - - RESOURCES: - for my $res (@resources) { - next RESOURCES if exists $res_key{$res}; - - push @{ $self->get_resources_ref() }, $res; - $res_key{$res}=undef; - $res->add_coll($self); - } - - return; -} - -sub get_parents { - my ($self)=@_; - return @{ $self->get_parents_ref() }; -} -sub get_children { - my ($self)=@_; - return @{ $self->get_children_ref() }; -} -sub get_resources { - my ($self)=@_; - return @{ $self->get_resources_ref() }; -} - -} - -1; diff --git a/lib/WebCoso/Collections.pm b/lib/WebCoso/Collections.pm deleted file mode 100644 index f0f9815..0000000 --- a/lib/WebCoso/Collections.pm +++ /dev/null @@ -1,74 +0,0 @@ -package WebCoso::Collections; -use strict; -use warnings; -use Class::Std; -use List::MoreUtils 'any'; - -{ -my %collections_of :ATTR( :get ); - -sub BUILD { - my ($self,$ident,$args_ref)=@_; - - $collections_of{$ident} = []; -} - -sub add_collection { - my ($self, $collection)=@_; - - return if any { $_ eq $collection } $self->get_all_collections(); - - push @{ $self->get_collections_ref() }, $collection; -} - -sub get_all_collections { - my ($self)=@_; - return @{ $self->get_collections_ref() }; -} - -sub get_root_collections { - my ($self)=@_; - - return grep { - $_->get_parents() == 0 - } $self->get_all_collections(); -} - -sub get_leaf_collections { - my ($self)=@_; - - return grep { - $_->get_children() == 0 - } $self->get_all_collections(); -} - -sub get_axes { - return 'language'; -} - -sub get_axis_values { - my ($self,$axis_name)=@_; - if ($axis_name eq 'language') { - return $self->_get_languages(); - } - else { - return; - } -} - -sub _get_languages { - my ($self)=@_; - my %langs=(); - - for my $collection ($self->get_all_collections()) { - @langs{ $collection->get_axis_values('language') } = (); - } - - delete $langs{''}; - - return keys %langs; -} - -} - -1; diff --git a/lib/WebCoso/Config.pm b/lib/WebCoso/Config.pm deleted file mode 100644 index 018c3c7..0000000 --- a/lib/WebCoso/Config.pm +++ /dev/null @@ -1,176 +0,0 @@ -package WebCoso::Config; -use strict; -use warnings; -use WebCoso::Collections; -use WebCoso::Pipeline; -use WebCoso::X; -use utf8; - -my @resources; -my $collections=WebCoso::Collections->new(); -my %resource_to_pipeline; -my %name_to_resource; -my %name_to_collection; - -sub read_scalar { - my ($class,$content,$filename)=@_; - $WebCoso::Config::Helpers::FILENAME=$filename; - $content=<<'EOF'.$content; -package WEBCOSO::CONFIG; -no strict; -WebCoso::Config::Helpers->import(); -EOF - eval $content; - if ($@) { - WebCoso::X::ConfigError->throw( - filename => $filename, - nested => $@, - ); - } - my $symbols=\%WEBCOSO::CONFIG::; - for my $name (keys %$symbols) { - my $object=${*{$symbols->{$name}}{SCALAR}}; - my $type=ref($object); - if ($type eq 'WebCoso::Resource') { - $name_to_resource{$name}=$object; - } - elsif ($type eq 'WebCoso::Collection') { - $name_to_collection{$name}=$object; - } - } - return 1; -} - -sub add_resource { - my ($class,$resource)=@_; - push @resources,$resource; -} - -sub get_all_resources { - return @resources; -} - -sub get_res_by_name { - my ($class,$name)=@_; - - if (exists $name_to_resource{$name}) { - return $name_to_resource{$name}; - } - else { - WebCoso::X::NoSuchResource->throw( - resource => $name - ); - } -} - -sub add_collection { - my ($class,$collection)=@_; - $collections->add_collection($collection); -} - -sub get_collections { - return $collections; -} - -sub get_coll_by_name { - my ($class,$name)=@_; - - if (exists $name_to_collection{$name}) { - return $name_to_collection{$name}; - } - else { - WebCoso::X::NoSuchCollection->throw( - collection => $name - ); - } -} - -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::Collections->new(); - %resource_to_pipeline=(); -} - -package WebCoso::Config::Helpers; -use Path::Class; -use WebCoso::Resource; -use WebCoso::Collection; -use Exporter::Lite; -use vars qw($FILENAME @EXPORT); - -@EXPORT=qw(res coll); - -sub res { - my $dest_filename=pop @_; - my $short_pipeline_name=pop @_; - my @source_files=@_; - - my $config_dir=file($FILENAME)->parent->absolute; - - $dest_filename=file($dest_filename)->absolute($config_dir); - - my @abs_source_files = map { - file($_)->absolute($config_dir); - } @source_files; - - my $pipeline_name="WebCoso::Pipeline::$short_pipeline_name"; - - if (! WebCoso::Pipeline->is_pipeline($pipeline_name)) { - WebCoso::X::NoSuchPipeline->throw( - pipeline => $short_pipeline_name, - ); - }; - - 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 => sub{_open_file($filename)}, - ); - } - - WebCoso::Config->add_resource($resource); - - # brutto! - $resource_to_pipeline{$resource}=$pipeline_name; - - return $resource; -} - -sub coll { - my ($name,$parents,$children,$resources)=@_; - - my $collection=WebCoso::Collection->new({ - name=>$name, - parents=>$parents||[], - children=>$children||[], - resources=>$resources||[], - }); - - 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/Driver.pm b/lib/WebCoso/Driver.pm deleted file mode 100644 index d5e1db8..0000000 --- a/lib/WebCoso/Driver.pm +++ /dev/null @@ -1,19 +0,0 @@ -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,'meta'); - } - for my $resource (@resources) { - WebCoso::Config->get_pipeline_for($resource)->process($resource,'gen'); - } - - return 1; -} - -1; diff --git a/lib/WebCoso/Pipeline.pm b/lib/WebCoso/Pipeline.pm deleted file mode 100644 index b45d431..0000000 --- a/lib/WebCoso/Pipeline.pm +++ /dev/null @@ -1,18 +0,0 @@ -package WebCoso::Pipeline; -use strict; -use warnings; -use Module::Pluggable::Fast - name => '_pipelines', - search => [ 'WebCoso::Pipeline' ], - 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/Pipeline/Base.pm b/lib/WebCoso/Pipeline/Base.pm deleted file mode 100644 index 2402b84..0000000 --- a/lib/WebCoso/Pipeline/Base.pm +++ /dev/null @@ -1,43 +0,0 @@ -package WebCoso::Pipeline::Base; -use strict; -use warnings; -use WebCoso::X; -use WebCoso::Step; -use base 'Class::Data::Inheritable'; - -__PACKAGE__->mk_classdata('_steps'); - -sub set_steps { - my ($class,@steps)=@_; - - my @step_instances=(); - - while (@steps) { - my $step_name=shift @steps; - my $step_init_args=shift @steps; - - my $full_step_name="WebCoso::Step::$step_name"; - if (! WebCoso::Step->is_step($full_step_name)) { - WebCoso::X::NoSuchStep->throw( - pipeline => $class, - step => $_, - ); - } - - push @step_instances,$full_step_name->new($step_init_args); - } - - $class->_steps([@step_instances]); -} - -sub process { - my ($class, $resource,$stage)=@_; - - for my $step (@{$class->_steps()}) { - $step->process($resource,$stage); - } - - return 1; -} - -1; diff --git a/lib/WebCoso/Pipeline/Id.pm b/lib/WebCoso/Pipeline/Id.pm deleted file mode 100644 index bcd5615..0000000 --- a/lib/WebCoso/Pipeline/Id.pm +++ /dev/null @@ -1,8 +0,0 @@ -package WebCoso::Pipeline::Id; -use strict; -use warnings; - -sub process { -} - -1; diff --git a/lib/WebCoso/Resource.pm b/lib/WebCoso/Resource.pm deleted file mode 100644 index 7d462f3..0000000 --- a/lib/WebCoso/Resource.pm +++ /dev/null @@ -1,183 +0,0 @@ -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; - -{ -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)=@_; - - return keys %{$axes_of{ident $self}}; -} - -sub get_axis_values { - my ($self,$axis_name)=@_; - - return keys %{$axes_of{ident $self}->{$axis_name}}; -} - -sub set_property { - my $self=shift; - my $axes_spec= (ref($_[0]) eq 'HASH') ? (shift) : {}; - my ($prop_name,$prop_value)=@_; - - $self->_populate_axes_from($axes_spec); - my $key=_genkey($axes_spec); - - $propnames_of{ident $self}->{$prop_name}=undef; - - $values_of{ident $self}->{$prop_name}->{$key}=$prop_value; - - return; -} - -sub get_property { - my $self=shift; - my $axes_spec= (ref($_[0]) eq 'HASH') ? (shift) : {}; - my ($prop_name)=@_; - - ### $self - ### $axes_spec - ### $prop_name - - return unless exists $values_of{ident $self}->{$prop_name}; - my $values_ref=$values_of{ident $self}->{$prop_name}; - - ### $values_ref - - my $req_key=_genkey($axes_spec); - my @keys=sort {($a=~tr/\001//) <=> ($b=~tr/\001//)} keys %$values_ref; - - for my $key (@keys) { - ### testing key: $key - - my $key_rx=_genrx_from_key($key); - - if ($req_key =~ m{$key_rx}) { - return $values_ref->{$key}; - } - } - - return; -} - -sub get_property_fh { - my $self=shift; - my $axes_spec= (ref($_[0]) eq 'HASH') ? (shift) : {}; - my ($prop_name)=@_; - - my $prop_value=$self->get_property($axes_spec,$prop_name); - - return unless defined $prop_value; - - if (ref($prop_value) eq 'CODE') { - $prop_value=$prop_value->(); - } - - if (ref($prop_value)) { # speriamo filehandle... - open my $fh,'<&',$prop_value; # dup in lettura - seek $fh,0,0; - return $fh; - } - else { # speriamo stringa... - my $val="$prop_value"; - open my $fh,'<',\$val; - return $fh; - } -} - -sub get_property_string { - my $self=shift; - my $axes_spec= (ref($_[0]) eq 'HASH') ? (shift) : {}; - my ($prop_name)=@_; - - my $prop_value=$self->get_property($axes_spec,$prop_name); - - return unless defined $prop_value; - - if (ref($prop_value) eq 'CODE') { - $prop_value=$prop_value->(); - } - - if (ref($prop_value)) { # speriamo filehandle... - seek $prop_value,0,0; - return do {local $/;<$prop_value>} - } - else { - return "$prop_value"; - } -} - -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)=@_; - - while (my ($axis_name,$axis_value)=each %$axes_spec) { - my $axis_value_set=($axes_of{ident $self}->{$axis_name} ||= {}); - $axis_value_set->{$axis_value}=undef; - } - - return; -} - -sub _genkey { - my ($axes_spec)=@_; - - my $key="\000"; - $key.=join "\000",map {$_."\001".$axes_spec->{$_}} sort keys %$axes_spec; - $key.="\000"; - - ### chiave: $key - - return $key; -} - -sub _genrx_from_key { - my ($key)=@_; - - my (undef,@axes)=split /\000/,$key; - - ### axes form key: \@axes - - my $rx="(?:"; - $rx.=join "\000).*?(?:",map {quotemeta($_)} @axes; - $rx.=")"; - $rx=qr{^\000.*?${rx}(?:\000|$)}; - - ### regexp: $rx - - return $rx; -} - -} - -1; diff --git a/lib/WebCoso/Step.pm b/lib/WebCoso/Step.pm deleted file mode 100644 index 71a4f07..0000000 --- a/lib/WebCoso/Step.pm +++ /dev/null @@ -1,18 +0,0 @@ -package WebCoso::Step; -use strict; -use warnings; -use Module::Pluggable::Fast - name => '_steps', - search => [ 'WebCoso::Step' ], - require => 1; - -my @steps=_steps(); -my %steps; -@steps{@steps}=(); - -sub is_step { - my ($class,$step_name)=@_; - return exists $steps{$step_name}; -} - -1; diff --git a/lib/WebCoso/Step/Base.pm b/lib/WebCoso/Step/Base.pm deleted file mode 100644 index 8e73705..0000000 --- a/lib/WebCoso/Step/Base.pm +++ /dev/null @@ -1,7 +0,0 @@ -package WebCoso::Step::Base; -use strict; -use warnings; -use Class::Std; -use WebCoso::X; - -1; diff --git a/lib/WebCoso/Step/ReST/SplitLang.pm b/lib/WebCoso/Step/ReST/SplitLang.pm deleted file mode 100644 index cdbc109..0000000 --- a/lib/WebCoso/Step/ReST/SplitLang.pm +++ /dev/null @@ -1,87 +0,0 @@ -package WebCoso::Step::ReST::SplitLang; -use strict; -use warnings; -use base 'WebCoso::Step'; -use Class::Std; - -{ - -=head2 Che fa - -Prende il sorgente da {filename=>'sperosiaunosolo'}->datastream, cerca -righe della forma - - ^\s*.. lang:: (\w*) - -raccoglie tutti i C<$1>, e quelle sono le lingue (C<''> sta per 'tutte -le lingue') - -Splitta poi in {language=>'$1'}->rstdoc (stringhe) - -Fa tutto alla prima passata - -=cut - -my %srckey_of :ATTR(:init_arg :get :default); -my %dstkey_of :ATTR(:init_arg :get :default); - -my $lang_re=qr{^\s*\.\.\s+lang::(?:\s+(\w+))?\s*$}; - -sub process { - my ($self,$resource,$stage)=@_; - - return unless $stage eq 'meta'; - - my $srckey=$self->get_srckey(); - my $dstkey=$self->get_dstkey(); - - my $fh=$resource->get_property_fh($srckey); - if (!defined $fh) { - my ($filename)=$resource->get_axis_values('filename'); - $fh=$resource->get_property_fh({filename=>$filename},$srckey); - } - - binmode $fh,':utf8'; - - # raccolgo le lingue usate - my %langs=(''=>undef); - seek $fh,0,0; - while (my $line=<$fh>) { - if ($line =~ m{$lang_re}) { - $langs{$1||''}=undef; - } - } - delete $langs{''}; - seek $fh,0,0; - - if (%langs) { # multilingua: split! - my $curlang='';my %docs=(); - while (my $line=<$fh>) { - if ($line =~ m{$lang_re}) { - $curlang=$1||''; - next; - } - if ($curlang) { - $docs{$curlang}.=$line; - } - else { # 'any', per cui scrivo su tutti - $docs{$_}.=$line for keys %langs; - } - } - # salvo - $resource->set_property({language=>$_},$dstkey=>$docs{$_}) - for keys %langs; - } - else { # monolingua: passa il filehandle - $resource->set_property($dstkey=>$fh); - } - - # rimetto a posto il filehandle - seek $fh,0,0; - - return; -} - -} - -1; diff --git a/lib/WebCoso/Step/ReST/ToXml.pm b/lib/WebCoso/Step/ReST/ToXml.pm deleted file mode 100644 index f5cf5a9..0000000 --- a/lib/WebCoso/Step/ReST/ToXml.pm +++ /dev/null @@ -1,139 +0,0 @@ -package WebCoso::Step::ReST::ToXml; -use strict; -use warnings; -use base 'WebCoso::Step'; -use Class::Std; -use Inline 'Python'; -use XML::LibXML; -use Encode; - -{ - -=head2 Che fa - -prende i {language=>'quelchece'}->rstdoc, li passa a docutils, prende -l'xml, lo passa al parser, e salva il dom in -{language=>'quelchece'}->xmldom - -suppone venga tutto da un solo file - -Fa tutto alla prima passata, e raccatta un po' di meta - -=cut - -my %srckey_of :ATTR(:init_arg :get :default); -my %dstkey_of :ATTR(:init_arg :get :default); - -my $xml_parser=XML::LibXML->new(); -$xml_parser->load_ext_dtd(0); -$xml_parser->clean_namespaces(1); - -sub process { - my ($self,$resource,$stage)=@_; - - return unless $stage eq 'meta'; - - my ($src_path)=$resource->get_axis_values('filename'); - - my $srckey=$self->get_srckey(); - my $dstkey=$self->get_dstkey(); - - my ($rst_doc,$xml_dom); - $rst_doc=$resource->get_property_string($srckey); - if (defined $rst_doc) { # monolingua - my $dom=rst2xml($rst_doc,$src_path); - $resource->set_property( - $dstkey, - $dom, - ); - $self->_set_meta($resource,$dom); - } - else { # multilingua - my @langs=$resource->get_axis_values('language'); - for my $cur_lang (@langs) { - $rst_doc=$resource->get_property_string({language=>$cur_lang},$srckey); - my $dom=rst2xml($rst_doc,$src_path,$cur_lang); - $resource->set_property( - {language=>$cur_lang}, - $dstkey, - $dom, - ); - $self->_set_meta($resource,$cur_lang,$dom); - } - } - - return; -} - -{ -my %docinfo_fields=( - title => '/document/title', - subtitle => '/document/subtitle', - author => '/document/docinfo/author|/document/docinfo/authors/author', - version => '/document/docinfo/version', - status => '/document/docinfo/status', - date => '/document/docinfo/date', - creation_date => '/document/docinfo/field[field_name="CreationDate"]/field_body', -); -my $collections='/document/docinfo/field[field_name="Collection"]/field_body|/document/docinfo/field[field_name="Collections"]/field_body//list_item'; -sub _set_meta { - my ($self,$res,$lang,$dom)=@_; - - if ($dom) { # 4 parametri - $lang={language=>$lang}; - } - else { # 3 parametri: monolingua - $dom=$lang; - $lang={}; - } - - for my $meta (keys %docinfo_fields) { - my @nodes=$dom->findnodes($docinfo_fields{$meta}); - next unless @nodes; - @nodes=map {$_->textContent()} @nodes; - if (@nodes==1) { - $res->set_property($lang,$meta,$nodes[0]); - } - else { - $res->set_property($lang,$meta,[@nodes]); - } - } - - # per questo serve poter chiamare coll e res per nome TODO - #my @collections=$dom->findnodes($collections); - #return unless @collections; - #@collections=map {$_->textContent()} @collections; - - #$res->add_coll($_) for @collections; - - return; -} -} - -sub rst2xml { - my ($rst_string,$source_path,$language)=@_; - - $rst_string=Encode::encode('utf-8',$rst_string); - my $xml_string=_rst2xml($rst_string,$source_path,'en'); - $xml_parser->base_uri($source_path); - return $xml_parser->parse_string($xml_string); -} - -} -1; -__DATA__ -__Python__ - -import locale -import docutils.core - -def _rst2xml(source,source_path,language): - return docutils.core.publish_string( - source,source_path=source_path, - writer_name='xml', - settings_overrides={ - 'input_encoding':'utf-8', - 'output_encoding':'utf-8', - 'language_code':language, - }, - ) diff --git a/lib/WebCoso/X.pm b/lib/WebCoso/X.pm deleted file mode 100644 index a882709..0000000 --- a/lib/WebCoso/X.pm +++ /dev/null @@ -1,95 +0,0 @@ -package WebCoso::X; -use utf8; -use strict; -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' => { - isa => 'WebCoso::X::FileError', - fields => [ 'abs_filename' ], - description => 'un file di una risorsa non è presente', - }, - 'WebCoso::X::OpenError' => { - isa => 'WebCoso::X::FileError', - 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::NoSuchCollection' => { - isa => 'WebCoso::X::Base', - fields => [ 'collection' ], - description => 'è stata richiesta una collezione ignota', - }, - 'WebCoso::X::NoSuchStep' => { - isa => 'WebCoso::X::Base', - fields => [ 'pipeline', 'step' ], - description => 'una pipeline vuole usare uno step ignoto', - }, - ); - -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(); -} - -sub WebCoso::X::NoSuchCollection::full_message { - my ($self)=@_; - return 'Collezione ignota: ' . $self->collection(); -} - -sub WebCoso::X::NoSuchStep::full_message { - my ($self)=@_; - - return 'La pipeline ' . $self->pipeline() . ' vuole usare lo step ' . $self->step() . ' che è ignoto'; -} - -1; diff --git a/t/01-config.t b/t/01-config.t deleted file mode 100644 index 3e82cd2..0000000 --- a/t/01-config.t +++ /dev/null @@ -1,300 +0,0 @@ -#!/usr/bin/perl -use strict; -use warnings; -use Path::Class; -use Test::More 'no_plan'; -use Test::Exception; - -my $thisdir=file($0)->parent->absolute; - -BEGIN { use_ok('WebCoso::Config'); } - -{ -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'); - -my @resources=WebCoso::Config->get_all_resources(); -is(scalar @resources,1,'una risorsa definta'); - -isa_ok($resources[0],'WebCoso::Resource'); -is_deeply( - [$resources[0]->get_axes()], - ['filename'], - 'un solo asse'); -is_deeply( - [$resources[0]->get_axis_values('filename')], - ["$thisdir/src/file1.rest.txt"], - 'filename'); -my $content=$resources[0]->get_property_string({filename=>"$thisdir/src/file1.rest.txt"},'datastream'); -is($content, - <<'EOF',''); -Titolo -====== - -testo -EOF -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'; -coll('coll1'); -EOF - -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_collections(); -isa_ok($collections,'WebCoso::Collections'); -my @collections=$collections->get_all_collections(); -is(scalar @collections,1,'una collezione'); - -is_deeply( - [$collections[0]->get_axes()], - ['language'], - 'multilingua'); -is_deeply( - [$collections[0]->get_axis_values('language')], - [], - 'ma nessuna definita'); -is_deeply( - [$collections->get_axes()], - ['language'], - 'multilingua, insieme'); -is_deeply( - [$collections->get_axis_values('language')], - [], - 'ma nessuna definita, insieme'); -my $props=$collections[0]->get_properties(language=>''); -isa_ok($props,'HASH'); -is_deeply( - $props, - {name=>'coll1'}, - 'solo il nome'); - -is_deeply( - [$collections[0]->get_parents()], - [], - 'no parents'); -is_deeply( - [$collections[0]->get_children()], - [], - 'no children'); -is_deeply( - [$collections[0]->get_resources()], - [], - 'no resources'); -is_deeply( - [$collections->get_root_collections()], - [@collections], - 'una radice'); -is_deeply( - [$collections->get_leaf_collections()], - [@collections], - 'una foglia'); -} - -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_collections(); -my @collections=$collections->get_all_collections(); -is(scalar @collections,2,'due collezioni'); - -# qui sto assumendo che le collezioni vengano registrate in ordine di -# definizione. Forse non sarà sempre vero - -is_deeply( - [sort $collections[0]->get_axis_values('language')], - ['en', 'it'], - 'due lingue'); -is_deeply( - [sort $collections->get_axis_values('language')], - ['en', 'it'], - 'due lingue'); -is( - $collections[0]->get_properties(language=>'en')->{name}, - 'coll1-en', - 'nome en'); -is( - $collections[0]->get_properties(language=>'it')->{name}, - 'coll1', - 'nome it'); -is( - $collections[1]->get_properties(language=>'it')->{name}, - 'coll2', - 'nome default'); - -is_deeply( - [$collections[0]->get_parents()], - [$collections[1]], - 'c2 padre di c1'); -is_deeply( - [$collections[0]->get_children()], - [], - 'c1 no children'); -is_deeply( - [$collections[1]->get_parents()], - [], - 'c2 no parents'); -is_deeply( - [$collections[1]->get_children()], - [$collections[0]], - 'c1 figlio di c2'); -is_deeply( - [$collections->get_root_collections()], - [$collections[1]], - 'una radice'); -is_deeply( - [$collections->get_leaf_collections()], - [$collections[0]], - 'una foglia'); -} - -WebCoso::Config->clear(); - -{ -my $conf_file=<<'EOF'; -$c1=coll({it=>'coll1',en=>'coll1-en'}); -$c2=coll('coll2',[],[$c1]); -$c1->add_child($c2); -EOF - -ok(WebCoso::Config->read_scalar($conf_file,"$thisdir/config-in-test"), - 'eseguita la configurazione (no strict)'); - -my $collections=WebCoso::Config->get_collections(); -my @collections=$collections->get_all_collections(); -is(scalar @collections,2,'due collezioni'); - -is_deeply( - [$collections[1]->get_children()], - [$collections[0]], - 'c1 figlio di c2'); -is_deeply( - [$collections[0]->get_parents()], - [$collections[1]], - 'c2 padre di c1'); - is_deeply( - [$collections[0]->get_children()], - [$collections[1]], - 'c2 figlio di c1'); -is_deeply( - [$collections[1]->get_parents()], - [$collections[0]], - 'c1 padre di c2'); -is_deeply( - [$collections->get_root_collections()], - [], - 'nessuna radice'); -is_deeply( - [$collections->get_leaf_collections()], - [], - 'nessuna foglia'); -} - -WebCoso::Config->clear(); - -{ -my $conf_file=<<'EOF'; -$r1=res('src/file1.rest.txt','Id','dst/file.html'); -$c1=coll('coll1'); -$c1->add_res($r1); -EOF - -ok(WebCoso::Config->read_scalar($conf_file,"$thisdir/config-in-test"), - 'eseguita la configurazione (no strict)'); - -my @resources=WebCoso::Config->get_all_resources(); -my $collections=WebCoso::Config->get_collections(); -my @collections=$collections->get_all_collections(); - -is(scalar @resources,1,'una risorsa'); -is(scalar @collections,1,'una collezione'); -is_deeply( - [$resources[0]->get_collections()], - [$collections[0]], - 'aggancio r->c'); -is_deeply( - [$collections[0]->get_resources()], - [$resources[0]], - 'aggancio c->r'); -} - -WebCoso::Config->clear(); - -{ -my $conf_file=<<'EOF'; -$r1=res('src/file1.rest.txt','Id','dst/file.html'); -$c1=coll('coll1'); -$c2=coll('coll2'); -$c1->add_res($r1); -$r1->add_coll($c1); -$c2->add_res($r1); -EOF - -ok(WebCoso::Config->read_scalar($conf_file,"$thisdir/config-in-test"), - 'eseguita la configurazione (no strict)'); - -my @resources=WebCoso::Config->get_all_resources(); -my $collections=WebCoso::Config->get_collections(); -my @collections=$collections->get_all_collections(); - -is(scalar @resources,1,'una risorsa'); -is(scalar @collections,2,'due collezioni'); -is_deeply( - [sort $resources[0]->get_collections()], - [sort $collections[0],$collections[1]], - 'aggancio r->c'); -is_deeply( - [$collections[0]->get_resources()], - [$resources[0]], - 'aggancio c->r'); -is_deeply( - [$collections[1]->get_resources()], - [$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'; -} diff --git a/t/02-driver.t b/t/02-driver.t deleted file mode 100644 index bdcf78b..0000000 --- a/t/02-driver.t +++ /dev/null @@ -1,36 +0,0 @@ -#!/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,2,'due chiamate'); -is($calls[0]->{resource}, - $resources[0], - 'alla risorsa giusta (1)'); -is($calls[1]->{resource}, - $resources[0], - 'alla risorsa giusta (2)'); -is($calls[0]->{stage}, - 'meta', - 'stage1==meta'); -is($calls[1]->{stage}, - 'gen', - 'stage1==gen'); diff --git a/t/03-pipeline.t b/t/03-pipeline.t deleted file mode 100644 index a1b364b..0000000 --- a/t/03-pipeline.t +++ /dev/null @@ -1,53 +0,0 @@ -#!/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; -use WebCoso::Driver; -use WebCoso::Pipeline::Test; - -my $thisdir=file($0)->parent->absolute; - -my $conf_file=<<'EOF'; -res('src/file1.rest.txt','Test','dst/file.html'); -EOF - -WebCoso::Config->read_scalar($conf_file,"$thisdir/config-in-test"); - -WebCoso::Driver->run(); - -my @resources=WebCoso::Config->get_all_resources(); - -my @calls1=@{WebCoso::Pipeline::Test->_steps()->[0]->get_calls()}; -is(scalar @calls1,2,"2 chiamata a Step1"); -is($calls1[0]->{resource}, - $resources[0], - 'risorsa giusta passata a Step1(1)'); -is($calls1[1]->{resource}, - $resources[0], - 'risorsa giusta passata a Step1(2)'); -is($calls1[0]->{stage}, - 'meta', - 'stage1==meta (step1)'); -is($calls1[1]->{stage}, - 'gen', - 'stage2==gen (step1)'); - -my @calls2=@{WebCoso::Pipeline::Test->_steps()->[1]->get_calls()}; -is(scalar @calls2,2,"2 chiamata a Step2"); -is($calls2[0]->{resource}, - $resources[0], - 'risorsa giusta passata a Step2(1)'); -is($calls2[1]->{resource}, - $resources[0], - 'risorsa giusta passata a Step2(2)'); -is($calls2[0]->{stage}, - 'meta', - 'stage1==meta (step2)'); -is($calls2[1]->{stage}, - 'gen', - 'stage2==gen (step2)'); - diff --git a/t/04-resource.t b/t/04-resource.t deleted file mode 100644 index 808629f..0000000 --- a/t/04-resource.t +++ /dev/null @@ -1,84 +0,0 @@ -#!/usr/bin/perl -use strict; -use warnings; -use Test::More 'no_plan'; -use Test::Exception; - -BEGIN { use_ok('WebCoso::Resource'); } - -my $r=WebCoso::Resource->new(); - -isa_ok($r,'WebCoso::Resource'); - -is_deeply([$r->get_axes()],[],'no axes'); - -$r->set_property(prop1=>'value1'); -is($r->get_property('prop1'),'value1','simple global'); -is($r->get_property({},'prop1'),'value1','explicit global'); -is($r->get_property({a1=>1,a2=>3},'prop1'),'value1','over global'); -is_deeply([$r->get_axes()],[],'no axes'); - -$r->set_property(prop1=>'value2'); -is($r->get_property('prop1'),'value2','simple global redef'); -is($r->get_property({},'prop1'),'value2','explicit global redef'); -is($r->get_property({a1=>1,a2=>3},'prop1'),'value2','over global redef'); -is_deeply([$r->get_axes()],[],'no axes'); - -$r->set_property({},prop1=>'value3'); -is($r->get_property('prop1'),'value3','simple global redef'); -is($r->get_property({},'prop1'),'value3','explicit global redef'); -is($r->get_property({a1=>1,a2=>3},'prop1'),'value3','over global redef'); -is_deeply([$r->get_axes()],[],'no axes'); - -$r->set_property({a1=>3},prop2=>'v1'); -ok(! defined $r->get_property('prop2'),'undef on generalization'); -is($r->get_property({a1=>3},'prop2'),'v1','specific'); -is($r->get_property({a1=>3,a2=>3},'prop2'),'v1','over specific'); -is_deeply([$r->get_axes()],['a1'],'1 axis'); -is_deeply([$r->get_axis_values('a1')],[3],'1 axis, 1 value'); - -$r->set_property({a1=>2},prop2=>'v2'); -ok(! defined $r->get_property('prop2'),'undef on generalization'); -is($r->get_property({a1=>3},'prop2'),'v1','specific, oldval'); -is($r->get_property({a1=>3,a2=>3},'prop2'),'v1','over specific, oldval'); -is($r->get_property({a1=>2},'prop2'),'v2','specific, newval'); -is($r->get_property({a1=>2,a2=>3},'prop2'),'v2','over specific, newval'); -is_deeply([$r->get_axes()],['a1'],'1 axis'); -is_deeply([sort $r->get_axis_values('a1')],[2,3],'1 axis, 2 values'); - -$r->set_property({a1=>1,a2=>2},prop3=>'vx'); -ok(! defined $r->get_property({a1=>1},'prop3'),'undef on generalization, 2'); -is_deeply([sort $r->get_axes()],['a1','a2'],'2 axes'); -is_deeply([sort $r->get_axis_values('a1')],[1,2,3],'1st axis, 3 values'); -is_deeply([sort $r->get_axis_values('a2')],[2],'2nd axis, 1 value'); - -# test sui vari get_property_* - -$r=WebCoso::Resource->new(); - -{ -open my $fh,'<',__FILE__; -$r->set_property(fh=>$fh); -} -{ -my $fh=$r->get_property_fh('fh'); -is((scalar <$fh>),"#!/usr/bin/perl\n",'legge fh'); -} -{ -my $content=$r->get_property_string('fh'); -like($content,qr{^#!/usr/bin/perl\n},'legge string'); -} - -$r->set_property(fh=> - sub { - open my $fh,'<',__FILE__; - return $fh; - }); -{ -my $fh=$r->get_property_fh('fh'); -is((scalar <$fh>),"#!/usr/bin/perl\n",'legge fh lazy'); -} -{ -my $content=$r->get_property_string('fh'); -like($content,qr{^#!/usr/bin/perl\n},'legge string lazy'); -} diff --git a/t/05-naming.t b/t/05-naming.t deleted file mode 100644 index 5c645e0..0000000 --- a/t/05-naming.t +++ /dev/null @@ -1,43 +0,0 @@ -#!/usr/bin/perl -use strict; -use warnings; -use Path::Class; -use Test::More 'no_plan'; -use Test::Exception; -use WebCoso::Config; - -my $thisdir=file($0)->parent->absolute; - -{ -my $conf_file=<<'EOF'; -$res1=res('src/file1','Id','dst/file1'); -$res2=res('src/file2','Id','dst/file2'); -$coll1=coll('collezione'); -EOF - -ok(WebCoso::Config->read_scalar($conf_file,"$thisdir/config-in-test"), - 'eseguita la configurazione'); -is((WebCoso::Config->get_res_by_name('res1') - ->get_axis_values('filename'))[0], - "$thisdir/src/file1", - 'ok primo nome'); -is((WebCoso::Config->get_res_by_name('res2') - ->get_axis_values('filename'))[0], - "$thisdir/src/file2", - 'ok secondo nome'); -is(WebCoso::Config->get_coll_by_name('coll1') - ->get_properties(language=>'')->{name}, - 'collezione', - 'ok nome collezione'); - -throws_ok { - WebCoso::Config->get_res_by_name('coll1') - } - 'WebCoso::X::NoSuchResource', - 'muore se si chiede il tipo errato (r-c)'; -throws_ok { - WebCoso::Config->get_coll_by_name('res1') - } - 'WebCoso::X::NoSuchCollection', - 'muore se si chiede il tipo errato (c-r)'; -} diff --git a/t/lib/WebCoso/Pipeline/Test.pm b/t/lib/WebCoso/Pipeline/Test.pm deleted file mode 100644 index 8c339ff..0000000 --- a/t/lib/WebCoso/Pipeline/Test.pm +++ /dev/null @@ -1,29 +0,0 @@ -package WebCoso::Pipeline::Test; -use strict; -use warnings; -use base 'WebCoso::Pipeline::Base'; - -__PACKAGE__->set_steps( - Step1 => {p1 => 1}, - Step2 => {p2 => 2} -); - -my @calls; - -sub process { - my ($class,$resource,$stage)=@_; - - my $call={ resource => $resource, stage => $stage }; - - my $ret=$class->SUPER::process($resource,$stage); - - push @calls, $call; - - return $ret; -} - -sub get_calls { - return @calls; -} - -1; diff --git a/t/lib/WebCoso/Step/Step1.pm b/t/lib/WebCoso/Step/Step1.pm deleted file mode 100644 index c9f2c96..0000000 --- a/t/lib/WebCoso/Step/Step1.pm +++ /dev/null @@ -1,26 +0,0 @@ -package WebCoso::Step::Step1; -use base 'WebCoso::Step::Base'; -use Class::Std; -use strict; -use warnings; - -{ -my %calls_of :ATTR(:default<[]> :get); -my %p1_of :ATTR(:init_arg); - -sub process { - my ($self,$resource,$stage)=@_; - - my $out='stuff'; - - push @{$calls_of{ident $self}},{ - resource => $resource, - out_res => $out, - stage => $stage, - }; - - return $out; -} - -} -1; diff --git a/t/lib/WebCoso/Step/Step2.pm b/t/lib/WebCoso/Step/Step2.pm deleted file mode 100644 index 08a32c2..0000000 --- a/t/lib/WebCoso/Step/Step2.pm +++ /dev/null @@ -1,26 +0,0 @@ -package WebCoso::Step::Step2; -use base 'WebCoso::Step::Base'; -use Class::Std; -use strict; -use warnings; - -{ -my %calls_of :ATTR(:default<[]> :get); -my %p2_of :ATTR(:init_arg); - -sub process { - my ($self,$resource,$stage)=@_; - - my $out='stuff'; - - push @{$calls_of{ident $self}},{ - resource => $resource, - out_res => $out, - stage => $stage, - }; - - return $out; -} - -} -1; diff --git a/t/src/file1.rest.txt b/t/src/file1.rest.txt deleted file mode 100644 index 3af7f03..0000000 --- a/t/src/file1.rest.txt +++ /dev/null @@ -1,4 +0,0 @@ -Titolo -====== - -testo diff --git a/t/steps/rest-splitlang.t b/t/steps/rest-splitlang.t deleted file mode 100644 index 10283b4..0000000 --- a/t/steps/rest-splitlang.t +++ /dev/null @@ -1,103 +0,0 @@ -#!/usr/bin/perl -use strict; -use warnings; -use Path::Class; -use Test::More 'no_plan'; -use Test::Differences; -use WebCoso::Resource; - -BEGIN {use_ok('WebCoso::Step::ReST::SplitLang')} -my $step=WebCoso::Step::ReST::SplitLang->new(); - -sub make_res { - my ($rst_doc,$key)=@_; - $key||='datastream'; - my $resource=WebCoso::Resource->new(); - open my $rst_fh,'<',\$rst_doc; - $resource->set_property({filename=>'mydoc.rest.txt'},$key=>$rst_fh); - - return $resource; -} - -my $resource=make_res(<<'END_REST'); -riga comune -.. lang:: -ancora comune -.. lang:: it -italiano -.. lang:: en -inglese - .. lang:: - any nested -.. lang:: it -italiano ancora -.. lang:: -comune (con spazi) -END_REST - - -$step->process($resource,'gen'); -is_deeply([$resource->get_axes()], - ['filename'], - 'no action on second pass'); - -$step->process($resource,'meta'); - -is_deeply([sort $resource->get_axes()], - ['filename','language'], - 'action on first pass'); -is_deeply([sort $resource->get_axis_values('language')], - ['en','it'], - 'lingue giuste'); -eq_or_diff($resource->get_property_string({language=>'it'},'rstdoc'),<<'END_REST_IT','italiano'); -riga comune -ancora comune -italiano - any nested -italiano ancora -comune (con spazi) -END_REST_IT - -eq_or_diff($resource->get_property_string({language=>'en'},'rstdoc'),<<'END_REST_EN','inglese'); -riga comune -ancora comune -inglese - any nested -comune (con spazi) -END_REST_EN - -my $rst_doc=<<'END_REST'; -tutto a comune -monolingua -END_REST - -$resource=make_res($rst_doc); - -$step->process($resource,'meta'); -is_deeply([$resource->get_axes()], - ['filename'], - 'monolingua'); -eq_or_diff($resource->get_property_string('rstdoc'),$rst_doc,'monolingua cat'); - -$rst_doc=<<'END_REST'; -.. lang:: -tutto a comune -monolingua -END_REST - -$resource=make_res($rst_doc); - -$step->process($resource,'meta'); -is_deeply([$resource->get_axes()], - ['filename'], - 'monolingua 2'); -eq_or_diff($resource->get_property_string('rstdoc'),$rst_doc,'monolingua 2 cat'); - -# test per le chiavi arbitrarie -$step=WebCoso::Step::ReST::SplitLang->new({from=>'source',to=>'dest'}); -$rst_doc=<<'END_REST'; -dati vari -END_REST -$resource=make_res($rst_doc,'source'); -$step->process($resource,'meta'); -eq_or_diff($resource->get_property_string('dest'),$rst_doc,'chiavi arbitrarie'); diff --git a/t/steps/rest-xml.t b/t/steps/rest-xml.t deleted file mode 100644 index 1d9f956..0000000 --- a/t/steps/rest-xml.t +++ /dev/null @@ -1,156 +0,0 @@ -#!/usr/bin/perl -use utf8; -use strict; -use warnings; -use Path::Class; -use Test::More 'no_plan'; -use Test::Differences; -use Encode; -use WebCoso::Resource; - -BEGIN {use_ok('WebCoso::Step::ReST::ToXml')} -my $step=WebCoso::Step::ReST::ToXml->new(); - -my $srckey='rstdoc'; -sub make_res { - my $resource=WebCoso::Resource->new(); - # serve solo per il path - $resource->set_property({filename=>'/tmp/mydoc.rest.txt'},datastream=>undef); - if (@_==1) { # monolingua - $resource->set_property($srckey=>$_[0]); - } - else { # multilingua - my %rst_doc=@_; - while (my ($lang,$str)=each %rst_doc) { - $resource->set_property( - {language=>$lang}, - $srckey=>$str - ); - } - } - - return $resource; -} - -my $resource=make_res(<<'END_REST'); -Documento -========= - -paragrafo àè -END_REST - -$step->process($resource,'gen'); -ok(!defined $resource->get_property('xmldom'),'no action on second pass'); - -$step->process($resource,'meta'); -my $dom=$resource->get_property('xmldom'); -isa_ok($dom,'XML::LibXML::Document','parsed ok on first pass'); - -is($dom->findvalue('/document/@source'), - '/tmp/mydoc.rest.txt', - 'source path'); -is($dom->findvalue('/document/title'), - 'Documento', - 'title'); -is($dom->findvalue('count(/document/paragraph)'), - 1, - '1 paragraph'); -is($dom->findvalue('/document/paragraph'), - 'paragrafo àè', - 'paragraph content (unicode)'); - -$resource=make_res(it=><<'END_REST_IT',en=><<'END_REST_EN'); -Documento -========= - -paragrafo -END_REST_IT -Document -======== - -paragraph -END_REST_EN - -$step->process($resource,'meta'); -$dom=$resource->get_property({language=>'it'},'xmldom'); -isa_ok($dom,'XML::LibXML::Document','parsed it'); - -is($dom->findvalue('/document/@source'), - '/tmp/mydoc.rest.txt', - 'source path'); -is($dom->findvalue('/document/title'), - 'Documento', - 'title'); -is($dom->findvalue('/document/paragraph'), - 'paragrafo', - 'paragraph content'); - -$dom=$resource->get_property({language=>'en'},'xmldom'); -isa_ok($dom,'XML::LibXML::Document','parsed en'); - -is($dom->findvalue('/document/@source'), - '/tmp/mydoc.rest.txt', - 'source path'); -is($dom->findvalue('/document/title'), - 'Document', - 'title'); -is($dom->findvalue('/document/paragraph'), - 'paragraph', - 'paragraph content'); - -# test per chiavi arbitrarie -$step=WebCoso::Step::ReST::ToXml->new({from=>'rest',to=>'xml'}); -$srckey='rest'; -$resource=make_res(<<'END_REST'); -testo -END_REST -$step->process($resource,'meta'); -$dom=$resource->get_property('xml'); -isa_ok($dom,'XML::LibXML::Document','chiavi arbitrarie'); - -# test dei metadati -$step=WebCoso::Step::ReST::ToXml->new(); -$srckey='rstdoc'; -$resource=make_res(<<'END_REST'); -======== - Titolo -======== - -sottotitolo -=========== - -:Authors: - dakkar - - doraemon -:Version: 12 -:Status: draft -:Date: 2006-02-07 -:CreationDate: 2006-01-30 -:Collections: - uno - - due - - tre - -testo - -END_REST -$step->process($resource,'meta'); -my %meta_fields=( - author => ['dakkar','doraemon'], - title => 'Titolo', - subtitle => 'sottotitolo', - version => 12, - status => 'draft', - date => '2006-02-07', - creation_date => '2006-01-30', -); -while (my ($f,$v)=each %meta_fields) { - if (ref $v) { - is_deeply([sort @{$resource->get_property($f)}], - $v, - "meta: $f"); - } - else { - is($resource->get_property($f), - $v, - "meta: $f"); - } -} -- cgit v1.2.3