1
0
Fork 0
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:
Egor Lynko 2012-04-29 19:39:16 +03:00
parent dcd04e7617
commit 7f160b06a2
2 changed files with 31 additions and 3 deletions

View file

@ -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

View file

@ -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