From 8aa26a7898f0b977318f9f48040ba475e66c95b4 Mon Sep 17 00:00:00 2001 From: Adam Meehan Date: Fri, 17 Sep 2010 13:45:31 +1000 Subject: [PATCH] ignore_usec option added back --- lib/validates_timeliness/conversion.rb | 5 +++++ spec/validates_timeliness/conversion_spec.rb | 11 +++++++++++ spec/validates_timeliness/validator_spec.rb | 11 +++++++++++ 3 files changed, 27 insertions(+) diff --git a/lib/validates_timeliness/conversion.rb b/lib/validates_timeliness/conversion.rb index b4b707c..fabdaed 100644 --- a/lib/validates_timeliness/conversion.rb +++ b/lib/validates_timeliness/conversion.rb @@ -13,6 +13,11 @@ module ValidatesTimeliness when :datetime value.to_time end + if options[:ignore_usec] && value.is_a?(Time) + ValidatesTimeliness::Parser.make_time(Array(value).reverse[4..9]) + else + value + end end def dummy_time(value) diff --git a/spec/validates_timeliness/conversion_spec.rb b/spec/validates_timeliness/conversion_spec.rb index fffc4d6..e12f11b 100644 --- a/spec/validates_timeliness/conversion_spec.rb +++ b/spec/validates_timeliness/conversion_spec.rb @@ -8,6 +8,8 @@ describe ValidatesTimeliness::Conversion do end describe "#type_cast_value" do + let(:options) { Hash.new } + describe "for date type" do it "should return same value for date value" do type_cast_value(Date.new(2010, 1, 1), :date).should == Date.new(2010, 1, 1) @@ -54,6 +56,15 @@ describe ValidatesTimeliness::Conversion do type_cast_value(DateTime.civil_from_format(:utc, 2010, 1, 1, 12, 34, 56), :datetime).should == Time.utc(2010, 1, 1, 12, 34, 56) end end + + describe "ignore_usec option" do + let(:options) { {:ignore_usec => true} } + + it "should ignore usec on time values when evaluated" do + value = Time.utc(2010, 1, 1, 12, 34, 56, 10000) + type_cast_value(value, :datetime).should == Time.utc(2010, 1, 1, 12, 34, 56) + end + end end describe "#dummy_time" do diff --git a/spec/validates_timeliness/validator_spec.rb b/spec/validates_timeliness/validator_spec.rb index 2eb8db6..f9924f0 100644 --- a/spec/validates_timeliness/validator_spec.rb +++ b/spec/validates_timeliness/validator_spec.rb @@ -86,6 +86,17 @@ describe ValidatesTimeliness::Validator do end end + describe ":ignore_usec option" do + it "should not be valid when usec values don't match and option is false" do + Person.validates_datetime :birth_datetime, :on_or_before => Time.utc(2010,1,2,3,4,5), :ignore_usec => false + invalid!(:birth_datetime, Time.utc(2010,1,2,3,4,5,10000)) + end + + it "should be valid when usec values dont't match and option is true" do + Person.validates_datetime :birth_datetime, :on_or_before => Time.utc(2010,1,2,3,4,5), :ignore_usec => true + valid!(:birth_datetime, Time.utc(2010,1,2,3,4,5,10000)) + end + end describe "restriction value errors" do let(:person) { Person.new(:birth_date => Date.today) }