diff options
author | Daniel Friesel <derf@finalrewind.org> | 2011-02-26 10:43:59 +0100 |
---|---|---|
committer | Daniel Friesel <derf@finalrewind.org> | 2011-02-26 10:43:59 +0100 |
commit | 0c140f0c79d62a426838097cf3fc09da2f3f89a3 (patch) | |
tree | b2d7f3a277292acdfb67285c6ec9e4d9c4686fa3 | |
parent | bd7537b677d46f70a2446fcc00d9834d19a68b6b (diff) |
Slightly improve date handling
-rw-r--r-- | lib/WWW/Efa.pm | 18 | ||||
-rw-r--r-- | t/50-www-efa.t | 4 | ||||
-rw-r--r-- | t/60-bin-efa.t | 2 |
3 files changed, 17 insertions, 7 deletions
diff --git a/lib/WWW/Efa.pm b/lib/WWW/Efa.pm index b98a021..417fd6b 100644 --- a/lib/WWW/Efa.pm +++ b/lib/WWW/Efa.pm @@ -78,14 +78,24 @@ sub post_time { sub post_date { my ($post, $date) = @_; + my ($day, $month, $year) = split(/\./, $date); - if ($date !~ /^ [0-3]? \d \. [01]? \d (?: | \. | \. (?: \d{4} ))? $/x) { + if (not defined $day or not length($day) or $day < 1 or $day > 31) { die WWW::Efa::Error::Setup->new( - 'date', $date, 'Must match DD.MM.[YYYY]' + 'date', $date, 'Invalid day' ); } - @{$post}{'itdDateDay', 'itdDateMonth', 'itdDateYear'} = split(/\./, $date); - $post->{'itdDateYear'} //= (localtime(time))[5] + 1900; + if (not defined $month or not length($month) or $month < 1 or $month > 12) { + die WWW::Efa::Error::Setup->new( + 'date', $date, 'Invalid month' + ); + } + + if (not defined $year or not length($year)) { + $year = (localtime(time))[5] + 1900; + } + + @{$post}{'itdDateDay', 'itdDateMonth', 'itdDateYear'} = ($day, $month, $year); } sub post_exclude { diff --git a/t/50-www-efa.t b/t/50-www-efa.t index c3d1c31..8144026 100644 --- a/t/50-www-efa.t +++ b/t/50-www-efa.t @@ -153,12 +153,12 @@ is_efa_post( is_efa_err( 'date', '42.5.2003', - 'Must match DD.MM.[YYYY]' + 'Invalid day', ); is_efa_err( 'date', '7.', - 'Must match DD.MM.[YYYY]' + 'Invalid month', ); is_efa_post( diff --git a/t/60-bin-efa.t b/t/60-bin-efa.t index 0ae0b1f..4e46766 100644 --- a/t/60-bin-efa.t +++ b/t/60-bin-efa.t @@ -120,7 +120,7 @@ for my $opt (qw/-d --date/) { $cmd->exit_isnt_num(0); $cmd->stdout_is_eq($EMPTY); $cmd->stderr_is_eq( - mk_err('date', '11.23.2010', 'Must match DD.MM.[YYYY]') + mk_err('date', '11.23.2010', 'Invalid month') ); } |