NAME
    CGI::Application::Plugin::Mason - HTML::Mason plugin for
    CGI::Application

VERSION
    1.00

SYNOPSIS
      package YourApp;

      use strict;
      use base qw(CGI::Application);
      use CGI::Application::Plugin::Stash; # require!
      use CGI::Application::Plugin::Mason;

      # cgiapp_init
      sub cgiapp_init {
        my $self = shift;
        $self->interp_config( comp_root => "/path/to/root", data_dir => "/tmp/mason" );
      }

      # runmode
      sub start {
        my $self = shift;

        # Catalyst like
        $self->stash->{name} = "kurt";
        $self->stash->{age}  = 27;
        # template path
        $self->stash->{template} = "/start.mason";
        return $self->interp_exec;
      }

      # start.mason
      <%args>
      $name
      $age
      </%args>
      <html>
      <head>
      <% # $c is YourApp object %>
      <title><% $c->get_current_runmode %></title>
      </head>

      <body>
      name : <% $name | h %><br>
      age : <% $age | h %>
      </body>
      </html>

DESCRIPTION
    CGI::Application::Plugin::Mason is Plug-in that offers HTML::Mason
    template engine.

METHOD
  interp_config
    Initialize HTML::Mason::Interp method.

    Option:

      comp_root          : HTML::Mason root dir(default: Cwd::getpwd value)
      data_dir           : HTML::Mason cache and object file directory(default: /tmp/mason)
      template_extension : template extension(default: .mason)

    Example:

      sub cgiapp_init {
        my $self = shift;
        $self->interp_config( comp_root => "/path/to/comp_root", data_dir => "/tmp/mason" );

        # When pass other HTML::Mason option
        $self->interp_config(
                            comp_root            => "/path/to/comp_root",
                            default_escape_flags => [ "h" ],
                            autohandler_name     => "autohandler",
                            );
      }

  interp
    HTML::Mason::Interp object wrapper

    Example:

      # HTML::Mason::Interp#set_escape
      $self->interp->set_escape( uc => sub { ${$_[0]} =~ tr/a-z/A-Z/ } );
      # HTML::Mason::Interp#comp_root
      my $comp_root = $self->interp->comp_root;

  interp_exec
    Return HTML::Mason::Interp#exec result.

    The specification of the template file

    Example:

      # file name
      $self->stash->{template} = "/template.mason"
      # file handle
      open my $fh, "/path/to/template.mason" or croak("can not open file");
      $self->stash->{template} = $fh;
      # scalarref
      $self->stash->{template} = \q{<%args>$name</%args> my name is <% $name %>};

    default template name is /package_name/runmode_method_name .
    ${template_extension}

    Example:

      # ex1
      package MyApp;
      sub start {
        my $self = shift;
        do something...
 
        # The file passing used at this time is /MyApp/start.mason
        return $self->interp_exec;
      }

      # ex2
      package My::App;
      sub start {
        my $self = shift;
        do something...
 
        # The file passing used at this time is /My/App/start.mason
        return $self->interp_exec;
      }

    Specification of variable allocated in template

    Example:

      # ex1
      sub start {
        my $self = shift;
        # stash method setting
        $self->stash->{name} = "kurt";
        $self->stash->{age}  = 27;
        return $self->interp_exec;
      }

      # ex2
      sub start {
        my $self = shift;
        # interp_exec param setting
        return $self->interp_exec( name => "kurt", age => 27 );
      }

  interp_pre_exec
    Trigger method before interp_exec. the argument is $temlate, and $arg.

      $template : $self->{template} value
      $args     : $self->{stash} or $self->interp_exec args hashref

    Example:

      sub interp_pre_exec {
        my($self, $template, $args) = @_;
        $args->{newval} = "interp_pre_exec setting value!";
      }

      # or

      $self->add_callback("interp_pre_exec", sub {
        my($self, $template, $args) = @_;
        $args->{newval} = "interp_pre_exec setting value!";
      });  

  interp_post_exec
    Trigger method after interp_exec. the argument is $bodyref.

      $bodyref : content value scalarref

    Example:

      sub interp_post_exec {
        my($self, $bodyref) = @_;
        ${$bodyref} = encode("shiftjis", decode("utf8", ${$bodyref}));
      }

      # or

      $self->add_callback("interp_post_exec", sub {
        my($self, $bodyref) = @_;
        ${$bodyref} = encode("shiftjis", decode("utf8", ${$bodyref}));
      });  

PRIVATE METHOD
  _get_interp_template_path
    Get default template path.

SEE ALSO
    CGI::Application CGI::Application::Plugin::Stash HTML::Mason

AUTHOR
    Akira Horimoto

COPYRIGHT AND LICENSE
    This library is free software. You can redistribute it and/or modify it
    under the same terms as perl itself.

    Copyright (C) 2007 Akira Horimoto

