diff options
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; |