Provided by: libpoet-perl_0.16-3_all bug

NAME

       Poet::Manual::Subclassing - Customizing Poet with subclasses

DESCRIPTION

       You can subclass the following Poet classes for your application:

           Poet::Cache
           Poet::Conf
           Poet::Log
           Poet::Mason
           Poet::Import
           Poet::Plack::Request
           Poet::Plack::Response

       and arrange things so that Poet always uses your subclass instead of its default class.

       Place Poet subclasses under "lib/MyApp/Class.pm" in your environment, where "MyApp" is
       your app name and "Class" is the class you are subclassing minus the "Poet" prefix. A few
       of these subclasses are generated for you by "poet new".

       For example, to subclass "Poet::Cache":

           package MyApp::Cache;
           use Poet::Moose;
           extends 'Poet::Cache';

           # put your modifications here

           1;

       (Note: Poet::Moose is Moose plus a few Poet standards. You could also use plain "Moose"
       here.)

       Poet will automatically detect, load and use any such subclasses. Internally it uses the
       app_class environment method whenever it needs a classname, e.g.

           # Do something with MyApp::Cache or Poet::Cache
           $poet->app_class('Cache')->...

   Subclassing Mason
       As long as you have even a bare-bones "Poet::Mason" subclass, e.g.

           package MyApp::Mason;
           use Poet::Moose;
           extends 'Poet::Mason';

           1;

       then your Mason subclasses will be autodetected as well, e.g.

           package MyApp::Mason::Interp;
           use Moose;
           extends 'Mason::Interp';
           # put your modifications here
           1;

       "poet new" will create the bare-bones subclass for you; it is otherwise harmless.

       See Mason::Manual::Subclasses for more information.

EXAMPLES

   Use INI instead of YAML for config files
           package MyApp::Conf;
           use Config::INI;
           use Moose;
           extends 'Poet::Conf';

           override 'read_conf_file' => sub {
               my ($self, $file) = @_;
               return Config::INI::Reader->read_file($file);
           };

   Perform tasks before and after each Mason request
           package MyApp::Mason::Request;
           use Moose;
           extends 'Mason::Request';

           override 'run' => sub {
               my $self = shift;

               # Perform tasks before request
               my $result = super();
               # Perform tasks after request

               return $result;
           };

   Add Perl code to the top of every compiled component
           package MyApp::Mason::Compilation;
           use Moose;
           extends 'Mason::Compilation';

           override 'output_class_header' => sub {
                return join("\n", super(), 'use Foo;', 'use Bar qw(baz);');
           };

   Use Log::Dispatch instead of Log4perl for logging
           package MyApp::Log;
           use Log::Any::Adapter;
           use Log::Dispatch;
           use Moose;
           extends 'Poet::Log';

           override 'initialize_logging' => sub {
               my $log = Log::Dispatch->new( ... );
               Log::Any::Adapter->set('Dispatch', dispatcher => $log);
           };

   Add your own $dbh quick var
           package MyApp::Import
           use DBI;
           use Poet::Moose;
           extends 'Poet::Import';

           method provide_dbh ($caller, $poet) {
               $dbh = DBI->connect(...);
           }

SEE ALSO

       Poet

AUTHOR

       Jonathan Swartz <swartz@pobox.com>

COPYRIGHT AND LICENSE

       This software is copyright (c) 2012 by Jonathan Swartz.

       This is free software; you can redistribute it and/or modify it under the same terms as
       the Perl 5 programming language system itself.