summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2013-04-25 14:21:51 -0500
committerJesse Luehrs <doy@tozt.net>2013-04-25 14:21:51 -0500
commit08e2e1e9adc9d1de0a2e5e7b74cc7c8553f3672c (patch)
treef7c928ba61ab1cd02a31877e863bebfd77b99c3b
parentecbc30fea47a08adca0c709174bd804c4434554e (diff)
downloadspreadsheet-template-08e2e1e9adc9d1de0a2e5e7b74cc7c8553f3672c.tar.gz
spreadsheet-template-08e2e1e9adc9d1de0a2e5e7b74cc7c8553f3672c.zip
outline of the renderer part
-rw-r--r--lib/Spreadsheet/Template.pm58
-rw-r--r--lib/Spreadsheet/Template/Processor.pm8
-rw-r--r--lib/Spreadsheet/Template/Processor/Identity.pm15
-rw-r--r--lib/Spreadsheet/Template/Processor/Xslate.pm24
-rw-r--r--lib/Spreadsheet/Template/Writer.pm8
-rw-r--r--lib/Spreadsheet/Template/Writer/Excel.pm50
-rw-r--r--lib/Spreadsheet/Template/Writer/XLS.pm11
-rw-r--r--lib/Spreadsheet/Template/Writer/XLSX.pm11
8 files changed, 185 insertions, 0 deletions
diff --git a/lib/Spreadsheet/Template.pm b/lib/Spreadsheet/Template.pm
index e69de29..8d8dcc4 100644
--- a/lib/Spreadsheet/Template.pm
+++ b/lib/Spreadsheet/Template.pm
@@ -0,0 +1,58 @@
+package Spreadsheet::Template;
+use Moose;
+
+use Class::Load 'load_class';
+use JSON;
+
+has processor_class => (
+ is => 'ro',
+ isa => 'Str',
+ default => 'Spreadsheet::Template::Processor::Xslate',
+);
+
+has writer_class => (
+ is => 'ro',
+ isa => 'Str',
+ default => 'Spreadsheet::Template::Writer::XLSX',
+);
+
+has processor => (
+ is => 'ro',
+ does => 'Spreadsheet::Template::Processor',
+ handles => 'Spreadsheet::Template::Processor',
+ lazy => 1,
+ default => sub {
+ my $self = shift;
+ my $class = $self->processor_class;
+ load_class($class);
+ return $class->new;
+ },
+);
+
+has writer => (
+ is => 'ro',
+ does => 'Spreadsheet::Template::Renderer',
+ handles => 'Spreadsheet::Template::Renderer',
+ lazy => 1,
+ default => sub {
+ my $self = shift;
+ my $class = $self->writer_class;
+ load_class($class);
+ return $class->new;
+ },
+);
+
+sub render {
+ my $self = shift;
+ my ($template, $vars) = @_;
+ my $contents = $self->process($template, $vars);
+ # not decode_json, since we expect that we are already being handed a
+ # character string (decode_json also decodes utf8)
+ my $data = from_json($contents);
+ return $self->write($data);
+}
+
+__PACKAGE__->meta->make_immutable;
+no Moose;
+
+1;
diff --git a/lib/Spreadsheet/Template/Processor.pm b/lib/Spreadsheet/Template/Processor.pm
new file mode 100644
index 0000000..6aab54a
--- /dev/null
+++ b/lib/Spreadsheet/Template/Processor.pm
@@ -0,0 +1,8 @@
+package Spreadsheet::Template::Processor;
+use Moose::Role;
+
+requires 'process';
+
+no Moose::Role;
+
+1;
diff --git a/lib/Spreadsheet/Template/Processor/Identity.pm b/lib/Spreadsheet/Template/Processor/Identity.pm
new file mode 100644
index 0000000..313beb7
--- /dev/null
+++ b/lib/Spreadsheet/Template/Processor/Identity.pm
@@ -0,0 +1,15 @@
+package Spreadsheet::Template::Processor::Identity;
+use Moose;
+
+does 'Spreadsheet::Template::Processor';
+
+sub process {
+ my $self = shift;
+ my ($contents, $vars) = @_
+ return $contents;
+}
+
+__PACKAGE__->meta->make_immutable;
+no Moose;
+
+1;
diff --git a/lib/Spreadsheet/Template/Processor/Xslate.pm b/lib/Spreadsheet/Template/Processor/Xslate.pm
new file mode 100644
index 0000000..6086f0f
--- /dev/null
+++ b/lib/Spreadsheet/Template/Processor/Xslate.pm
@@ -0,0 +1,24 @@
+package Spreadsheet::Template::Processor::Xslate;
+use Moose;
+
+use Text::Xslate;
+
+with 'Spreadsheet::Template::Processor';
+
+has xslate => (
+ is => 'ro',
+ isa => 'Text::Xslate',
+ lazy => 1,
+ default => sub { Text::Xslate->new },
+);
+
+sub process {
+ my $self = shift;
+ my ($contents, $vars) = @_;
+ return $self->xslate->render_string($contents, $vars);
+}
+
+__PACKAGE__->meta->make_immutable;
+no Moose;
+
+1;
diff --git a/lib/Spreadsheet/Template/Writer.pm b/lib/Spreadsheet/Template/Writer.pm
new file mode 100644
index 0000000..f22faac
--- /dev/null
+++ b/lib/Spreadsheet/Template/Writer.pm
@@ -0,0 +1,8 @@
+package Spreadsheet::Template::Writer;
+use Moose::Role;
+
+requires 'write';
+
+no Moose::Role;
+
+1;
diff --git a/lib/Spreadsheet/Template/Writer/Excel.pm b/lib/Spreadsheet/Template/Writer/Excel.pm
new file mode 100644
index 0000000..c2c6028
--- /dev/null
+++ b/lib/Spreadsheet/Template/Writer/Excel.pm
@@ -0,0 +1,50 @@
+package Spreadsheet::Template::Writer::Excel;
+use Moose::Role;
+
+use Class::Load;
+
+with 'Spreadsheet::Template::Writer';
+
+requires 'excel_class';
+
+has excel => (
+ is => 'ro',
+ isa => 'Object',
+ lazy => 1,
+ default => sub {
+ my $self = shift;
+ load_class($self->excel_class);
+ $self->excel_class->new($self->_fh);
+ },
+);
+
+has _fh => (
+ is => 'ro',
+ isa => 'FileHandle',
+ lazy => 1,
+ default => sub {
+ open my $fh, '>', $self->_output
+ or die "Failed to open filehandle: $!";
+ binmode $fh;
+ return $fh;
+ },
+);
+
+has _output => (
+ is => 'ro',
+ isa => 'ScalarRef[Str]',
+ lazy => 1,
+ default => sub { \(my $str) },
+);
+
+sub write {
+ my $self = shift;
+
+ # ...
+
+ return ${ $self->_output };
+}
+
+no Moose::Role;
+
+1;
diff --git a/lib/Spreadsheet/Template/Writer/XLS.pm b/lib/Spreadsheet/Template/Writer/XLS.pm
new file mode 100644
index 0000000..3e40b10
--- /dev/null
+++ b/lib/Spreadsheet/Template/Writer/XLS.pm
@@ -0,0 +1,11 @@
+package Spreadsheet::Template::Writer::XLS;
+use Moose;
+
+with 'Spreadsheet::Template::Writer::Excel';
+
+sub excel_class { 'Spreadsheet::WriteExcel' }
+
+__PACKAGE__->meta->make_immutable;
+no Moose;
+
+1;
diff --git a/lib/Spreadsheet/Template/Writer/XLSX.pm b/lib/Spreadsheet/Template/Writer/XLSX.pm
new file mode 100644
index 0000000..9c4fe10
--- /dev/null
+++ b/lib/Spreadsheet/Template/Writer/XLSX.pm
@@ -0,0 +1,11 @@
+package Spreadsheet::Template::Writer::XLSX;
+use Moose;
+
+with 'Spreadsheet::Template::Writer::Excel';
+
+sub excel_class { 'Excel::Writer::XLSX' }
+
+__PACKAGE__->meta->make_immutable;
+no Moose;
+
+1;