mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Prevent creating valid time-like objects from blank string from db
Issue #6045
This commit is contained in:
parent
dcd04e7617
commit
7f160b06a2
2 changed files with 31 additions and 3 deletions
|
@ -158,7 +158,7 @@ module ActiveRecord
|
||||||
|
|
||||||
def value_to_date(value)
|
def value_to_date(value)
|
||||||
if value.is_a?(String)
|
if value.is_a?(String)
|
||||||
return nil if value.empty?
|
return nil if value.blank?
|
||||||
fast_string_to_date(value) || fallback_string_to_date(value)
|
fast_string_to_date(value) || fallback_string_to_date(value)
|
||||||
elsif value.respond_to?(:to_date)
|
elsif value.respond_to?(:to_date)
|
||||||
value.to_date
|
value.to_date
|
||||||
|
@ -169,14 +169,14 @@ module ActiveRecord
|
||||||
|
|
||||||
def string_to_time(string)
|
def string_to_time(string)
|
||||||
return string unless string.is_a?(String)
|
return string unless string.is_a?(String)
|
||||||
return nil if string.empty?
|
return nil if string.blank?
|
||||||
|
|
||||||
fast_string_to_time(string) || fallback_string_to_time(string)
|
fast_string_to_time(string) || fallback_string_to_time(string)
|
||||||
end
|
end
|
||||||
|
|
||||||
def string_to_dummy_time(string)
|
def string_to_dummy_time(string)
|
||||||
return string unless string.is_a?(String)
|
return string unless string.is_a?(String)
|
||||||
return nil if string.empty?
|
return nil if string.blank?
|
||||||
|
|
||||||
string_to_time "2000-01-01 #{string}"
|
string_to_time "2000-01-01 #{string}"
|
||||||
end
|
end
|
||||||
|
|
|
@ -48,6 +48,34 @@ module ActiveRecord
|
||||||
column.type_cast(false)
|
column.type_cast(false)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_type_cast_time
|
||||||
|
column = Column.new("field", nil, "time")
|
||||||
|
assert_equal nil, column.type_cast('')
|
||||||
|
assert_equal nil, column.type_cast(' ')
|
||||||
|
|
||||||
|
time_string = Time.now.utc.strftime("%T")
|
||||||
|
assert_equal time_string, column.type_cast(time_string).strftime("%T")
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_type_cast_datetime_and_timestamp
|
||||||
|
[Column.new("field", nil, "datetime"), Column.new("field", nil, "timestamp")].each do |column|
|
||||||
|
assert_equal nil, column.type_cast('')
|
||||||
|
assert_equal nil, column.type_cast(' ')
|
||||||
|
|
||||||
|
datetime_string = Time.now.utc.strftime("%FT%T")
|
||||||
|
assert_equal datetime_string, column.type_cast(datetime_string).strftime("%FT%T")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_type_cast_date
|
||||||
|
column = Column.new("field", nil, "date")
|
||||||
|
assert_equal nil, column.type_cast('')
|
||||||
|
assert_equal nil, column.type_cast(' ')
|
||||||
|
|
||||||
|
date_string = Time.now.utc.strftime("%F")
|
||||||
|
assert_equal date_string, column.type_cast(date_string).strftime("%F")
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue