diff --git a/lib/validates_timeliness/conversion.rb b/lib/validates_timeliness/conversion.rb index cf75c49..4e77a06 100644 --- a/lib/validates_timeliness/conversion.rb +++ b/lib/validates_timeliness/conversion.rb @@ -10,6 +10,8 @@ module ValidatesTimeliness when :datetime value.to_time.in_time_zone end + rescue + nil end def dummy_time(value) diff --git a/lib/validates_timeliness/validator.rb b/lib/validates_timeliness/validator.rb index 31a073b..099ffaf 100644 --- a/lib/validates_timeliness/validator.rb +++ b/lib/validates_timeliness/validator.rb @@ -35,10 +35,10 @@ module ValidatesTimeliness raw_value = attribute_raw_value(record, attr_name) || value return if (@allow_nil && raw_value.nil?) || (@allow_blank && raw_value.blank?) - return record.errors.add(attr_name, :"invalid_#{@type}") if value.blank? - value = type_cast(value) + return record.errors.add(attr_name, :"invalid_#{@type}") if value.blank? + @check_restrictions.each do |restriction| begin restriction_value = type_cast(evaluate_option_value(options[restriction], record)) diff --git a/spec/validates_timeliness/validator_spec.rb b/spec/validates_timeliness/validator_spec.rb index 26d5fef..05676a7 100644 --- a/spec/validates_timeliness/validator_spec.rb +++ b/spec/validates_timeliness/validator_spec.rb @@ -26,6 +26,20 @@ describe ValidatesTimeliness::Validator do end end + it 'should not be valid for value which not valid date or time value' do + Person.validates_date :birth_date + invalid!(:birth_date, "Not a date", 'is not a valid date') + end + + it 'should not be valid attribute is type cast to nil but raw value is non-nil invalid value' do + Person.validates_date :birth_date, :allow_nil => true + record = Person.new + record.stub!(:birth_date).and_return(nil) + record.stub!(:birth_date_before_type_cast).and_return("Not a date") + record.should_not be_valid + record.errors[:birth_date].first.should == 'is not a valid date' + end + describe ":allow_nil option" do it 'should not allow nil by default' do Person.validates_date :birth_date