diff options
author | Jesse Luehrs <doy@tozt.net> | 2013-07-02 17:20:55 -0400 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2013-07-02 17:20:55 -0400 |
commit | 4d5822eb83c5023351d688264443acd69a4a7324 (patch) | |
tree | 1b09ab59a2350e6926b739595dd1f9c9a7a023e0 | |
parent | 209e2366a3f821d7b9d9a061f7dcc2c9e2d37442 (diff) | |
download | spreadsheet-template-4d5822eb83c5023351d688264443acd69a4a7324.tar.gz spreadsheet-template-4d5822eb83c5023351d688264443acd69a4a7324.zip |
add some xslate macros, to make things a bit cleaner
-rw-r--r-- | lib/Spreadsheet/Template/Helpers/Xslate.pm | 65 | ||||
-rw-r--r-- | lib/Spreadsheet/Template/Processor/Xslate.pm | 3 |
2 files changed, 67 insertions, 1 deletions
diff --git a/lib/Spreadsheet/Template/Helpers/Xslate.pm b/lib/Spreadsheet/Template/Helpers/Xslate.pm new file mode 100644 index 0000000..9776a3b --- /dev/null +++ b/lib/Spreadsheet/Template/Helpers/Xslate.pm @@ -0,0 +1,65 @@ +package Spreadsheet::Template::Helpers::Xslate; +use strict; +use warnings; + +use JSON; + +my $JSON = JSON->new; + +use Sub::Exporter 'build_exporter'; + +my $import = build_exporter({ + exports => [ + map { $_ => \&_curry_package } qw(format c true false) + ], + groups => { + default => [qw(format c true false)], + }, +}); + +my %formats; + +sub import { + my $caller = caller; + $formats{$caller} = {}; + goto $import; +} + +sub format { + my ($package, $name, $format) = @_; + $formats{$package}{$name} = $format; + return ''; +} + +sub c { + my ($package, $contents, $format, $type, %args) = @_; + + $type = 'string' unless defined $type; + + return $JSON->encode({ + contents => "$contents", + format => _formats($package, $format), + type => $type, + (defined $args{formula} + ? (formula => $args{formula}) + : ()), + }); +} + +sub true { JSON::true } +sub false { JSON::false } + +sub _formats { + my ($package, $format) = @_; + + return $format if ref($format); + + return $formats{$package}{$format}; +} + +sub _curry_package { + my ($package, $name) = @_; + return sub { $package->$name(@_) }; +} + +1; diff --git a/lib/Spreadsheet/Template/Processor/Xslate.pm b/lib/Spreadsheet/Template/Processor/Xslate.pm index 1ae2454..9c62bb3 100644 --- a/lib/Spreadsheet/Template/Processor/Xslate.pm +++ b/lib/Spreadsheet/Template/Processor/Xslate.pm @@ -19,7 +19,8 @@ has xslate => ( my $self = shift; return Text::Xslate->new( type => 'text', - syntax => $self->syntax + syntax => $self->syntax, + module => ['Spreadsheet::Template::Helpers::Xslate'], ); }, ); |