Changeset 24482

Show
Ignore:
Timestamp:
11/20/08 18:27:46 (5 years ago)
Author:
daisuke
Message:

parameter check

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • lang/perl/DateTime-Lite/trunk/lib/DateTime/Lite.pm

    r24480 r24482  
    110110    # give default values, first... 
    111111    { 
    112         my %defaults = ( 
    113             day => 1, 
    114             month => 1, 
    115             year => 1, 
    116             hour => 0, 
    117             minute => 0, 
    118             second => 0, 
    119             nanosecond => 0 
     112        my %spec = ( 
     113            day => { default => 1, range => [1, 31] }, 
     114            month => { default => 1, range => [1, 12] }, 
     115            year => {default => 1}, 
     116            hour => {default => 0, range => [0, 23]}, 
     117            minute => {default => 0, range => [0, 59]}, 
     118            second => {default => 0, range => [0, 61]}, 
     119            nanosecond => {default => 0, range => [0,undef]} 
    120120        ); 
    121         while (my ($key, $value) = each %defaults) { 
    122             $p{$key} = $value unless defined $p{$key}; 
     121 
     122        while (my ($key, $spec) = each %spec) { 
     123            my $default = $spec->{default}; 
     124            $p{$key} = $default unless defined $p{$key}; 
     125 
     126            if (my $range = $spec->{range}) { 
     127                my $v = $p{$key}; 
     128                if ( (defined $range->[0] && $v < $range->[0]) || 
     129                     (defined $range->[1] && $v > $range->[1]) ) { 
     130                    Carp::croak(qq|The '$key' parameter ("$p{$key}") to DateTime::Lite::new did not pass the range test|); # hmm, almost 
     131                } 
     132            } 
    123133        } 
    124134    } 
     
    347357sub last_day_of_month { 
    348358    my ($class, %p) = @_; 
     359    if ($p{month} > 12 || $p{month} < 1) { 
     360        Carp::croak(qq|The 'month' parameter ("$p{month}") to DateTime::Lite::last_day_of_month did not pass the 'is between 1 and 12' callback|); 
     361    } 
     362 
    349363    return $class->new(%p, day => DateTime::Lite::Util::month_length($p{year}, $p{month})); 
    350364} 
     
    630644{ 
    631645    my ($self, %p) = @_; 
    632 #    my %p = validate( @_, $SetValidate ); 
     646 
    633647 
    634648    my $new_dt = $self->_new_from_self(%p);