HTML::FormFu::Constraint::File::Size - File Size Constraint


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

Index


Code Index:

NAME

Top

HTML::FormFu::Constraint::File::Size - File Size Constraint

DESCRIPTION

Top

Ensure that an uploaded file meets minimum or maximum size constraints.

METHODS

Top

minimum

min

Optional.

The minimum file size in bytes.

min is an alias for minimum.

maximum

max

Optional.

The maximum file size in bytes.

max is an alias for maximum.

minimum_kilobyte

min_kilobyte

Shortcut for $constraint->minimum( $value * 1024 ).

min_kilobyte is an alias for minimum_kilobyte.

maximum_kilobyte

max_kilobyte

Shortcut for $constraint->maximum( $value * 1024 ).

max_kilobyte is an alias for maximum_kilobyte.

minimum_megabyte

min_megabyte

Shortcut for $constraint->minimum( $value * 1_048_576 ).

min_megabyte is an alias for minimum_megabyte.

maximum_megabyte

max_megabyte

Shortcut for $constraint->maximum( $value * 1_048_576 ).

max_megabyte is an alias for maximum_megabyte.

SEE ALSO

Top

Is a sub-class of, and inherits methods from HTML::FormFu::Constraint

HTML::FormFu

AUTHOR

Top

Carl Franks, cfranks@cpan.org

LICENSE

Top

This library is free software, you can redistribute it and/or modify it under the same terms as Perl itself.


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

package HTML::FormFu::Constraint::File::Size;
use Moose;
use MooseX::Aliases;

extends 'HTML::FormFu::Constraint';

use Carp qw( croak );
use Scalar::Util qw( blessed );

has minimum => (
    is      => 'rw',
    alias   => 'min',
    traits  => ['Chained'],
);

has maximum => (
    is      => 'rw',
    alias   => 'max',
    traits  => ['Chained'],
);

*min_kilobyte = \&minimum_kilobyte;
*max_kilobyte = \&maximum_kilobyte;
*min_megabyte = \&minimum_megabyte;
*max_megabyte = \&maximum_megabyte;

sub constrain_value {
    my ( $self, $value ) = @_;

    return 1 if !defined $value || $value eq '';

    return if !blessed($value) || !$value->isa('HTML::FormFu::Upload');

    my $min = $self->minimum;
    my $max = $self->maximum;

    my $size = $value->size || 0;

    if ( defined $min ) {
        return 0 if $size < $min;
    }

    if ( defined $max ) {
        return 0 if $size > $max;
    }

    return 1;
}

sub _localize_args {
    my ($self) = @_;

    return $self->min, $self->max;
}

sub minimum_kilobyte {
    my ( $self, $kb ) = @_;

    croak "minimum_kilobyte() cannot be used as a getter"
        if @_ != 2;

    return $self->minimum( $kb * 1024 );
}

sub minimum_megabyte {
    my ( $self, $kb ) = @_;

    croak "minimum_megabyte() cannot be used as a getter"
        if @_ != 2;

    return $self->minimum( $kb * 1_048_576 );
}

sub maximum_kilobyte {
    my ( $self, $kb ) = @_;

    croak "maximum_kilobyte() cannot be used as a getter"
        if @_ != 2;

    return $self->maximum( $kb * 1024 );
}

sub maximum_megabyte {
    my ( $self, $kb ) = @_;

    croak "maximum_megabyte() cannot be used as a getter"
        if @_ != 2;

    return $self->maximum( $kb * 1_048_576 );
}

__PACKAGE__->meta->make_immutable;

1;

__END__