HTML::Shakan::Field - base class for field object


HTML-Shakan documentation Contained in the HTML-Shakan distribution.

Index


Code Index:

NAME

Top

HTML::Shakan::Field - base class for field object

DESCRIPTION

Top

This is a base class for filed object.

ATTRIBUTES

Top

id

the 'id' attribute for the html elements.

name

the 'name' attribute for the html elements.

value

the 'value' attribute for the html elements.

filters: ArrayRef[Str]

This is parameter filters in arrayref.

For example, following field removes white space from parameter value in head and end.

	TextField(
		name     => 'f',
		required => 1,
		filters  => [qw'WhiteSpace']
	),

widget

type of widget.

attr

hashref about the miscellaneous attributes.

label

label for this field.

required

is this field's value required?

custom_validation
    TextField(
        name => 'id',
        custom_validation => sub {
            my ($form, $field) = @_;
            if (is_reserved_id($form->param($field->name))) {
                $form->set_error($field->name() => 'reserved');
            }
        }
    )

You can register custom validation callback.

The callback function takes two arguments.

$form

This is a instance of HTML::Shakan. You can take query parameter value by this object.

$field

The field object itself.

constraints

constraints for FormValidator::Lite.

AUTHORS

Top

tokuhirom


HTML-Shakan documentation Contained in the HTML-Shakan distribution.

package HTML::Shakan::Field;
use Any::Moose;
use HTML::Shakan::Utils;

has id => (
    is => 'rw',
    isa => 'Str',
    trigger => sub {
        my ($self, $id) = @_;
        $self->{attr}->{id} = $id;
    },
);

has name => (
    is       => 'ro',
    isa      => 'Str',
    required => 1,
    trigger  => sub {
        my ( $self, $name ) = @_;
        $self->{attr}->{name} = $name;
    },
);

has value => (
    is       => 'rw',
    isa      => 'Str',
    required => 0,
    trigger  => sub {
        my ( $self, $value ) = @_;
        $self->{attr}->{value} = $value;
    },
);

has filters => (
    is => 'rw',
    isa => 'ArrayRef[Str]',
    default => sub { +[] }
);

has widget => (
    is       => 'ro',
    isa      => 'Str',
    required => 1,
);

has attr => (
    is => 'ro',
    isa => 'HashRef',
    lazy => 1,
    default => sub {
        +{}
    },
);

has label => (
    is      => 'ro',
    isa     => 'Str',
    lazy    => 1,
    default => sub { shift->name }
);

has required => (
    is      => 'ro',
    isa     => 'Bool',
    default => 0,
);

has inflator => (
    is  => 'ro',
    isa => 'Object',
);

has custom_validation => (
    is => 'ro',
    isa => 'CodeRef',
);

has constraints => (
    is  => 'ro',
    isa => 'ArrayRef',
    default => sub { +[] },
);

sub add_constraint {
    my ($self, @constraint) = @_;
    push @{$self->{constraints}}, @constraint;
    $self; # method chain
}

has complex_constraints => (
    is => 'ro',
    isa => 'ArrayRef',
    default => sub { +[] },
);

sub add_complex_constraint {
    my ($self, @constraints) = @_;
    push @{$self->{complex_constraints}}, @constraints;
    $self; # method chain
}

sub get_constraints {
    my $self = shift;

    my @rule = @{$self->{constraints}};
    if ($self->required) {
        push @rule, 'NOT_NULL';
    }
    return (
        $self->name => \@rule,
        @{ $self->complex_constraints },
    );
}

no Any::Moose;
__PACKAGE__->meta->make_immutable;
__END__