@@ -31,7 +31,9 @@ def setup
31
31
t . daterange :date_range
32
32
t . numrange :num_range
33
33
t . tsrange :ts_range
34
+ t . tsrange :ts_ranges , array : true
34
35
t . tstzrange :tstz_range
36
+ t . tstzrange :tstz_ranges , array : true
35
37
t . int4range :int4_range
36
38
t . int8range :int8_range
37
39
end
@@ -187,6 +189,31 @@ def test_timezone_awareness_tzrange
187
189
end
188
190
end
189
191
192
+ def test_timezone_array_awareness_tzrange
193
+ tz = "Pacific Time (US & Canada)"
194
+
195
+ in_time_zone tz do
196
+ PostgresqlRange . reset_column_information
197
+
198
+ from_time_string = Time . current . to_s
199
+ from_time = Time . zone . parse ( from_time_string )
200
+ to_time_string = ( from_time + 1 . hour ) . to_s
201
+ to_time = Time . zone . parse ( to_time_string )
202
+
203
+ record = PostgresqlRange . new ( tstz_ranges : [ from_time_string ...to_time_string , from_time_string ..to_time_string ] )
204
+ assert_equal [ from_time ...to_time , from_time ..to_time ] , record . tstz_ranges
205
+ assert_equal ActiveSupport ::TimeZone [ tz ] , record . tstz_ranges . first . begin . time_zone
206
+ assert_equal ActiveSupport ::TimeZone [ tz ] , record . tstz_ranges . last . begin . time_zone
207
+
208
+ record . save!
209
+ record . reload
210
+
211
+ assert_equal [ from_time ...to_time , from_time ..to_time ] , record . tstz_ranges
212
+ assert_equal ActiveSupport ::TimeZone [ tz ] , record . tstz_ranges . first . begin . time_zone
213
+ assert_equal ActiveSupport ::TimeZone [ tz ] , record . tstz_ranges . last . begin . time_zone
214
+ end
215
+ end
216
+
190
217
def test_create_tstzrange
191
218
tstzrange = Time . parse ( "2010-01-01 14:30:00 +0100" ) ...Time . parse ( "2011-02-02 14:30:00 CDT" )
192
219
round_trip ( @new_range , :tstz_range , tstzrange )
@@ -257,6 +284,31 @@ def test_timezone_awareness_tsrange
257
284
end
258
285
end
259
286
287
+ def test_timezone_array_awareness_tsrange
288
+ tz = "Pacific Time (US & Canada)"
289
+
290
+ in_time_zone tz do
291
+ PostgresqlRange . reset_column_information
292
+
293
+ from_time_string = Time . current . to_s
294
+ from_time = Time . zone . parse ( from_time_string )
295
+ to_time_string = ( from_time + 1 . hour ) . to_s
296
+ to_time = Time . zone . parse ( to_time_string )
297
+
298
+ record = PostgresqlRange . new ( ts_ranges : [ from_time_string ...to_time_string , from_time_string ..to_time_string ] )
299
+ assert_equal [ from_time ...to_time , from_time ..to_time ] , record . ts_ranges
300
+ assert_equal ActiveSupport ::TimeZone [ tz ] , record . ts_ranges . first . begin . time_zone
301
+ assert_equal ActiveSupport ::TimeZone [ tz ] , record . ts_ranges . last . begin . time_zone
302
+
303
+ record . save!
304
+ record . reload
305
+
306
+ assert_equal [ from_time ...to_time , from_time ..to_time ] , record . ts_ranges
307
+ assert_equal ActiveSupport ::TimeZone [ tz ] , record . ts_ranges . first . begin . time_zone
308
+ assert_equal ActiveSupport ::TimeZone [ tz ] , record . ts_ranges . last . begin . time_zone
309
+ end
310
+ end
311
+
260
312
def test_create_tstzrange_preserve_usec
261
313
tstzrange = Time . parse ( "2010-01-01 14:30:00.670277 +0100" ) ...Time . parse ( "2011-02-02 14:30:00.745125 CDT" )
262
314
round_trip ( @new_range , :tstz_range , tstzrange )
0 commit comments