use base 'Catalyst::Base';
use UNIVERSAL::require;
use Catalyst::Log;
-use Catalyst::Helper;
use Text::ASCIITable;
+our $CATALYST_SCRIPT_GEN = 2;
__PACKAGE__->mk_classdata($_) for qw/dispatcher engine log/;
-our $VERSION = '5.00';
+our $VERSION = '5.03';
our @ISA;
=head1 NAME
. "Please update your scripts by regenerating the "
. "application and copying over the new scripts." )
if ( $ENV{CATALYST_SCRIPT_GEN}
- && (
- $ENV{CATALYST_SCRIPT_GEN} < $Catalyst::Helper::CATALYST_SCRIPT_GEN )
- );
+ && ( $ENV{CATALYST_SCRIPT_GEN} < $CATALYST_SCRIPT_GEN ) );
# Process options
my @plugins;
$caller->log->debug( 'Loaded plugins', $t->draw )
if ( @plugins && $caller->debug );
- # Engine
- $engine = "Catalyst::Engine::$ENV{CATALYST_ENGINE}"
- if $ENV{CATALYST_ENGINE};
-
- $engine->require;
- die qq/Couldn't load engine "$engine", "$@"/ if $@;
- {
- no strict 'refs';
- push @{"$caller\::ISA"}, $engine;
- }
- $caller->engine($engine);
- $caller->log->debug(qq/Loaded engine "$engine"/) if $caller->debug;
-
# Dispatcher
$dispatcher = "Catalyst::Dispatcher::$ENV{CATALYST_DISPATCHER}"
if $ENV{CATALYST_DISPATCHER};
$caller->dispatcher($dispatcher);
$caller->log->debug(qq/Loaded dispatcher "$dispatcher"/) if $caller->debug;
+ # Engine
+ $engine = "Catalyst::Engine::$ENV{CATALYST_ENGINE}"
+ if $ENV{CATALYST_ENGINE};
+
+ $engine->require;
+ die qq/Couldn't load engine "$engine", "$@"/ if $@;
+ {
+ no strict 'refs';
+ push @{"$caller\::ISA"}, $engine;
+ }
+ $caller->engine($engine);
+ $caller->log->debug(qq/Loaded engine "$engine"/) if $caller->debug;
}
=item $c->engine
Your log class should implement the methods described in the C<Catalyst::Log>
man page.
+=item $c->plugin( $name, $class, @args )
+
+Instant plugins for Catalyst.
+Classdata accessor/mutator will be created, class loaded and instantiated.
+
+ MyApp->plugin( 'prototype', 'HTML::Prototype' );
+
+ $c->prototype->define_javascript_functions;
+
+=cut
+
+sub plugin {
+ my ( $class, $name, $plugin, @args ) = @_;
+ $plugin->require;
+ my $error = $UNIVERSAL::require::ERROR;
+ die qq/Couldn't load instant plugin "$plugin", "$error"/ if $error;
+ eval { $plugin->import };
+ $class->mk_classdata($name);
+ my $obj;
+ eval { $obj = $plugin->new(@args) };
+ die qq/Couldn't instantiate instant plugin "$plugin", "$@"/ if $@;
+ $class->$name($obj);
+ $class->log->debug(qq/Initialized instant plugin "$plugin" as "$name"/)
+ if $class->debug;
+}
=back
=head1 LIMITATIONS
-FCGI and mod_perl2 support are considered experimental and may contain bugs.
-
-You may encounter problems accessing the built in test server on public ip
-addresses on the internet, thats because of a bug in HTTP::Daemon.
+mod_perl2 support are considered experimental and may contain bugs.
=head1 SUPPORT
=head1 THANK YOU
-Andy Grundman, Andrew Ford, Andrew Ruthven, Christian Hansen,
+Andy Grundman, Andrew Ford, Andrew Ruthven, Autrijus Tang, Christian Hansen,
Christopher Hicks, Dan Sully, Danijel Milicevic, David Naughton,
Gary Ashton Jones, Jesse Sheidlower, Johan Lindstrom, Marcus Ramberg,
Tatsuhiko Miyagawa and all the others who've helped.