ignore restriction value errors

This commit is contained in:
Adam Meehan 2010-08-01 23:26:23 +10:00
parent 0720abeb0e
commit 6acf61aa88
3 changed files with 36 additions and 3 deletions

View File

@ -18,6 +18,9 @@ module ValidatesTimeliness
mattr_accessor :dummy_date_for_time_type
@@dummy_date_for_time_type = [ 2000, 1, 1 ]
# Ignore errors when restriction options are evaluated
mattr_accessor :ignore_restriction_errors
@@ignore_restriction_errors = false
end
require 'validates_timeliness/conversion'

View File

@ -39,9 +39,15 @@ module ValidatesTimeliness
value = type_cast(value)
(RESTRICTIONS.keys & options.keys).each do |restriction|
restriction_value = type_cast(evaluate_option_value(options[restriction], record))
unless value.send(RESTRICTIONS[restriction], restriction_value)
return record.errors.add(attr_name, restriction, :restriction => restriction_value)
begin
restriction_value = type_cast(evaluate_option_value(options[restriction], record))
unless value.send(RESTRICTIONS[restriction], restriction_value)
return record.errors.add(attr_name, restriction, :restriction => restriction_value)
end
rescue => e
unless ValidatesTimeliness.ignore_restriction_errors
record.errors[attr_name] = "Error occurred validating #{attr_name} for #{restriction.inspect} restriction:\n#{e.message}"
end
end
end
end

View File

@ -66,4 +66,28 @@ describe ValidatesTimeliness::Validator do
end
end
end
describe "restriction value errors" do
let(:person) { Person.new(:birth_date => Date.today) }
before do
Person.validates_time :birth_date, :is_at => lambda { raise }
end
it "should be added when ignore_restriction_errors is false" do
ValidatesTimeliness.ignore_restriction_errors = false
person.valid?
person.errors[:birth_date].first.should match("Error occurred validating birth_date for :is_at restriction")
end
it "should not be added when ignore_restriction_errors is true" do
ValidatesTimeliness.ignore_restriction_errors = true
person.valid?
person.errors[:birth_date].should be_empty
end
after :all do
ValidatesTimeliness.ignore_restriction_errors = false
end
end
end