Skip to content

Commit 6100526

Browse files
Add validation for ActiveRecord.default_timezone
1 parent 3272335 commit 6100526

File tree

2 files changed

+21
-4
lines changed

2 files changed

+21
-4
lines changed

activerecord/lib/active_record.rb

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -185,12 +185,19 @@ module Tasks
185185
singleton_class.attr_accessor :legacy_connection_handling
186186
self.legacy_connection_handling = true
187187

188-
##
189-
# :singleton-method:
190188
# Determines whether to use Time.utc (using :utc) or Time.local (using :local) when pulling
191189
# dates and times from the database. This is set to :utc by default.
192-
singleton_class.attr_accessor :default_timezone
193-
self.default_timezone = :utc
190+
def self.default_timezone=(default_timezone)
191+
unless %i[local utc].include?(default_timezone)
192+
raise ArgumentError, 'default_timezone must be either :utc (default) or :local'
193+
end
194+
195+
@default_timezone = default_timezone
196+
end
197+
198+
def self.default_timezone
199+
@default_timezone ||= :utc
200+
end
194201

195202
singleton_class.attr_accessor :writing_role
196203
self.writing_role = :writing

activerecord/test/cases/date_time_test.rb

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,16 @@
77
class DateTimeTest < ActiveRecord::TestCase
88
include InTimeZone
99

10+
def test_default_timezone_validation
11+
assert_raises ArgumentError do
12+
ActiveRecord.default_timezone = 'UTC'
13+
end
14+
15+
# These values should not raise errors
16+
ActiveRecord.default_timezone = :local
17+
ActiveRecord.default_timezone = :utc
18+
end
19+
1020
def test_saves_both_date_and_time
1121
with_env_tz "America/New_York" do
1222
with_timezone_config default: :utc do

0 commit comments

Comments
 (0)