summaryrefslogtreecommitdiffstats
path: root/lib/Spreadsheet/Template/Generator.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Spreadsheet/Template/Generator.pm')
-rw-r--r--lib/Spreadsheet/Template/Generator.pm36
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;