From 4fa8dfac721a20346594459298fd94fcac9db0bc Mon Sep 17 00:00:00 2001 From: Adam Meehan Date: Fri, 17 Sep 2010 14:36:21 +1000 Subject: [PATCH] don't allow 0 or > 12 for meridian am hour --- lib/validates_timeliness/parser.rb | 3 +++ spec/validates_timeliness/parser_spec.rb | 7 +++++++ 2 files changed, 10 insertions(+) diff --git a/lib/validates_timeliness/parser.rb b/lib/validates_timeliness/parser.rb index 283bbb5..ce3de68 100644 --- a/lib/validates_timeliness/parser.rb +++ b/lib/validates_timeliness/parser.rb @@ -243,6 +243,8 @@ module ValidatesTimeliness values[0..2] = ValidatesTimeliness.dummy_date_for_time_type if type == :time return values end + rescue + nil end # Delete formats of specified type. Error raised if format not found. @@ -289,6 +291,7 @@ module ValidatesTimeliness hour = hour.to_i return hour if meridian.nil? if meridian.delete('.').downcase == 'am' + raise if hour == 0 || hour > 12 hour == 12 ? 0 : hour else hour == 12 ? hour : hour + 12 diff --git a/spec/validates_timeliness/parser_spec.rb b/spec/validates_timeliness/parser_spec.rb index df5887b..9902648 100644 --- a/spec/validates_timeliness/parser_spec.rb +++ b/spec/validates_timeliness/parser_spec.rb @@ -102,6 +102,13 @@ describe ValidatesTimeliness::Parser do time_array.should == [2000,1,1,12,13,14,0] end + it "should return nil if time hour is out of range for AM meridian" do + time_array = formats._parse('13:14 am', :time, :strict => true) + time_array.should == nil + time_array = formats._parse('00:14 am', :time, :strict => true) + time_array.should == nil + end + it "should return date array from time string" do time_array = formats._parse('2000-02-01', :date, :strict => true) time_array.should == [2000,2,1,0,0,0,0]