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 /lib/Spreadsheet/Template/Helpers/Xslate.pm | |
parent | 209e2366a3f821d7b9d9a061f7dcc2c9e2d37442 (diff) | |
download | spreadsheet-template-4d5822eb83c5023351d688264443acd69a4a7324.tar.gz spreadsheet-template-4d5822eb83c5023351d688264443acd69a4a7324.zip |
add some xslate macros, to make things a bit cleaner
Diffstat (limited to 'lib/Spreadsheet/Template/Helpers/Xslate.pm')
-rw-r--r-- | lib/Spreadsheet/Template/Helpers/Xslate.pm | 65 |
1 files changed, 65 insertions, 0 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; |