adzap / validates_timeliness

Date and time validation plugin for ActiveModel and Rails. Supports multiple ORMs and allows custom date/time formats.
MIT License
1.59k stars 227 forks source link

Check time_zone_aware_types #198

Open codez opened 3 years ago

codez commented 3 years ago

When testing if a certain attribute is time zone aware in the validator, also check the value of ActiveRecord::Base.time_zone_aware_types.

We have ActiveRecord::Base.time_zone_aware_types = [:datetime], hence :time types are not time zone aware. When validating times, they are still converted to CET, giving wrong validation errors.

This problem arised with the upgrade to 5.0, because skip_time_zone_conversion_for_attributes is empty in our case, which leads to the attribute being interpreted as time zone aware wrongly. In version 4.1, timeliness_attribute_timezone_aware? returned false by default.

adzap commented 3 years ago

What version of Rails/ActiveRecord are you using?

codez commented 3 years ago

6.1.3.2

camilova commented 3 years ago

Hi, I have this same problem because we have disabled time zone award system-wide with the config option config.active_record.time_zone_aware_attributes = false and because the method time_zone_aware? in validator.rb here does not check if this config flag is false and then return true, making the parsing wrong.

I wrote a patch PR for this #202