mirror of
https://github.com/ditkrg/validates_timeliness.git
synced 2026-01-24 23:06:42 +00:00
fixed some bad rescue behaviour in parse method
This commit is contained in:
parent
2028d68b17
commit
4cc20ae620
@ -7,28 +7,29 @@ module ValidatesTimeliness
|
|||||||
return nil if raw_value.blank?
|
return nil if raw_value.blank?
|
||||||
return raw_value if raw_value.acts_like?(:time) || raw_value.is_a?(Date)
|
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.reverse_merge(:strict => true))
|
||||||
|
return nil if time_array.nil?
|
||||||
time_array = ValidatesTimeliness::Formats.parse(raw_value, type, options)
|
|
||||||
raise if time_array.nil?
|
|
||||||
|
|
||||||
# Rails dummy time date part is defined as 2000-01-01
|
if type == :time
|
||||||
time_array[0..2] = 2000, 1, 1 if type == :time
|
# Rails dummy time date part is defined as 2000-01-01
|
||||||
|
time_array[0..2] = 2000, 1, 1
|
||||||
# Date.new enforces days per month, unlike Time
|
else
|
||||||
date = Date.new(*time_array[0..2]) unless type == :time
|
# 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
|
if type == :date
|
||||||
|
Date.new(*time_array[0..2])
|
||||||
make_time(time_array[0..7])
|
else
|
||||||
rescue
|
make_time(time_array[0..7])
|
||||||
nil
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def make_time(time_array)
|
def make_time(time_array)
|
||||||
if Time.respond_to?(:zone) && ValidatesTimeliness.use_time_zones
|
if Time.respond_to?(:zone) && ValidatesTimeliness.use_time_zones
|
||||||
Time.zone.local(*time_array)
|
Time.zone.local(*time_array)
|
||||||
else
|
else
|
||||||
|
# Older AR way of handling times with datetime fallback
|
||||||
begin
|
begin
|
||||||
time_zone = ValidatesTimeliness.default_timezone
|
time_zone = ValidatesTimeliness.default_timezone
|
||||||
Time.send(time_zone, *time_array)
|
Time.send(time_zone, *time_array)
|
||||||
@ -38,6 +39,8 @@ module ValidatesTimeliness
|
|||||||
DateTime.civil(*(time_array << zone_offset))
|
DateTime.civil(*(time_array << zone_offset))
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
rescue ArgumentError
|
||||||
|
nil
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user