fixed some bad rescue behaviour in parse method

This commit is contained in:
Adam Meehan 2009-09-05 19:47:49 +10:00
parent 2028d68b17
commit 4cc20ae620

View File

@ -7,28 +7,29 @@ module ValidatesTimeliness
return nil if raw_value.blank?
return raw_value if raw_value.acts_like?(:time) || raw_value.is_a?(Date)
options.reverse_merge!(:strict => true)
time_array = ValidatesTimeliness::Formats.parse(raw_value, type, options)
raise if time_array.nil?
time_array = ValidatesTimeliness::Formats.parse(raw_value, type, options.reverse_merge(:strict => true))
return nil if time_array.nil?
# Rails dummy time date part is defined as 2000-01-01
time_array[0..2] = 2000, 1, 1 if type == :time
# Date.new enforces days per month, unlike Time
date = Date.new(*time_array[0..2]) unless type == :time
if type == :time
# Rails dummy time date part is defined as 2000-01-01
time_array[0..2] = 2000, 1, 1
else
# Enforce date part validity which Time class does not
return nil unless Date.valid_civil?(*time_array[0..2])
end
return date if type == :date
make_time(time_array[0..7])
rescue
nil
if type == :date
Date.new(*time_array[0..2])
else
make_time(time_array[0..7])
end
end
def make_time(time_array)
if Time.respond_to?(:zone) && ValidatesTimeliness.use_time_zones
Time.zone.local(*time_array)
else
# Older AR way of handling times with datetime fallback
begin
time_zone = ValidatesTimeliness.default_timezone
Time.send(time_zone, *time_array)
@ -38,6 +39,8 @@ module ValidatesTimeliness
DateTime.civil(*(time_array << zone_offset))
end
end
rescue ArgumentError
nil
end
end