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