activesupport 7.2.2.1 → 8.1.3
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 +422 -145
- 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 +30 -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 +0 -15
- 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/inflections.rb +1 -1
- data/lib/active_support/core_ext/string/multibyte.rb +12 -3
- data/lib/active_support/core_ext/string/output_safety.rb +29 -13
- 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/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 +75 -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 +4 -4
- 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 +34 -16
- data/lib/active_support/inflector/methods.rb +3 -3
- 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 +159 -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/number_converter.rb +1 -1
- data/lib/active_support/number_helper/number_to_delimited_converter.rb +17 -2
- 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 +118 -27
- data/lib/active_support/testing/autorun.rb +5 -0
- data/lib/active_support/testing/error_reporter_assertions.rb +17 -0
- 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 +9 -3
- 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 +35 -16
- 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,14 +1,13 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: activesupport
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version:
|
|
4
|
+
version: 8.1.3
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- David Heinemeier Hansson
|
|
8
|
-
autorequire:
|
|
9
8
|
bindir: bin
|
|
10
9
|
cert_chain: []
|
|
11
|
-
date:
|
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
12
11
|
dependencies:
|
|
13
12
|
- !ruby/object:Gem::Dependency
|
|
14
13
|
name: i18n
|
|
@@ -140,6 +139,20 @@ dependencies:
|
|
|
140
139
|
- - ">="
|
|
141
140
|
- !ruby/object:Gem::Version
|
|
142
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'
|
|
143
156
|
- !ruby/object:Gem::Dependency
|
|
144
157
|
name: logger
|
|
145
158
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -169,19 +182,19 @@ dependencies:
|
|
|
169
182
|
- !ruby/object:Gem::Version
|
|
170
183
|
version: '0.3'
|
|
171
184
|
- !ruby/object:Gem::Dependency
|
|
172
|
-
name:
|
|
185
|
+
name: uri
|
|
173
186
|
requirement: !ruby/object:Gem::Requirement
|
|
174
187
|
requirements:
|
|
175
188
|
- - ">="
|
|
176
189
|
- !ruby/object:Gem::Version
|
|
177
|
-
version:
|
|
190
|
+
version: 0.13.1
|
|
178
191
|
type: :runtime
|
|
179
192
|
prerelease: false
|
|
180
193
|
version_requirements: !ruby/object:Gem::Requirement
|
|
181
194
|
requirements:
|
|
182
195
|
- - ">="
|
|
183
196
|
- !ruby/object:Gem::Version
|
|
184
|
-
version:
|
|
197
|
+
version: 0.13.1
|
|
185
198
|
description: A toolkit of support libraries and Ruby core extensions extracted from
|
|
186
199
|
the Rails framework. Rich support for multibyte strings, internationalization, time
|
|
187
200
|
zones, and testing.
|
|
@@ -198,6 +211,7 @@ files:
|
|
|
198
211
|
- lib/active_support/all.rb
|
|
199
212
|
- lib/active_support/array_inquirer.rb
|
|
200
213
|
- lib/active_support/backtrace_cleaner.rb
|
|
214
|
+
- lib/active_support/benchmark.rb
|
|
201
215
|
- lib/active_support/benchmarkable.rb
|
|
202
216
|
- lib/active_support/broadcast_logger.rb
|
|
203
217
|
- lib/active_support/builder.rb
|
|
@@ -213,13 +227,16 @@ files:
|
|
|
213
227
|
- lib/active_support/cache/strategy/local_cache.rb
|
|
214
228
|
- lib/active_support/cache/strategy/local_cache_middleware.rb
|
|
215
229
|
- lib/active_support/callbacks.rb
|
|
230
|
+
- lib/active_support/class_attribute.rb
|
|
216
231
|
- lib/active_support/code_generator.rb
|
|
217
232
|
- lib/active_support/concern.rb
|
|
218
233
|
- lib/active_support/concurrency/load_interlock_aware_monitor.rb
|
|
219
234
|
- lib/active_support/concurrency/null_lock.rb
|
|
220
235
|
- lib/active_support/concurrency/share_lock.rb
|
|
236
|
+
- lib/active_support/concurrency/thread_monitor.rb
|
|
221
237
|
- lib/active_support/configurable.rb
|
|
222
238
|
- lib/active_support/configuration_file.rb
|
|
239
|
+
- lib/active_support/continuous_integration.rb
|
|
223
240
|
- lib/active_support/core_ext.rb
|
|
224
241
|
- lib/active_support/core_ext/array.rb
|
|
225
242
|
- lib/active_support/core_ext/array/access.rb
|
|
@@ -312,8 +329,8 @@ files:
|
|
|
312
329
|
- lib/active_support/core_ext/range.rb
|
|
313
330
|
- lib/active_support/core_ext/range/compare_range.rb
|
|
314
331
|
- lib/active_support/core_ext/range/conversions.rb
|
|
315
|
-
- lib/active_support/core_ext/range/each.rb
|
|
316
332
|
- lib/active_support/core_ext/range/overlap.rb
|
|
333
|
+
- lib/active_support/core_ext/range/sole.rb
|
|
317
334
|
- lib/active_support/core_ext/regexp.rb
|
|
318
335
|
- lib/active_support/core_ext/securerandom.rb
|
|
319
336
|
- lib/active_support/core_ext/string.rb
|
|
@@ -361,11 +378,14 @@ files:
|
|
|
361
378
|
- lib/active_support/duration.rb
|
|
362
379
|
- lib/active_support/duration/iso8601_parser.rb
|
|
363
380
|
- lib/active_support/duration/iso8601_serializer.rb
|
|
381
|
+
- lib/active_support/editor.rb
|
|
364
382
|
- lib/active_support/encrypted_configuration.rb
|
|
365
383
|
- lib/active_support/encrypted_file.rb
|
|
366
384
|
- lib/active_support/environment_inquirer.rb
|
|
367
385
|
- lib/active_support/error_reporter.rb
|
|
368
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
|
|
369
389
|
- lib/active_support/evented_file_update_checker.rb
|
|
370
390
|
- lib/active_support/execution_context.rb
|
|
371
391
|
- lib/active_support/execution_context/test_helper.rb
|
|
@@ -432,7 +452,6 @@ files:
|
|
|
432
452
|
- lib/active_support/ordered_hash.rb
|
|
433
453
|
- lib/active_support/ordered_options.rb
|
|
434
454
|
- lib/active_support/parameter_filter.rb
|
|
435
|
-
- lib/active_support/proxy_object.rb
|
|
436
455
|
- lib/active_support/rails.rb
|
|
437
456
|
- lib/active_support/railtie.rb
|
|
438
457
|
- lib/active_support/reloader.rb
|
|
@@ -440,6 +459,7 @@ files:
|
|
|
440
459
|
- lib/active_support/secure_compare_rotator.rb
|
|
441
460
|
- lib/active_support/security_utils.rb
|
|
442
461
|
- lib/active_support/string_inquirer.rb
|
|
462
|
+
- lib/active_support/structured_event_subscriber.rb
|
|
443
463
|
- lib/active_support/subscriber.rb
|
|
444
464
|
- lib/active_support/syntax_error_proxy.rb
|
|
445
465
|
- lib/active_support/tagged_logging.rb
|
|
@@ -451,16 +471,17 @@ files:
|
|
|
451
471
|
- lib/active_support/testing/declarative.rb
|
|
452
472
|
- lib/active_support/testing/deprecation.rb
|
|
453
473
|
- lib/active_support/testing/error_reporter_assertions.rb
|
|
474
|
+
- lib/active_support/testing/event_reporter_assertions.rb
|
|
454
475
|
- lib/active_support/testing/file_fixtures.rb
|
|
455
476
|
- lib/active_support/testing/isolation.rb
|
|
456
477
|
- lib/active_support/testing/method_call_assertions.rb
|
|
478
|
+
- lib/active_support/testing/notification_assertions.rb
|
|
457
479
|
- lib/active_support/testing/parallelization.rb
|
|
458
480
|
- lib/active_support/testing/parallelization/server.rb
|
|
459
481
|
- lib/active_support/testing/parallelization/worker.rb
|
|
460
482
|
- lib/active_support/testing/parallelize_executor.rb
|
|
461
483
|
- lib/active_support/testing/setup_and_teardown.rb
|
|
462
484
|
- lib/active_support/testing/stream.rb
|
|
463
|
-
- lib/active_support/testing/strict_warnings.rb
|
|
464
485
|
- lib/active_support/testing/tagged_logging.rb
|
|
465
486
|
- lib/active_support/testing/tests_without_assertions.rb
|
|
466
487
|
- lib/active_support/testing/time_helpers.rb
|
|
@@ -480,12 +501,11 @@ licenses:
|
|
|
480
501
|
- MIT
|
|
481
502
|
metadata:
|
|
482
503
|
bug_tracker_uri: https://github.com/rails/rails/issues
|
|
483
|
-
changelog_uri: https://github.com/rails/rails/blob/
|
|
484
|
-
documentation_uri: https://api.rubyonrails.org/
|
|
504
|
+
changelog_uri: https://github.com/rails/rails/blob/v8.1.3/activesupport/CHANGELOG.md
|
|
505
|
+
documentation_uri: https://api.rubyonrails.org/v8.1.3/
|
|
485
506
|
mailing_list_uri: https://discuss.rubyonrails.org/c/rubyonrails-talk
|
|
486
|
-
source_code_uri: https://github.com/rails/rails/tree/
|
|
507
|
+
source_code_uri: https://github.com/rails/rails/tree/v8.1.3/activesupport
|
|
487
508
|
rubygems_mfa_required: 'true'
|
|
488
|
-
post_install_message:
|
|
489
509
|
rdoc_options:
|
|
490
510
|
- "--encoding"
|
|
491
511
|
- UTF-8
|
|
@@ -495,15 +515,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
495
515
|
requirements:
|
|
496
516
|
- - ">="
|
|
497
517
|
- !ruby/object:Gem::Version
|
|
498
|
-
version: 3.
|
|
518
|
+
version: 3.2.0
|
|
499
519
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
500
520
|
requirements:
|
|
501
521
|
- - ">="
|
|
502
522
|
- !ruby/object:Gem::Version
|
|
503
523
|
version: '0'
|
|
504
524
|
requirements: []
|
|
505
|
-
rubygems_version:
|
|
506
|
-
signing_key:
|
|
525
|
+
rubygems_version: 4.0.6
|
|
507
526
|
specification_version: 4
|
|
508
527
|
summary: A toolkit of support libraries and Ruby core extensions extracted from the
|
|
509
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)
|