Add validation for ActiveRecord.default_timezone

This commit is contained in:
Leonid Shevtsov 2021-10-14 19:32:22 +03:00
parent 3272335f8f
commit 6100526e94
2 changed files with 21 additions and 4 deletions

View File

@ -185,12 +185,19 @@ module ActiveRecord
singleton_class.attr_accessor :legacy_connection_handling
self.legacy_connection_handling = true
##
# :singleton-method:
# Determines whether to use Time.utc (using :utc) or Time.local (using :local) when pulling
# dates and times from the database. This is set to :utc by default.
singleton_class.attr_accessor :default_timezone
self.default_timezone = :utc
def self.default_timezone=(default_timezone)
unless %i[local utc].include?(default_timezone)
raise ArgumentError, 'default_timezone must be either :utc (default) or :local'
end
@default_timezone = default_timezone
end
def self.default_timezone
@default_timezone ||= :utc
end
singleton_class.attr_accessor :writing_role
self.writing_role = :writing

View File

@ -7,6 +7,16 @@ require "models/task"
class DateTimeTest < ActiveRecord::TestCase
include InTimeZone
def test_default_timezone_validation
assert_raises ArgumentError do
ActiveRecord.default_timezone = 'UTC'
end
# These values should not raise errors
ActiveRecord.default_timezone = :local
ActiveRecord.default_timezone = :utc
end
def test_saves_both_date_and_time
with_env_tz "America/New_York" do
with_timezone_config default: :utc do