diff options
author | dakkar <dakkar@luxion> | 2005-10-18 13:41:42 +0000 |
---|---|---|
committer | dakkar <dakkar@luxion> | 2005-10-18 13:41:42 +0000 |
commit | 1b22e99fb9fc14c211795f14730a1ae4b337e35f (patch) | |
tree | 413bb1c33c703ab55d99cc77d18050bc1dc6ce9f | |
parent | r669@narval2: dakkar | 2005-10-03 18:49:13 +0200 (diff) | |
download | WebCoso-1b22e99fb9fc14c211795f14730a1ae4b337e35f.tar.gz WebCoso-1b22e99fb9fc14c211795f14730a1ae4b337e35f.tar.bz2 WebCoso-1b22e99fb9fc14c211795f14730a1ae4b337e35f.zip |
inizio del progetto: si possono definire semplici risorse via file di configurazione
git-svn-id: svn://luxion/repos/WebCoso/trunk@3 fcb26f47-9200-0410-b104-b98ab5b095f3
-rw-r--r-- | Build.PL | 15 | ||||
-rw-r--r-- | lib/WebCoso.pm | 8 | ||||
-rw-r--r-- | lib/WebCoso/Config.pm | 58 | ||||
-rw-r--r-- | lib/WebCoso/Config/Resource.pm | 62 | ||||
-rw-r--r-- | t/01-config.t | 43 | ||||
-rw-r--r-- | t/src/file1.rest.txt | 4 |
6 files changed, 190 insertions, 0 deletions
diff --git a/Build.PL b/Build.PL new file mode 100644 index 0000000..0918f8a --- /dev/null +++ b/Build.PL @@ -0,0 +1,15 @@ +#!/usr/bin/perl +use Module::Build; + +my $build=Module::Build->new( + module_name => 'WebCoso', + license => 'GPL', + requires => { + Class::Std => 0, + Path::Class => 0, + }, + build_requires => { + Test::More => 0, + }, +); +$build->create_build_script(); diff --git a/lib/WebCoso.pm b/lib/WebCoso.pm new file mode 100644 index 0000000..67bee2f --- /dev/null +++ b/lib/WebCoso.pm @@ -0,0 +1,8 @@ +package WebCoso; +use strict; +use warnings; +use vars '$VERSION'; + +$VERSION='0.1'; + +1; diff --git a/lib/WebCoso/Config.pm b/lib/WebCoso/Config.pm new file mode 100644 index 0000000..68968da --- /dev/null +++ b/lib/WebCoso/Config.pm @@ -0,0 +1,58 @@ +package WebCoso::Config; +use strict; +use warnings; +use vars '@resources'; + +sub read_scalar { + my ($class,$content,$filename)=@_; + $WebCoso::Config::Helpers::FILENAME=$filename; + $content=<<'EOF'.$content; +package WEBCOSO::CONFIG; +WebCoso::Config::Helpers->import(); +EOF + eval $content; + if ($@) { + die("Error reading configuration from $filename: $@\n"); + } + else { + return 1; + } +} + +sub add_resource { + my ($class,$resource)=@_; + push @resources,$resource; +} + +sub get_all_resources { + return @resources; +} + +package WebCoso::Config::Helpers; +use Path::Class; +use WebCoso::Config::Resource; +use Exporter::Lite; +use vars qw($FILENAME @EXPORT); + +@EXPORT=qw(res); + +sub res { + my $dest_filename=pop @_; + my $pipeline_name=pop @_; + my @source_files=@_; + + my $config_dir=file($FILENAME)->parent->absolute; + + $dest_filename=file($dest_filename)->absolute($config_dir); + for (@source_files) { + $_=file($_)->absolute($config_dir); + } + + WebCoso::Config::Resource->new({ + source=>[@source_files], + pipeline=>$pipeline_name, + destination=>$dest_filename + }); +} + +1; diff --git a/lib/WebCoso/Config/Resource.pm b/lib/WebCoso/Config/Resource.pm new file mode 100644 index 0000000..b499fec --- /dev/null +++ b/lib/WebCoso/Config/Resource.pm @@ -0,0 +1,62 @@ +package WebCoso::Config::Resource; +use strict; +use warnings; +use Class::Std; +use WebCoso::Config; + +{ + +my %sources_of :ATTR( :init_arg<source> ); +my %pipelines_of :ATTR( :init_arg<pipeline> ); +my %dest_of :ATTR( :init_arg<destination> ); + +sub BUILD { + my ($self,$ident,$args_ref)=@_; + WebCoso::Config->add_resource($self); +} + +sub axes { + return 'filename'; +} + +sub axis { + my ($self,$axis_name)=@_; + if ($axis_name eq 'filename') { + return @{$sources_of{ident($self)}}; + } + else { + return; + } +} + +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)}} ) { + return _read_file($axis_value); + } + } + else { + return; + } +} + +sub properties { + return (); +} + +sub collections { + return (); +} + +sub _read_file :PRIVATE { + my ($filename)=@_; + + local $/; + open my $fh,'<:raw',$filename or die "Can't open $filename: $!\n"; + return scalar <$fh>; +} + +} + +1; diff --git a/t/01-config.t b/t/01-config.t new file mode 100644 index 0000000..f14f6c9 --- /dev/null +++ b/t/01-config.t @@ -0,0 +1,43 @@ +#!/usr/bin/perl +use strict; +use warnings; +use Path::Class; +use Test::More 'no_plan'; + +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::Config::Resource'); +is_deeply( + [$resources[0]->axes()], + ['filename'], + 'un solo asse'); +is_deeply( + [$resources[0]->axis('filename')], + ["$thisdir/src/file1.rest.txt"], + 'filename'); +is($resources[0]->datastream(filename=>"$thisdir/src/file1.rest.txt"), + <<'EOF',''); +Titolo +====== + +testo +EOF +is_deeply( + [$resources[0]->properties()], + [], + 'no properties'); +is_deeply( + [$resources[0]->collections()], + [], + 'no collections'); diff --git a/t/src/file1.rest.txt b/t/src/file1.rest.txt new file mode 100644 index 0000000..3af7f03 --- /dev/null +++ b/t/src/file1.rest.txt @@ -0,0 +1,4 @@ +Titolo +====== + +testo |