activesupport 7.2.2.2 → 8.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +368 -152
- data/README.rdoc +1 -1
- data/lib/active_support/backtrace_cleaner.rb +73 -2
- data/lib/active_support/benchmark.rb +21 -0
- data/lib/active_support/benchmarkable.rb +3 -2
- data/lib/active_support/broadcast_logger.rb +61 -74
- data/lib/active_support/cache/file_store.rb +14 -4
- data/lib/active_support/cache/mem_cache_store.rb +27 -29
- data/lib/active_support/cache/memory_store.rb +11 -5
- data/lib/active_support/cache/null_store.rb +2 -2
- data/lib/active_support/cache/redis_cache_store.rb +43 -34
- data/lib/active_support/cache/strategy/local_cache.rb +72 -27
- data/lib/active_support/cache/strategy/local_cache_middleware.rb +7 -7
- data/lib/active_support/cache.rb +88 -20
- data/lib/active_support/callbacks.rb +28 -13
- data/lib/active_support/class_attribute.rb +33 -0
- data/lib/active_support/code_generator.rb +9 -0
- data/lib/active_support/concurrency/load_interlock_aware_monitor.rb +8 -62
- data/lib/active_support/concurrency/share_lock.rb +0 -1
- data/lib/active_support/concurrency/thread_monitor.rb +55 -0
- data/lib/active_support/configurable.rb +34 -0
- data/lib/active_support/configuration_file.rb +15 -6
- data/lib/active_support/continuous_integration.rb +145 -0
- data/lib/active_support/core_ext/array/conversions.rb +3 -3
- data/lib/active_support/core_ext/array.rb +7 -7
- data/lib/active_support/core_ext/benchmark.rb +4 -14
- data/lib/active_support/core_ext/big_decimal.rb +1 -1
- data/lib/active_support/core_ext/class/attribute.rb +26 -20
- data/lib/active_support/core_ext/class.rb +2 -2
- data/lib/active_support/core_ext/date/conversions.rb +2 -0
- data/lib/active_support/core_ext/date.rb +5 -5
- data/lib/active_support/core_ext/date_and_time/compatibility.rb +0 -35
- data/lib/active_support/core_ext/date_time/compatibility.rb +3 -5
- data/lib/active_support/core_ext/date_time/conversions.rb +4 -2
- data/lib/active_support/core_ext/date_time.rb +5 -5
- data/lib/active_support/core_ext/digest.rb +1 -1
- data/lib/active_support/core_ext/enumerable.rb +25 -8
- data/lib/active_support/core_ext/erb/util.rb +5 -5
- data/lib/active_support/core_ext/file.rb +1 -1
- data/lib/active_support/core_ext/hash/deep_merge.rb +1 -0
- data/lib/active_support/core_ext/hash/except.rb +0 -12
- data/lib/active_support/core_ext/hash.rb +8 -8
- data/lib/active_support/core_ext/integer.rb +3 -3
- data/lib/active_support/core_ext/kernel.rb +3 -3
- data/lib/active_support/core_ext/module/attr_internal.rb +3 -4
- data/lib/active_support/core_ext/module/introspection.rb +3 -0
- data/lib/active_support/core_ext/module.rb +11 -11
- data/lib/active_support/core_ext/numeric.rb +3 -3
- data/lib/active_support/core_ext/object/json.rb +24 -11
- data/lib/active_support/core_ext/object/to_query.rb +7 -1
- data/lib/active_support/core_ext/object/try.rb +2 -2
- data/lib/active_support/core_ext/object.rb +13 -13
- data/lib/active_support/core_ext/pathname.rb +2 -2
- data/lib/active_support/core_ext/range/overlap.rb +3 -3
- data/lib/active_support/core_ext/range/sole.rb +17 -0
- data/lib/active_support/core_ext/range.rb +4 -4
- data/lib/active_support/core_ext/securerandom.rb +24 -8
- data/lib/active_support/core_ext/string/filters.rb +3 -3
- data/lib/active_support/core_ext/string/multibyte.rb +12 -3
- data/lib/active_support/core_ext/string/output_safety.rb +19 -12
- data/lib/active_support/core_ext/string.rb +13 -13
- data/lib/active_support/core_ext/symbol.rb +1 -1
- data/lib/active_support/core_ext/thread/backtrace/location.rb +2 -7
- data/lib/active_support/core_ext/time/calculations.rb +7 -2
- data/lib/active_support/core_ext/time/compatibility.rb +2 -19
- data/lib/active_support/core_ext/time/conversions.rb +2 -0
- data/lib/active_support/core_ext/time.rb +5 -5
- data/lib/active_support/core_ext.rb +1 -1
- data/lib/active_support/current_attributes/test_helper.rb +2 -2
- data/lib/active_support/current_attributes.rb +27 -17
- data/lib/active_support/delegation.rb +25 -44
- data/lib/active_support/dependencies/interlock.rb +11 -5
- data/lib/active_support/dependencies.rb +6 -2
- data/lib/active_support/deprecation/reporting.rb +4 -21
- data/lib/active_support/deprecation.rb +1 -1
- data/lib/active_support/duration.rb +14 -10
- data/lib/active_support/editor.rb +70 -0
- data/lib/active_support/encrypted_configuration.rb +20 -2
- data/lib/active_support/error_reporter.rb +81 -4
- data/lib/active_support/event_reporter/test_helper.rb +32 -0
- data/lib/active_support/event_reporter.rb +592 -0
- data/lib/active_support/evented_file_update_checker.rb +5 -2
- data/lib/active_support/execution_context.rb +64 -7
- data/lib/active_support/execution_wrapper.rb +1 -1
- data/lib/active_support/file_update_checker.rb +8 -6
- data/lib/active_support/gem_version.rb +3 -3
- data/lib/active_support/gzip.rb +1 -0
- data/lib/active_support/hash_with_indifferent_access.rb +61 -38
- data/lib/active_support/i18n_railtie.rb +19 -11
- data/lib/active_support/inflector/inflections.rb +32 -15
- data/lib/active_support/inflector/methods.rb +2 -2
- data/lib/active_support/inflector/transliterate.rb +6 -8
- data/lib/active_support/isolated_execution_state.rb +17 -17
- data/lib/active_support/json/decoding.rb +6 -4
- data/lib/active_support/json/encoding.rb +157 -21
- data/lib/active_support/lazy_load_hooks.rb +1 -1
- data/lib/active_support/log_subscriber.rb +2 -6
- data/lib/active_support/logger_thread_safe_level.rb +6 -3
- data/lib/active_support/message_encryptors.rb +54 -2
- data/lib/active_support/message_pack/extensions.rb +6 -1
- data/lib/active_support/message_verifier.rb +9 -0
- data/lib/active_support/message_verifiers.rb +57 -3
- data/lib/active_support/messages/rotation_coordinator.rb +9 -0
- data/lib/active_support/messages/rotator.rb +10 -0
- data/lib/active_support/multibyte/chars.rb +12 -2
- data/lib/active_support/multibyte.rb +4 -0
- data/lib/active_support/notifications/fanout.rb +64 -43
- data/lib/active_support/notifications/instrumenter.rb +1 -1
- data/lib/active_support/number_helper.rb +22 -0
- data/lib/active_support/railtie.rb +32 -9
- data/lib/active_support/structured_event_subscriber.rb +99 -0
- data/lib/active_support/subscriber.rb +0 -5
- data/lib/active_support/syntax_error_proxy.rb +7 -0
- data/lib/active_support/tagged_logging.rb +5 -0
- data/lib/active_support/test_case.rb +67 -6
- data/lib/active_support/testing/assertions.rb +115 -27
- data/lib/active_support/testing/autorun.rb +5 -0
- data/lib/active_support/testing/error_reporter_assertions.rb +18 -1
- data/lib/active_support/testing/event_reporter_assertions.rb +227 -0
- data/lib/active_support/testing/isolation.rb +0 -2
- data/lib/active_support/testing/notification_assertions.rb +92 -0
- data/lib/active_support/testing/parallelization/server.rb +15 -2
- data/lib/active_support/testing/parallelization/worker.rb +8 -4
- data/lib/active_support/testing/parallelization.rb +25 -1
- data/lib/active_support/testing/tests_without_assertions.rb +1 -1
- data/lib/active_support/testing/time_helpers.rb +9 -4
- data/lib/active_support/time_with_zone.rb +36 -23
- data/lib/active_support/values/time_zone.rb +19 -10
- data/lib/active_support/xml_mini.rb +3 -2
- data/lib/active_support.rb +21 -9
- metadata +34 -12
- data/lib/active_support/core_ext/range/each.rb +0 -24
- data/lib/active_support/proxy_object.rb +0 -20
- data/lib/active_support/testing/strict_warnings.rb +0 -43
|
@@ -9,6 +9,14 @@ require "active_support/testing/parallelization/worker"
|
|
|
9
9
|
module ActiveSupport
|
|
10
10
|
module Testing
|
|
11
11
|
class Parallelization # :nodoc:
|
|
12
|
+
@@before_fork_hooks = []
|
|
13
|
+
|
|
14
|
+
def self.before_fork_hook(&blk)
|
|
15
|
+
@@before_fork_hooks << blk
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
cattr_reader :before_fork_hooks
|
|
19
|
+
|
|
12
20
|
@@after_fork_hooks = []
|
|
13
21
|
|
|
14
22
|
def self.after_fork_hook(&blk)
|
|
@@ -32,7 +40,12 @@ module ActiveSupport
|
|
|
32
40
|
@url = DRb.start_service("drbunix:", @queue_server).uri
|
|
33
41
|
end
|
|
34
42
|
|
|
43
|
+
def before_fork
|
|
44
|
+
Parallelization.before_fork_hooks.each(&:call)
|
|
45
|
+
end
|
|
46
|
+
|
|
35
47
|
def start
|
|
48
|
+
before_fork
|
|
36
49
|
@worker_pool = @worker_count.times.map do |worker|
|
|
37
50
|
Worker.new(worker, @url).start
|
|
38
51
|
end
|
|
@@ -47,8 +60,19 @@ module ActiveSupport
|
|
|
47
60
|
end
|
|
48
61
|
|
|
49
62
|
def shutdown
|
|
63
|
+
dead_worker_pids = @worker_pool.filter_map do |pid|
|
|
64
|
+
Process.waitpid(pid, Process::WNOHANG)
|
|
65
|
+
rescue Errno::ECHILD
|
|
66
|
+
pid
|
|
67
|
+
end
|
|
68
|
+
@queue_server.remove_dead_workers(dead_worker_pids)
|
|
69
|
+
|
|
50
70
|
@queue_server.shutdown
|
|
51
|
-
@worker_pool.each
|
|
71
|
+
@worker_pool.each do |pid|
|
|
72
|
+
Process.waitpid(pid)
|
|
73
|
+
rescue Errno::ECHILD
|
|
74
|
+
nil
|
|
75
|
+
end
|
|
52
76
|
end
|
|
53
77
|
end
|
|
54
78
|
end
|
|
@@ -11,7 +11,7 @@ module ActiveSupport
|
|
|
11
11
|
|
|
12
12
|
if assertions.zero? && !skipped? && !error?
|
|
13
13
|
file, line = method(name).source_location
|
|
14
|
-
warn "Test is missing assertions: `#{name}` #{file}:#{line}"
|
|
14
|
+
warn "Test is missing assertions: `#{name}` #{File.expand_path(file)}:#{line}"
|
|
15
15
|
end
|
|
16
16
|
end
|
|
17
17
|
end
|
|
@@ -166,9 +166,10 @@ module ActiveSupport
|
|
|
166
166
|
else
|
|
167
167
|
now = date_or_time
|
|
168
168
|
now = now.to_time unless now.is_a?(Time)
|
|
169
|
-
now = now.change(usec: 0) unless with_usec
|
|
170
169
|
end
|
|
171
170
|
|
|
171
|
+
now = now.change(usec: 0) unless with_usec
|
|
172
|
+
|
|
172
173
|
# +now+ must be in local system timezone, because +Time.at(now)+
|
|
173
174
|
# and +now.to_date+ (see stubs below) will use +now+'s timezone too!
|
|
174
175
|
now = now.getlocal
|
|
@@ -237,12 +238,16 @@ module ActiveSupport
|
|
|
237
238
|
end
|
|
238
239
|
alias_method :unfreeze_time, :travel_back
|
|
239
240
|
|
|
240
|
-
# Calls +travel_to+ with +
|
|
241
|
+
# Calls +travel_to+ with +date_or_time+, which defaults to +Time.now+.
|
|
242
|
+
# Forwards optional <tt>with_usec</tt> argument.
|
|
241
243
|
#
|
|
242
244
|
# Time.current # => Sun, 09 Jul 2017 15:34:49 EST -05:00
|
|
243
245
|
# freeze_time
|
|
244
246
|
# sleep(1)
|
|
245
247
|
# Time.current # => Sun, 09 Jul 2017 15:34:49 EST -05:00
|
|
248
|
+
# freeze_time Time.current + 1.day
|
|
249
|
+
# sleep(1)
|
|
250
|
+
# Time.current # => Mon, 10 Jul 2017 15:34:49 EST -05:00
|
|
246
251
|
#
|
|
247
252
|
# This method also accepts a block, which will return the current time back to its original
|
|
248
253
|
# state at the end of the block:
|
|
@@ -253,8 +258,8 @@ module ActiveSupport
|
|
|
253
258
|
# User.create.created_at # => Sun, 09 Jul 2017 15:34:49 EST -05:00
|
|
254
259
|
# end
|
|
255
260
|
# Time.current # => Sun, 09 Jul 2017 15:34:50 EST -05:00
|
|
256
|
-
def freeze_time(with_usec: false, &block)
|
|
257
|
-
travel_to
|
|
261
|
+
def freeze_time(date_or_time = Time.now, with_usec: false, &block)
|
|
262
|
+
travel_to date_or_time, with_usec: with_usec, &block
|
|
258
263
|
end
|
|
259
264
|
|
|
260
265
|
private
|
|
@@ -49,9 +49,15 @@ module ActiveSupport
|
|
|
49
49
|
attr_reader :time_zone
|
|
50
50
|
|
|
51
51
|
def initialize(utc_time, time_zone, local_time = nil, period = nil)
|
|
52
|
-
@utc = utc_time ? transfer_time_values_to_utc_constructor(utc_time) : nil
|
|
53
52
|
@time_zone, @time = time_zone, local_time
|
|
54
|
-
|
|
53
|
+
if utc_time
|
|
54
|
+
@utc = transfer_time_values_to_utc_constructor(utc_time)
|
|
55
|
+
@period = period
|
|
56
|
+
else
|
|
57
|
+
@utc = nil
|
|
58
|
+
@period = get_period_and_ensure_valid_local_time(period)
|
|
59
|
+
end
|
|
60
|
+
@is_utc = zone == "UTC" || zone == "UCT"
|
|
55
61
|
end
|
|
56
62
|
|
|
57
63
|
# Returns a <tt>Time</tt> instance that represents the time in +time_zone+.
|
|
@@ -103,7 +109,7 @@ module ActiveSupport
|
|
|
103
109
|
# Time.zone = 'Eastern Time (US & Canada)' # => 'Eastern Time (US & Canada)'
|
|
104
110
|
# Time.zone.now.utc? # => false
|
|
105
111
|
def utc?
|
|
106
|
-
|
|
112
|
+
@is_utc
|
|
107
113
|
end
|
|
108
114
|
alias_method :gmt?, :utc?
|
|
109
115
|
|
|
@@ -136,9 +142,9 @@ module ActiveSupport
|
|
|
136
142
|
|
|
137
143
|
# Returns a string of the object's date, time, zone, and offset from UTC.
|
|
138
144
|
#
|
|
139
|
-
# Time.zone.now.inspect # => "
|
|
145
|
+
# Time.zone.now.inspect # => "2024-11-13 07:00:10.528054960 UTC +00:00"
|
|
140
146
|
def inspect
|
|
141
|
-
"#{time.strftime('%
|
|
147
|
+
"#{time.strftime('%F %H:%M:%S.%9N')} #{zone} #{formatted_offset}"
|
|
142
148
|
end
|
|
143
149
|
|
|
144
150
|
# Returns a string of the object's date and time in the ISO 8601 standard
|
|
@@ -146,7 +152,17 @@ module ActiveSupport
|
|
|
146
152
|
#
|
|
147
153
|
# Time.zone.now.xmlschema # => "2014-12-04T11:02:37-05:00"
|
|
148
154
|
def xmlschema(fraction_digits = 0)
|
|
149
|
-
|
|
155
|
+
precision = fraction_digits || 0
|
|
156
|
+
|
|
157
|
+
if @is_utc
|
|
158
|
+
utc.iso8601(precision)
|
|
159
|
+
else
|
|
160
|
+
str = time.iso8601(precision)
|
|
161
|
+
offset = formatted_offset(true, "Z")
|
|
162
|
+
|
|
163
|
+
str.sub!(/(Z|[+-]\d{2}:\d{2})\z/, offset)
|
|
164
|
+
str
|
|
165
|
+
end
|
|
150
166
|
end
|
|
151
167
|
alias_method :iso8601, :xmlschema
|
|
152
168
|
alias_method :rfc3339, :xmlschema
|
|
@@ -157,15 +173,15 @@ module ActiveSupport
|
|
|
157
173
|
# to +false+.
|
|
158
174
|
#
|
|
159
175
|
# # With ActiveSupport::JSON::Encoding.use_standard_json_time_format = true
|
|
160
|
-
# Time.utc(2005,2,1,15,15,10).in_time_zone("Hawaii").
|
|
176
|
+
# Time.utc(2005,2,1,15,15,10).in_time_zone("Hawaii").as_json
|
|
161
177
|
# # => "2005-02-01T05:15:10.000-10:00"
|
|
162
178
|
#
|
|
163
179
|
# # With ActiveSupport::JSON::Encoding.use_standard_json_time_format = false
|
|
164
|
-
# Time.utc(2005,2,1,15,15,10).in_time_zone("Hawaii").
|
|
180
|
+
# Time.utc(2005,2,1,15,15,10).in_time_zone("Hawaii").as_json
|
|
165
181
|
# # => "2005/02/01 05:15:10 -1000"
|
|
166
182
|
def as_json(options = nil)
|
|
167
183
|
if ActiveSupport::JSON::Encoding.use_standard_json_time_format
|
|
168
|
-
xmlschema(ActiveSupport::JSON::Encoding.time_precision)
|
|
184
|
+
xmlschema(ActiveSupport::JSON::Encoding.time_precision).force_encoding(Encoding::UTF_8)
|
|
169
185
|
else
|
|
170
186
|
%(#{time.strftime("%Y/%m/%d %H:%M:%S")} #{formatted_offset(false)})
|
|
171
187
|
end
|
|
@@ -215,8 +231,7 @@ module ActiveSupport
|
|
|
215
231
|
elsif formatter = ::Time::DATE_FORMATS[format]
|
|
216
232
|
formatter.respond_to?(:call) ? formatter.call(self).to_s : strftime(formatter)
|
|
217
233
|
else
|
|
218
|
-
|
|
219
|
-
"#{time.strftime("%Y-%m-%d %H:%M:%S")} #{formatted_offset(false, 'UTC')}"
|
|
234
|
+
to_s
|
|
220
235
|
end
|
|
221
236
|
end
|
|
222
237
|
alias_method :to_formatted_s, :to_fs
|
|
@@ -300,7 +315,8 @@ module ActiveSupport
|
|
|
300
315
|
if duration_of_variable_length?(other)
|
|
301
316
|
method_missing(:+, other)
|
|
302
317
|
else
|
|
303
|
-
result = utc
|
|
318
|
+
result = utc + other
|
|
319
|
+
|
|
304
320
|
result.in_time_zone(time_zone)
|
|
305
321
|
end
|
|
306
322
|
end
|
|
@@ -336,7 +352,7 @@ module ActiveSupport
|
|
|
336
352
|
elsif duration_of_variable_length?(other)
|
|
337
353
|
method_missing(:-, other)
|
|
338
354
|
else
|
|
339
|
-
result = utc
|
|
355
|
+
result = utc - other
|
|
340
356
|
result.in_time_zone(time_zone)
|
|
341
357
|
end
|
|
342
358
|
end
|
|
@@ -479,15 +495,11 @@ module ActiveSupport
|
|
|
479
495
|
@to_datetime ||= utc.to_datetime.new_offset(Rational(utc_offset, 86_400))
|
|
480
496
|
end
|
|
481
497
|
|
|
482
|
-
# Returns an instance of +Time+, either with the same
|
|
483
|
-
# as +self+ or in the local system timezone
|
|
484
|
-
# of +ActiveSupport.to_time_preserves_timezone+.
|
|
498
|
+
# Returns an instance of +Time+, either with the same timezone as +self+,
|
|
499
|
+
# with the same UTC offset as +self+ or in the local system timezone
|
|
500
|
+
# depending on the setting of +ActiveSupport.to_time_preserves_timezone+.
|
|
485
501
|
def to_time
|
|
486
|
-
|
|
487
|
-
@to_time_with_instance_offset ||= getlocal(utc_offset)
|
|
488
|
-
else
|
|
489
|
-
@to_time_with_system_offset ||= getlocal
|
|
490
|
-
end
|
|
502
|
+
@to_time_with_timezone ||= getlocal(time_zone)
|
|
491
503
|
end
|
|
492
504
|
|
|
493
505
|
# So that +self+ <tt>acts_like?(:time)</tt>.
|
|
@@ -535,7 +547,6 @@ module ActiveSupport
|
|
|
535
547
|
# Ensure proxy class responds to all methods that underlying time instance
|
|
536
548
|
# responds to.
|
|
537
549
|
def respond_to_missing?(sym, include_priv)
|
|
538
|
-
return false if sym.to_sym == :acts_like_date?
|
|
539
550
|
time.respond_to?(sym, include_priv)
|
|
540
551
|
end
|
|
541
552
|
|
|
@@ -551,7 +562,9 @@ module ActiveSupport
|
|
|
551
562
|
SECONDS_PER_DAY = 86400
|
|
552
563
|
|
|
553
564
|
def incorporate_utc_offset(time, offset)
|
|
554
|
-
if
|
|
565
|
+
if offset.zero?
|
|
566
|
+
time
|
|
567
|
+
elsif time.kind_of?(Date)
|
|
555
568
|
time + Rational(offset, SECONDS_PER_DAY)
|
|
556
569
|
else
|
|
557
570
|
time + offset
|
|
@@ -57,13 +57,14 @@ module ActiveSupport
|
|
|
57
57
|
"Caracas" => "America/Caracas",
|
|
58
58
|
"La Paz" => "America/La_Paz",
|
|
59
59
|
"Santiago" => "America/Santiago",
|
|
60
|
+
"Asuncion" => "America/Asuncion",
|
|
60
61
|
"Newfoundland" => "America/St_Johns",
|
|
61
62
|
"Brasilia" => "America/Sao_Paulo",
|
|
62
63
|
"Buenos Aires" => "America/Argentina/Buenos_Aires",
|
|
63
64
|
"Montevideo" => "America/Montevideo",
|
|
64
65
|
"Georgetown" => "America/Guyana",
|
|
65
66
|
"Puerto Rico" => "America/Puerto_Rico",
|
|
66
|
-
"Greenland" => "America/
|
|
67
|
+
"Greenland" => "America/Nuuk",
|
|
67
68
|
"Mid-Atlantic" => "Atlantic/South_Georgia",
|
|
68
69
|
"Azores" => "Atlantic/Azores",
|
|
69
70
|
"Cape Verde Is." => "Atlantic/Cape_Verde",
|
|
@@ -208,9 +209,7 @@ module ActiveSupport
|
|
|
208
209
|
TZInfo::Timezone.get(MAPPING[name] || name)
|
|
209
210
|
end
|
|
210
211
|
|
|
211
|
-
# :
|
|
212
|
-
alias_method :create, :new
|
|
213
|
-
# :startdoc:
|
|
212
|
+
alias_method :create, :new # :nodoc:
|
|
214
213
|
|
|
215
214
|
# Returns a TimeZone instance with the given name, or +nil+ if no
|
|
216
215
|
# such TimeZone instance exists. (This exists to support the use of
|
|
@@ -315,6 +314,12 @@ module ActiveSupport
|
|
|
315
314
|
end
|
|
316
315
|
# :startdoc:
|
|
317
316
|
|
|
317
|
+
# Returns a standard time zone name defined by IANA
|
|
318
|
+
# https://www.iana.org/time-zones
|
|
319
|
+
def standard_name
|
|
320
|
+
MAPPING[name] || name
|
|
321
|
+
end
|
|
322
|
+
|
|
318
323
|
# Returns the offset of this time zone from UTC in seconds.
|
|
319
324
|
def utc_offset
|
|
320
325
|
@utc_offset || tzinfo&.current_period&.base_utc_offset
|
|
@@ -554,15 +559,11 @@ module ActiveSupport
|
|
|
554
559
|
tzinfo.local_to_utc(time, dst)
|
|
555
560
|
end
|
|
556
561
|
|
|
557
|
-
|
|
558
|
-
# instances.
|
|
559
|
-
def period_for_utc(time)
|
|
562
|
+
def period_for_utc(time) # :nodoc:
|
|
560
563
|
tzinfo.period_for_utc(time)
|
|
561
564
|
end
|
|
562
565
|
|
|
563
|
-
|
|
564
|
-
# instances.
|
|
565
|
-
def period_for_local(time, dst = true)
|
|
566
|
+
def period_for_local(time, dst = true) # :nodoc:
|
|
566
567
|
tzinfo.period_for_local(time, dst) { |periods| periods.last }
|
|
567
568
|
end
|
|
568
569
|
|
|
@@ -570,6 +571,14 @@ module ActiveSupport
|
|
|
570
571
|
tzinfo.periods_for_local(time)
|
|
571
572
|
end
|
|
572
573
|
|
|
574
|
+
def abbr(time) # :nodoc:
|
|
575
|
+
tzinfo.abbr(time)
|
|
576
|
+
end
|
|
577
|
+
|
|
578
|
+
def dst?(time) # :nodoc:
|
|
579
|
+
tzinfo.dst?(time)
|
|
580
|
+
end
|
|
581
|
+
|
|
573
582
|
def init_with(coder) # :nodoc:
|
|
574
583
|
initialize(coder["name"])
|
|
575
584
|
end
|
|
@@ -62,11 +62,10 @@ module ActiveSupport
|
|
|
62
62
|
"yaml" => Proc.new { |yaml| yaml.to_yaml }
|
|
63
63
|
} unless defined?(FORMATTING)
|
|
64
64
|
|
|
65
|
-
# TODO use regexp instead of Date.parse
|
|
66
65
|
unless defined?(PARSING)
|
|
67
66
|
PARSING = {
|
|
68
67
|
"symbol" => Proc.new { |symbol| symbol.to_s.to_sym },
|
|
69
|
-
"date" => Proc.new { |date| ::Date.
|
|
68
|
+
"date" => Proc.new { |date| ::Date.strptime(date, "%Y-%m-%d") },
|
|
70
69
|
"datetime" => Proc.new { |time| Time.xmlschema(time).utc rescue ::DateTime.parse(time).utc },
|
|
71
70
|
"duration" => Proc.new { |duration| Duration.parse(duration) },
|
|
72
71
|
"integer" => Proc.new { |integer| integer.to_i },
|
|
@@ -74,6 +73,8 @@ module ActiveSupport
|
|
|
74
73
|
"decimal" => Proc.new do |number|
|
|
75
74
|
if String === number
|
|
76
75
|
number.to_d
|
|
76
|
+
elsif Float === number
|
|
77
|
+
BigDecimal(number, 0)
|
|
77
78
|
else
|
|
78
79
|
BigDecimal(number)
|
|
79
80
|
end
|
data/lib/active_support.rb
CHANGED
|
@@ -39,17 +39,22 @@ module ActiveSupport
|
|
|
39
39
|
autoload :Concern
|
|
40
40
|
autoload :CodeGenerator
|
|
41
41
|
autoload :ActionableError
|
|
42
|
+
autoload :Configurable
|
|
42
43
|
autoload :ConfigurationFile
|
|
44
|
+
autoload :ContinuousIntegration
|
|
43
45
|
autoload :CurrentAttributes
|
|
44
46
|
autoload :Dependencies
|
|
45
47
|
autoload :DescendantsTracker
|
|
48
|
+
autoload :Editor
|
|
46
49
|
autoload :ExecutionWrapper
|
|
47
50
|
autoload :Executor
|
|
48
51
|
autoload :ErrorReporter
|
|
52
|
+
autoload :EventReporter
|
|
49
53
|
autoload :FileUpdateChecker
|
|
50
54
|
autoload :EventedFileUpdateChecker
|
|
51
55
|
autoload :ForkTracker
|
|
52
56
|
autoload :LogSubscriber
|
|
57
|
+
autoload :StructuredEventSubscriber
|
|
53
58
|
autoload :IsolatedExecutionState
|
|
54
59
|
autoload :Notifications
|
|
55
60
|
autoload :Reloader
|
|
@@ -57,11 +62,11 @@ module ActiveSupport
|
|
|
57
62
|
|
|
58
63
|
eager_autoload do
|
|
59
64
|
autoload :BacktraceCleaner
|
|
60
|
-
autoload :
|
|
65
|
+
autoload :Benchmark
|
|
61
66
|
autoload :Benchmarkable
|
|
62
67
|
autoload :Cache
|
|
63
68
|
autoload :Callbacks
|
|
64
|
-
autoload :
|
|
69
|
+
autoload :ClassAttribute
|
|
65
70
|
autoload :Deprecation
|
|
66
71
|
autoload :Delegation
|
|
67
72
|
autoload :Digest
|
|
@@ -98,10 +103,16 @@ module ActiveSupport
|
|
|
98
103
|
|
|
99
104
|
cattr_accessor :test_order # :nodoc:
|
|
100
105
|
cattr_accessor :test_parallelization_threshold, default: 50 # :nodoc:
|
|
106
|
+
cattr_accessor :parallelize_test_databases, default: true # :nodoc:
|
|
101
107
|
|
|
102
108
|
@error_reporter = ActiveSupport::ErrorReporter.new
|
|
103
109
|
singleton_class.attr_accessor :error_reporter # :nodoc:
|
|
104
110
|
|
|
111
|
+
@event_reporter = ActiveSupport::EventReporter.new
|
|
112
|
+
singleton_class.attr_accessor :event_reporter # :nodoc:
|
|
113
|
+
|
|
114
|
+
cattr_accessor :filter_parameters, default: [] # :nodoc:
|
|
115
|
+
|
|
105
116
|
def self.cache_format_version
|
|
106
117
|
Cache.format_version
|
|
107
118
|
end
|
|
@@ -111,17 +122,18 @@ module ActiveSupport
|
|
|
111
122
|
end
|
|
112
123
|
|
|
113
124
|
def self.to_time_preserves_timezone
|
|
114
|
-
|
|
125
|
+
ActiveSupport.deprecator.warn(
|
|
126
|
+
"`config.active_support.to_time_preserves_timezone` is deprecated and will be removed in Rails 8.2"
|
|
127
|
+
)
|
|
128
|
+
@to_time_preserves_timezone
|
|
115
129
|
end
|
|
116
130
|
|
|
117
131
|
def self.to_time_preserves_timezone=(value)
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
)
|
|
122
|
-
end
|
|
132
|
+
ActiveSupport.deprecator.warn(
|
|
133
|
+
"`config.active_support.to_time_preserves_timezone` is deprecated and will be removed in Rails 8.2"
|
|
134
|
+
)
|
|
123
135
|
|
|
124
|
-
|
|
136
|
+
@to_time_preserves_timezone = value
|
|
125
137
|
end
|
|
126
138
|
|
|
127
139
|
def self.utc_to_local_returns_utc_offset_times
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: activesupport
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version:
|
|
4
|
+
version: 8.1.2
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- David Heinemeier Hansson
|
|
@@ -139,6 +139,20 @@ dependencies:
|
|
|
139
139
|
- - ">="
|
|
140
140
|
- !ruby/object:Gem::Version
|
|
141
141
|
version: '0'
|
|
142
|
+
- !ruby/object:Gem::Dependency
|
|
143
|
+
name: json
|
|
144
|
+
requirement: !ruby/object:Gem::Requirement
|
|
145
|
+
requirements:
|
|
146
|
+
- - ">="
|
|
147
|
+
- !ruby/object:Gem::Version
|
|
148
|
+
version: '0'
|
|
149
|
+
type: :runtime
|
|
150
|
+
prerelease: false
|
|
151
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
152
|
+
requirements:
|
|
153
|
+
- - ">="
|
|
154
|
+
- !ruby/object:Gem::Version
|
|
155
|
+
version: '0'
|
|
142
156
|
- !ruby/object:Gem::Dependency
|
|
143
157
|
name: logger
|
|
144
158
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -168,19 +182,19 @@ dependencies:
|
|
|
168
182
|
- !ruby/object:Gem::Version
|
|
169
183
|
version: '0.3'
|
|
170
184
|
- !ruby/object:Gem::Dependency
|
|
171
|
-
name:
|
|
185
|
+
name: uri
|
|
172
186
|
requirement: !ruby/object:Gem::Requirement
|
|
173
187
|
requirements:
|
|
174
188
|
- - ">="
|
|
175
189
|
- !ruby/object:Gem::Version
|
|
176
|
-
version:
|
|
190
|
+
version: 0.13.1
|
|
177
191
|
type: :runtime
|
|
178
192
|
prerelease: false
|
|
179
193
|
version_requirements: !ruby/object:Gem::Requirement
|
|
180
194
|
requirements:
|
|
181
195
|
- - ">="
|
|
182
196
|
- !ruby/object:Gem::Version
|
|
183
|
-
version:
|
|
197
|
+
version: 0.13.1
|
|
184
198
|
description: A toolkit of support libraries and Ruby core extensions extracted from
|
|
185
199
|
the Rails framework. Rich support for multibyte strings, internationalization, time
|
|
186
200
|
zones, and testing.
|
|
@@ -197,6 +211,7 @@ files:
|
|
|
197
211
|
- lib/active_support/all.rb
|
|
198
212
|
- lib/active_support/array_inquirer.rb
|
|
199
213
|
- lib/active_support/backtrace_cleaner.rb
|
|
214
|
+
- lib/active_support/benchmark.rb
|
|
200
215
|
- lib/active_support/benchmarkable.rb
|
|
201
216
|
- lib/active_support/broadcast_logger.rb
|
|
202
217
|
- lib/active_support/builder.rb
|
|
@@ -212,13 +227,16 @@ files:
|
|
|
212
227
|
- lib/active_support/cache/strategy/local_cache.rb
|
|
213
228
|
- lib/active_support/cache/strategy/local_cache_middleware.rb
|
|
214
229
|
- lib/active_support/callbacks.rb
|
|
230
|
+
- lib/active_support/class_attribute.rb
|
|
215
231
|
- lib/active_support/code_generator.rb
|
|
216
232
|
- lib/active_support/concern.rb
|
|
217
233
|
- lib/active_support/concurrency/load_interlock_aware_monitor.rb
|
|
218
234
|
- lib/active_support/concurrency/null_lock.rb
|
|
219
235
|
- lib/active_support/concurrency/share_lock.rb
|
|
236
|
+
- lib/active_support/concurrency/thread_monitor.rb
|
|
220
237
|
- lib/active_support/configurable.rb
|
|
221
238
|
- lib/active_support/configuration_file.rb
|
|
239
|
+
- lib/active_support/continuous_integration.rb
|
|
222
240
|
- lib/active_support/core_ext.rb
|
|
223
241
|
- lib/active_support/core_ext/array.rb
|
|
224
242
|
- lib/active_support/core_ext/array/access.rb
|
|
@@ -311,8 +329,8 @@ files:
|
|
|
311
329
|
- lib/active_support/core_ext/range.rb
|
|
312
330
|
- lib/active_support/core_ext/range/compare_range.rb
|
|
313
331
|
- lib/active_support/core_ext/range/conversions.rb
|
|
314
|
-
- lib/active_support/core_ext/range/each.rb
|
|
315
332
|
- lib/active_support/core_ext/range/overlap.rb
|
|
333
|
+
- lib/active_support/core_ext/range/sole.rb
|
|
316
334
|
- lib/active_support/core_ext/regexp.rb
|
|
317
335
|
- lib/active_support/core_ext/securerandom.rb
|
|
318
336
|
- lib/active_support/core_ext/string.rb
|
|
@@ -360,11 +378,14 @@ files:
|
|
|
360
378
|
- lib/active_support/duration.rb
|
|
361
379
|
- lib/active_support/duration/iso8601_parser.rb
|
|
362
380
|
- lib/active_support/duration/iso8601_serializer.rb
|
|
381
|
+
- lib/active_support/editor.rb
|
|
363
382
|
- lib/active_support/encrypted_configuration.rb
|
|
364
383
|
- lib/active_support/encrypted_file.rb
|
|
365
384
|
- lib/active_support/environment_inquirer.rb
|
|
366
385
|
- lib/active_support/error_reporter.rb
|
|
367
386
|
- lib/active_support/error_reporter/test_helper.rb
|
|
387
|
+
- lib/active_support/event_reporter.rb
|
|
388
|
+
- lib/active_support/event_reporter/test_helper.rb
|
|
368
389
|
- lib/active_support/evented_file_update_checker.rb
|
|
369
390
|
- lib/active_support/execution_context.rb
|
|
370
391
|
- lib/active_support/execution_context/test_helper.rb
|
|
@@ -431,7 +452,6 @@ files:
|
|
|
431
452
|
- lib/active_support/ordered_hash.rb
|
|
432
453
|
- lib/active_support/ordered_options.rb
|
|
433
454
|
- lib/active_support/parameter_filter.rb
|
|
434
|
-
- lib/active_support/proxy_object.rb
|
|
435
455
|
- lib/active_support/rails.rb
|
|
436
456
|
- lib/active_support/railtie.rb
|
|
437
457
|
- lib/active_support/reloader.rb
|
|
@@ -439,6 +459,7 @@ files:
|
|
|
439
459
|
- lib/active_support/secure_compare_rotator.rb
|
|
440
460
|
- lib/active_support/security_utils.rb
|
|
441
461
|
- lib/active_support/string_inquirer.rb
|
|
462
|
+
- lib/active_support/structured_event_subscriber.rb
|
|
442
463
|
- lib/active_support/subscriber.rb
|
|
443
464
|
- lib/active_support/syntax_error_proxy.rb
|
|
444
465
|
- lib/active_support/tagged_logging.rb
|
|
@@ -450,16 +471,17 @@ files:
|
|
|
450
471
|
- lib/active_support/testing/declarative.rb
|
|
451
472
|
- lib/active_support/testing/deprecation.rb
|
|
452
473
|
- lib/active_support/testing/error_reporter_assertions.rb
|
|
474
|
+
- lib/active_support/testing/event_reporter_assertions.rb
|
|
453
475
|
- lib/active_support/testing/file_fixtures.rb
|
|
454
476
|
- lib/active_support/testing/isolation.rb
|
|
455
477
|
- lib/active_support/testing/method_call_assertions.rb
|
|
478
|
+
- lib/active_support/testing/notification_assertions.rb
|
|
456
479
|
- lib/active_support/testing/parallelization.rb
|
|
457
480
|
- lib/active_support/testing/parallelization/server.rb
|
|
458
481
|
- lib/active_support/testing/parallelization/worker.rb
|
|
459
482
|
- lib/active_support/testing/parallelize_executor.rb
|
|
460
483
|
- lib/active_support/testing/setup_and_teardown.rb
|
|
461
484
|
- lib/active_support/testing/stream.rb
|
|
462
|
-
- lib/active_support/testing/strict_warnings.rb
|
|
463
485
|
- lib/active_support/testing/tagged_logging.rb
|
|
464
486
|
- lib/active_support/testing/tests_without_assertions.rb
|
|
465
487
|
- lib/active_support/testing/time_helpers.rb
|
|
@@ -479,10 +501,10 @@ licenses:
|
|
|
479
501
|
- MIT
|
|
480
502
|
metadata:
|
|
481
503
|
bug_tracker_uri: https://github.com/rails/rails/issues
|
|
482
|
-
changelog_uri: https://github.com/rails/rails/blob/
|
|
483
|
-
documentation_uri: https://api.rubyonrails.org/
|
|
504
|
+
changelog_uri: https://github.com/rails/rails/blob/v8.1.2/activesupport/CHANGELOG.md
|
|
505
|
+
documentation_uri: https://api.rubyonrails.org/v8.1.2/
|
|
484
506
|
mailing_list_uri: https://discuss.rubyonrails.org/c/rubyonrails-talk
|
|
485
|
-
source_code_uri: https://github.com/rails/rails/tree/
|
|
507
|
+
source_code_uri: https://github.com/rails/rails/tree/v8.1.2/activesupport
|
|
486
508
|
rubygems_mfa_required: 'true'
|
|
487
509
|
rdoc_options:
|
|
488
510
|
- "--encoding"
|
|
@@ -493,14 +515,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
493
515
|
requirements:
|
|
494
516
|
- - ">="
|
|
495
517
|
- !ruby/object:Gem::Version
|
|
496
|
-
version: 3.
|
|
518
|
+
version: 3.2.0
|
|
497
519
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
498
520
|
requirements:
|
|
499
521
|
- - ">="
|
|
500
522
|
- !ruby/object:Gem::Version
|
|
501
523
|
version: '0'
|
|
502
524
|
requirements: []
|
|
503
|
-
rubygems_version:
|
|
525
|
+
rubygems_version: 4.0.3
|
|
504
526
|
specification_version: 4
|
|
505
527
|
summary: A toolkit of support libraries and Ruby core extensions extracted from the
|
|
506
528
|
Rails framework.
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require "active_support/time_with_zone"
|
|
4
|
-
|
|
5
|
-
module ActiveSupport
|
|
6
|
-
module EachTimeWithZone # :nodoc:
|
|
7
|
-
def each(&block)
|
|
8
|
-
ensure_iteration_allowed
|
|
9
|
-
super
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
def step(n = 1, &block)
|
|
13
|
-
ensure_iteration_allowed
|
|
14
|
-
super
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
private
|
|
18
|
-
def ensure_iteration_allowed
|
|
19
|
-
raise TypeError, "can't iterate from #{first.class}" if first.is_a?(TimeWithZone)
|
|
20
|
-
end
|
|
21
|
-
end
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
Range.prepend(ActiveSupport::EachTimeWithZone)
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module ActiveSupport
|
|
4
|
-
class ProxyObject < ::BasicObject # :nodoc:
|
|
5
|
-
undef_method :==
|
|
6
|
-
undef_method :equal?
|
|
7
|
-
|
|
8
|
-
# Let ActiveSupport::ProxyObject at least raise exceptions.
|
|
9
|
-
def raise(*args)
|
|
10
|
-
::Object.send(:raise, *args)
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
def self.inherited(_subclass)
|
|
14
|
-
::ActiveSupport.deprecator.warn(<<~MSG)
|
|
15
|
-
ActiveSupport::ProxyObject is deprecated and will be removed in Rails 8.0.
|
|
16
|
-
Use Ruby's built-in BasicObject instead.
|
|
17
|
-
MSG
|
|
18
|
-
end
|
|
19
|
-
end
|
|
20
|
-
end
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
$VERBOSE = true
|
|
4
|
-
Warning[:deprecated] = true
|
|
5
|
-
|
|
6
|
-
module ActiveSupport
|
|
7
|
-
module RaiseWarnings # :nodoc:
|
|
8
|
-
class WarningError < StandardError; end
|
|
9
|
-
|
|
10
|
-
PROJECT_ROOT = File.expand_path("../../../../", __dir__)
|
|
11
|
-
ALLOWED_WARNINGS = Regexp.union(
|
|
12
|
-
/circular require considered harmful.*delayed_job/, # Bug in delayed job.
|
|
13
|
-
|
|
14
|
-
# Expected non-verbose warning emitted by Rails.
|
|
15
|
-
/Ignoring .*\.yml because it has expired/,
|
|
16
|
-
/Failed to validate the schema cache because/,
|
|
17
|
-
|
|
18
|
-
# TODO: We need to decide what to do with this.
|
|
19
|
-
/Status code :unprocessable_entity is deprecated/
|
|
20
|
-
)
|
|
21
|
-
|
|
22
|
-
SUPPRESSED_WARNINGS = Regexp.union(
|
|
23
|
-
# TODO: remove if https://github.com/mikel/mail/pull/1557 or similar fix
|
|
24
|
-
%r{/lib/mail/parsers/.*statement not reached},
|
|
25
|
-
%r{/lib/mail/parsers/.*assigned but unused variable - disp_type_s},
|
|
26
|
-
%r{/lib/mail/parsers/.*assigned but unused variable - testEof}
|
|
27
|
-
)
|
|
28
|
-
|
|
29
|
-
def warn(message, ...)
|
|
30
|
-
return if SUPPRESSED_WARNINGS.match?(message)
|
|
31
|
-
|
|
32
|
-
super
|
|
33
|
-
|
|
34
|
-
return unless message.include?(PROJECT_ROOT)
|
|
35
|
-
return if ALLOWED_WARNINGS.match?(message)
|
|
36
|
-
return unless ENV["RAILS_STRICT_WARNINGS"] || ENV["BUILDKITE"]
|
|
37
|
-
|
|
38
|
-
raise WarningError.new(message)
|
|
39
|
-
end
|
|
40
|
-
end
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
Warning.singleton_class.prepend(ActiveSupport::RaiseWarnings)
|