Fixes vom portieren
[kivitendo-erp.git] / SL / Template / Plugin / JSON.pm
1 package SL::Template::Plugin::JSON;
2
3 use JSON ();
4 use Carp qw(croak);
5 use base qw(Template::Plugin);
6
7 our $VERSION = "0.06";
8
9 sub new {
10   my ($class, $context, $args) = @_;
11
12   my $self = bless {context => $context, json_args => $args }, $class;
13
14   $context->define_vmethod($_, json => sub { $self->json(@_) }) for qw(hash list scalar);
15
16   return $self;
17 }
18
19 sub json_converter {
20   my ($self, %params) = @_;
21
22   if (!$self->{json}) {
23     $self->{json} = JSON->new->allow_nonref(1);
24
25     my $args = $self->{json_args};
26
27     for my $method (keys %$args) {
28       if ( $self->{json}->can($method) ) {
29         $self->{json}->$method( $args->{$method} );
30       }
31     }
32   }
33
34   return $self->{json};
35 }
36
37 sub json {
38   my ($self, $value) = @_;
39
40   $self->json_converter->encode($value);
41 }
42
43 sub json_decode {
44   my ( $self, $value ) = @_;
45
46   $self->json_converter->decode($value);
47 }
48
49 1;
50
51 __END__