# $Id: /local/CPAN/Mango/lib/Mango/Catalyst/Plugin/Forms.pm 1644 2008-06-02T01:46:53.055259Z claco $
package Mango::Catalyst::Plugin::Forms;
use strict;
use warnings;
our $VERSION = $Mango::VERSION;
BEGIN {
use base qw/Class::Accessor::Grouped/;
use Mango ();
use Scalar::Util qw/blessed/;
__PACKAGE__->mk_group_accessors( 'inherited', qw/_forms/ );
}
__PACKAGE__->_forms( {} ); ## no critic;
sub add_form {
my ( $self, $form, $name ) = @_;
if ( blessed $form && $form->isa('Mango::Form') ) {
$name ||= $form->id || $form->name;
$self->_forms->{$name} = $form;
} else {
Mango::Exception->throw('NOT_A_FORM');
}
return;
}
sub forms {
my ( $self, $name ) = @_;
if ( my $form = $self->_forms->{$name} ) {
$form = $form->clone;
## hack around form action // under Cat::Test/Mech
if ( $form->{'action'} || $form->action =~ /^\/\// ) {
$form->action( $self->request->uri->as_string );
}
$form->params( $self->request );
$form->localizer( sub { $self->localize(@_) } );
return $form;
}
return;
}
1;
__END__
=head1 NAME
Mango::Catalyst::Plugin::Forms - Catalyst plugin for application wide forms
=head1 SYNOPSIS
use Catalyst qw/
-Debug
ConfigLoader
Mango::Catalyst::Plugin::Forms
Static::Simple
/;
=head1 DESCRIPTION
Mango::Catalyst::Plugin::Forms exposes all of the Mango forms loaded into the
current Mango application.
=head1 METHODS
=head2 add_form
=over
=item Arguments: $form, $name
=back
Adds a form by name to the collection of application forms. If not specified,
the name will be taken from the forms name attribute.
=head2 forms
Gets the collection of Mango::Form objects loaded into the current
application.
=head1 SEE ALSO
L<Mango::Catalyst::Controller::Form>, L<Mango::Form>
=head1 AUTHOR
Christopher H. Laco
CPAN ID: CLACO
claco@chrislaco.com
http://today.icantfocus.com/blog/