aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Build.PL15
-rw-r--r--lib/WebCoso.pm8
-rw-r--r--lib/WebCoso/Config.pm58
-rw-r--r--lib/WebCoso/Config/Resource.pm62
-rw-r--r--t/01-config.t43
-rw-r--r--t/src/file1.rest.txt4
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