Spark-Form
view release on metacpan or search on metacpan
lib/Spark/Form.pm view on Meta::CPAN
package MyApp::Form::Field::Username;
use base Spark::Form::Field;
sub _validate {
my ($self,$v) = @_;
if (length $v < 6 or length $v > 12) {
$self->error("Usernames must be 6-12 characters long");
} elsif ($v =~ /[^a-zA-Z0-9_-]/) {
$self->error("Usernames may contain only a-z,A-Z,0-9, _ and -");
} else {
$self->error(undef);
}
$self->valid(!!$self->error());
}
=head1 INSTABILITY
Periodically the API may break. I'll try to make sure it's obvious so it doesn't silently malfunction.
By 0.5, we shouldn't have to do this.
=head1 DEPENDENCIES
Moose. I've dropped using Any::Moose. If you need the performance increase, perhaps it's time to start thinking about shifting off CGI.
=head1 METHODS
=head2 import (%options)
Allows you to set some options for the forms class.
=over 4
=item class => String
Optional, gives the basename for searching for form plugins.
Given 'MyApp', it will try to load form plugins from MyApp::Form::Field::*
=item source => String
Optional, names a plugin to try and extract form data from.
If unspecified, you will need to call $form->data(\%data);
=back
=head2 add ($thing,@rest)
If $thing is a string, attempts to instantiate a plugin of that type and add it
to the form. Requires the second argument to be a string name for the field to identify it in the form. Rest will become %kwargs
If it is an ArrayRef, it loops over the contents (Useful for custom fields, will probably result in bugs for string field names).@rest will be passed in each iteration.
If it looks sufficiently like a field (implements Spark::Form::Field),
then it will add it to the list of fields. @rest will just become %kwargs
Uses 'field name' to locate it from the data passed in.
This is a B<streaming interface>, it returns the form itself.
=head2 validate
Validates the form. Sets C<valid> and then also returns the value.
=head2 data
Allows you to pass in a HashRef of data to populate the fields with before validation. Useful if you don't use a plugin to automatically populate the data.
This is a B<streaming interface>, it returns the form itself.
=head2 fields () => Fields
Returns a list of Fields in the form in their current order
=head2 BUILD
Moose constructor. Test::Pod::Coverage made me do it.
Adds C<class> to the search path for field modules.
=head2 get (Str)
Returns the form field of that name
=head2 get_at (Int)
Returns the form field at that index (counting from 0)
=head2 keys () :: Array
Returns the field names
=head2 field_couplet () :: Data::Couplet
Returns the Data::Couplet used to store the fields. Try not to use this too much.
=head2 remove (Array[Str]) :: Spark::Form
Removes the field(s) bearing the given name(s) from the form object. Silently no-ops any that do not exist.
=head2 remove_at (Array[Int]) :: Spark::Form
Removes the field at the given ID(s) from the form object. Silently no-ops any that do not exist.
WARNING: Things will get re-ordered when you do this. If you have a form with
IDs 0..3 and you remove (1, 3), then (0, 2) will remain but they will now be
(0, 1) as L<Data::Couplet> will move them to keep a consistent array.
=head2 clone_all () :: Spark::Form
Returns a new copy of the form with freshly instantiated fields.
=head2 clone_except_names (Array[Str]) :: Spark::Form
Clones, removing the fields with the specified names.
=head2 clone_only_names (Array[Str]) :: Spark::Form
Clones, removing the fields without the specified names.
=head2 clone_except_ids (Array[Int]) :: Spark::Form
Clones, removing the fields with the specified IDs.
=head2 clone_only_ids (Array[Int]) :: Spark::Form
Clones, removing the fields without the specified IDs.
=head2 clone_if (SubRef[(Int, Str, Any) -> Bool]) :: Spark::Form
( run in 0.508 second using v1.01-cache-2.11-cpan-39bf76dae61 )