diff options
author | Jesse Luehrs <doy@tozt.net> | 2013-07-17 13:53:49 -0400 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2013-07-17 14:07:06 -0400 |
commit | 042e017575b3fa696f9bd63b7171088c842407c4 (patch) | |
tree | 14b3b337a1fe5e7d2ed0260a963978ca859bcd38 /lib/Spreadsheet/Template/Generator.pm | |
parent | b8659ef749df53d8cb291fdcb09828d1d6de792b (diff) | |
download | spreadsheet-template-042e017575b3fa696f9bd63b7171088c842407c4.tar.gz spreadsheet-template-042e017575b3fa696f9bd63b7171088c842407c4.zip |
stop guessing file type, and refactor a bit
Diffstat (limited to 'lib/Spreadsheet/Template/Generator.pm')
-rw-r--r-- | lib/Spreadsheet/Template/Generator.pm | 36 |
1 files changed, 21 insertions, 15 deletions
diff --git a/lib/Spreadsheet/Template/Generator.pm b/lib/Spreadsheet/Template/Generator.pm index 526964c..c751e99 100644 --- a/lib/Spreadsheet/Template/Generator.pm +++ b/lib/Spreadsheet/Template/Generator.pm @@ -5,33 +5,39 @@ use Moose; use Class::Load 'load_class'; use JSON; +has parser_class => ( + is => 'ro', + isa => 'Str', + default => 'Spreadsheet::Template::Generator::Parser::XLSX', +); + has parser_options => ( is => 'ro', isa => 'HashRef', default => sub { {} }, ); +has parser => ( + is => 'ro', + does => 'Spreadsheet::Template::Generator::Parser', + lazy => 1, + default => sub { + my $self = shift; + my $class = $self->parser_class; + load_class($class); + return $class->new( + %{ $self->parser_options } + ); + }, +); + sub generate { my $self = shift; my ($filename) = @_; - (my $ext = $filename) =~ s/.*\.//; - my $class = $self->parser_classes->{$ext}; - load_class($class); - my $parser = $class->new( - filename => $filename, - %{ $self->parser_options } - ); - my $data = $parser->parse; + my $data = $self->parser->parse($filename); return JSON->new->pretty->canonical->encode($data); } -sub parser_classes { - +{ - 'xls' => 'Spreadsheet::Template::Generator::Parser::XLS', - 'xlsx' => 'Spreadsheet::Template::Generator::Parser::XLSX', - } -} - __PACKAGE__->meta->make_immutable; no Moose; |