summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2013-07-02 17:20:55 -0400
committerJesse Luehrs <doy@tozt.net>2013-07-02 17:20:55 -0400
commit4d5822eb83c5023351d688264443acd69a4a7324 (patch)
tree1b09ab59a2350e6926b739595dd1f9c9a7a023e0
parent209e2366a3f821d7b9d9a061f7dcc2c9e2d37442 (diff)
downloadspreadsheet-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.pm65
-rw-r--r--lib/Spreadsheet/Template/Processor/Xslate.pm3
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'],
);
},
);