package OpenInteract2::Exception::Parameter;

# $Id: Parameter.pm,v 1.7 2005/03/17 14:58:02 sjn Exp $

use strict;
use base qw( OpenInteract2::Exception Class::Accessor::Fast );

$OpenInteract2::Exception::Parameter::VERSION = sprintf("%d.%02d", q$Revision: 1.7 $ =~ /(\d+)\.(\d+)/);

my @FIELDS = qw( parameter_fail );
OpenInteract2::Exception::Parameter->mk_accessors( @FIELDS );
sub Fields { return @FIELDS }

sub full_message {
    my ( $self ) = @_;
    my $failures = $self->parameter_fail;
    my @errors = ();
    foreach my $field ( sort keys %{ $failures } ) {
        my $field_msg = ( ref $failures->{ $field } eq 'ARRAY' )
                          ? join( '; ', @{ $failures->{ $field } } )
                          : $failures->{ $field };
        push @errors, "$field: $field_msg";
    }
    return "One or more parameters were not valid: " . join( ' ;; ', @errors );
}

1;

__END__

=head1 NAME

OpenInteract2::Exception::Parameter - Parameter exceptions

=head1 SYNOPSIS

 # Use the shortcut
 
 use OpenInteract2::Exception qw( oi_param_error );
 use SPOPS::Secure qw( :level );
 
 oi_security_error "Validation failure",
                   { field_one => "Not enough characters (found: 15)",
                     field_two => "Too many vowels (found: 5)" };

=head1 DESCRIPTION

Custom exception for parameter violations.

=head1 SEE ALSO

L<OpenInteract2::Exception|OpenInteract2::Exception>

L<Exception::Class|Exception::Class>

=head1 COPYRIGHT

Copyright (c) 2002-2005 Chris Winters. All rights reserved.

=head1 AUTHORS

Chris Winters E<lt>chris@cwinters.comE<gt>