activesupport 8.0.0 → 8.1.0

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.
Files changed (116) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +391 -67
  3. data/README.rdoc +1 -1
  4. data/lib/active_support/backtrace_cleaner.rb +72 -1
  5. data/lib/active_support/broadcast_logger.rb +61 -74
  6. data/lib/active_support/cache/file_store.rb +2 -2
  7. data/lib/active_support/cache/mem_cache_store.rb +26 -28
  8. data/lib/active_support/cache/memory_store.rb +5 -5
  9. data/lib/active_support/cache/null_store.rb +2 -2
  10. data/lib/active_support/cache/redis_cache_store.rb +37 -31
  11. data/lib/active_support/cache/strategy/local_cache.rb +72 -27
  12. data/lib/active_support/cache/strategy/local_cache_middleware.rb +7 -7
  13. data/lib/active_support/cache.rb +72 -9
  14. data/lib/active_support/callbacks.rb +27 -11
  15. data/lib/active_support/class_attribute.rb +15 -8
  16. data/lib/active_support/concurrency/load_interlock_aware_monitor.rb +8 -62
  17. data/lib/active_support/concurrency/thread_monitor.rb +55 -0
  18. data/lib/active_support/configurable.rb +34 -0
  19. data/lib/active_support/continuous_integration.rb +145 -0
  20. data/lib/active_support/core_ext/array/conversions.rb +3 -3
  21. data/lib/active_support/core_ext/array.rb +7 -7
  22. data/lib/active_support/core_ext/benchmark.rb +4 -11
  23. data/lib/active_support/core_ext/big_decimal.rb +1 -1
  24. data/lib/active_support/core_ext/class/attribute.rb +20 -5
  25. data/lib/active_support/core_ext/class.rb +2 -2
  26. data/lib/active_support/core_ext/date.rb +5 -5
  27. data/lib/active_support/core_ext/date_and_time/compatibility.rb +0 -35
  28. data/lib/active_support/core_ext/date_time/compatibility.rb +3 -5
  29. data/lib/active_support/core_ext/date_time/conversions.rb +4 -2
  30. data/lib/active_support/core_ext/date_time.rb +5 -5
  31. data/lib/active_support/core_ext/digest.rb +1 -1
  32. data/lib/active_support/core_ext/enumerable.rb +17 -5
  33. data/lib/active_support/core_ext/erb/util.rb +5 -5
  34. data/lib/active_support/core_ext/file.rb +1 -1
  35. data/lib/active_support/core_ext/hash/deep_merge.rb +1 -0
  36. data/lib/active_support/core_ext/hash.rb +8 -8
  37. data/lib/active_support/core_ext/integer.rb +3 -3
  38. data/lib/active_support/core_ext/kernel.rb +3 -3
  39. data/lib/active_support/core_ext/module/introspection.rb +3 -0
  40. data/lib/active_support/core_ext/module.rb +11 -11
  41. data/lib/active_support/core_ext/numeric.rb +3 -3
  42. data/lib/active_support/core_ext/object/json.rb +8 -1
  43. data/lib/active_support/core_ext/object/to_query.rb +7 -1
  44. data/lib/active_support/core_ext/object/try.rb +2 -2
  45. data/lib/active_support/core_ext/object.rb +13 -13
  46. data/lib/active_support/core_ext/pathname.rb +2 -2
  47. data/lib/active_support/core_ext/range/overlap.rb +3 -3
  48. data/lib/active_support/core_ext/range/sole.rb +17 -0
  49. data/lib/active_support/core_ext/range.rb +4 -4
  50. data/lib/active_support/core_ext/securerandom.rb +24 -8
  51. data/lib/active_support/core_ext/string/filters.rb +3 -3
  52. data/lib/active_support/core_ext/string/multibyte.rb +12 -3
  53. data/lib/active_support/core_ext/string/output_safety.rb +19 -12
  54. data/lib/active_support/core_ext/string.rb +13 -13
  55. data/lib/active_support/core_ext/symbol.rb +1 -1
  56. data/lib/active_support/core_ext/time/calculations.rb +0 -7
  57. data/lib/active_support/core_ext/time/compatibility.rb +2 -27
  58. data/lib/active_support/core_ext/time.rb +5 -5
  59. data/lib/active_support/core_ext.rb +1 -1
  60. data/lib/active_support/current_attributes/test_helper.rb +2 -2
  61. data/lib/active_support/current_attributes.rb +27 -17
  62. data/lib/active_support/dependencies/interlock.rb +11 -5
  63. data/lib/active_support/dependencies.rb +6 -1
  64. data/lib/active_support/deprecation/reporting.rb +4 -2
  65. data/lib/active_support/deprecation.rb +1 -1
  66. data/lib/active_support/editor.rb +70 -0
  67. data/lib/active_support/error_reporter.rb +61 -8
  68. data/lib/active_support/event_reporter/test_helper.rb +32 -0
  69. data/lib/active_support/event_reporter.rb +592 -0
  70. data/lib/active_support/evented_file_update_checker.rb +5 -1
  71. data/lib/active_support/execution_context.rb +64 -7
  72. data/lib/active_support/execution_wrapper.rb +1 -1
  73. data/lib/active_support/file_update_checker.rb +8 -6
  74. data/lib/active_support/gem_version.rb +1 -1
  75. data/lib/active_support/gzip.rb +1 -0
  76. data/lib/active_support/hash_with_indifferent_access.rb +47 -24
  77. data/lib/active_support/i18n_railtie.rb +1 -2
  78. data/lib/active_support/inflector/inflections.rb +31 -15
  79. data/lib/active_support/inflector/transliterate.rb +6 -8
  80. data/lib/active_support/isolated_execution_state.rb +12 -15
  81. data/lib/active_support/json/decoding.rb +6 -4
  82. data/lib/active_support/json/encoding.rb +155 -19
  83. data/lib/active_support/lazy_load_hooks.rb +1 -1
  84. data/lib/active_support/log_subscriber.rb +2 -6
  85. data/lib/active_support/logger_thread_safe_level.rb +6 -3
  86. data/lib/active_support/message_encryptors.rb +54 -2
  87. data/lib/active_support/message_pack/extensions.rb +5 -0
  88. data/lib/active_support/message_verifier.rb +9 -0
  89. data/lib/active_support/message_verifiers.rb +57 -3
  90. data/lib/active_support/messages/rotation_coordinator.rb +9 -0
  91. data/lib/active_support/messages/rotator.rb +10 -0
  92. data/lib/active_support/multibyte/chars.rb +12 -2
  93. data/lib/active_support/multibyte.rb +4 -0
  94. data/lib/active_support/notifications/fanout.rb +64 -42
  95. data/lib/active_support/notifications/instrumenter.rb +1 -1
  96. data/lib/active_support/railtie.rb +32 -13
  97. data/lib/active_support/structured_event_subscriber.rb +99 -0
  98. data/lib/active_support/subscriber.rb +0 -5
  99. data/lib/active_support/syntax_error_proxy.rb +3 -0
  100. data/lib/active_support/test_case.rb +61 -6
  101. data/lib/active_support/testing/assertions.rb +34 -6
  102. data/lib/active_support/testing/error_reporter_assertions.rb +18 -1
  103. data/lib/active_support/testing/event_reporter_assertions.rb +227 -0
  104. data/lib/active_support/testing/notification_assertions.rb +92 -0
  105. data/lib/active_support/testing/parallelization/server.rb +15 -2
  106. data/lib/active_support/testing/parallelization/worker.rb +4 -2
  107. data/lib/active_support/testing/parallelization.rb +25 -1
  108. data/lib/active_support/testing/tests_without_assertions.rb +1 -1
  109. data/lib/active_support/testing/time_helpers.rb +7 -3
  110. data/lib/active_support/time_with_zone.rb +23 -23
  111. data/lib/active_support/values/time_zone.rb +8 -1
  112. data/lib/active_support/xml_mini.rb +3 -2
  113. data/lib/active_support.rb +20 -15
  114. metadata +27 -23
  115. data/lib/active_support/core_ext/range/each.rb +0 -24
  116. data/lib/active_support/testing/strict_warnings.rb +0 -43
@@ -14,6 +14,7 @@ module ActiveSupport
14
14
  def initialize
15
15
  @queue = Queue.new
16
16
  @active_workers = Concurrent::Map.new
17
+ @worker_pids = Concurrent::Map.new
17
18
  @in_flight = Concurrent::Map.new
18
19
  end
19
20
 
@@ -40,12 +41,24 @@ module ActiveSupport
40
41
  end
41
42
  end
42
43
 
43
- def start_worker(worker_id)
44
+ def start_worker(worker_id, worker_pid)
44
45
  @active_workers[worker_id] = true
46
+ @worker_pids[worker_id] = worker_pid
45
47
  end
46
48
 
47
- def stop_worker(worker_id)
49
+ def stop_worker(worker_id, worker_pid)
48
50
  @active_workers.delete(worker_id)
51
+ @worker_pids.delete(worker_id)
52
+ end
53
+
54
+ def remove_dead_workers(dead_pids)
55
+ dead_pids.each do |dead_pid|
56
+ worker_id = @worker_pids.key(dead_pid)
57
+ if worker_id
58
+ @active_workers.delete(worker_id)
59
+ @worker_pids.delete(worker_id)
60
+ end
61
+ end
49
62
  end
50
63
 
51
64
  def active_workers?
@@ -18,7 +18,7 @@ module ActiveSupport
18
18
  DRb.stop_service
19
19
 
20
20
  @queue = DRbObject.new_with_uri(@url)
21
- @queue.start_worker(@id)
21
+ @queue.start_worker(@id, Process.pid)
22
22
 
23
23
  begin
24
24
  after_fork
@@ -29,7 +29,7 @@ module ActiveSupport
29
29
  set_process_title("(stopping)")
30
30
 
31
31
  run_cleanup
32
- @queue.stop_worker(@id)
32
+ @queue.stop_worker(@id, Process.pid)
33
33
  end
34
34
  end
35
35
 
@@ -78,6 +78,8 @@ module ActiveSupport
78
78
  end
79
79
 
80
80
  def after_fork
81
+ ActiveSupport::TestCase.parallel_worker_id = @number
82
+
81
83
  Parallelization.after_fork_hooks.each do |cb|
82
84
  cb.call(@number)
83
85
  end
@@ -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 { |pid| Process.waitpid pid }
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
@@ -238,12 +238,16 @@ module ActiveSupport
238
238
  end
239
239
  alias_method :unfreeze_time, :travel_back
240
240
 
241
- # Calls +travel_to+ with +Time.now+. Forwards optional <tt>with_usec</tt> argument.
241
+ # Calls +travel_to+ with +date_or_time+, which defaults to +Time.now+.
242
+ # Forwards optional <tt>with_usec</tt> argument.
242
243
  #
243
244
  # Time.current # => Sun, 09 Jul 2017 15:34:49 EST -05:00
244
245
  # freeze_time
245
246
  # sleep(1)
246
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
247
251
  #
248
252
  # This method also accepts a block, which will return the current time back to its original
249
253
  # state at the end of the block:
@@ -254,8 +258,8 @@ module ActiveSupport
254
258
  # User.create.created_at # => Sun, 09 Jul 2017 15:34:49 EST -05:00
255
259
  # end
256
260
  # Time.current # => Sun, 09 Jul 2017 15:34:50 EST -05:00
257
- def freeze_time(with_usec: false, &block)
258
- travel_to Time.now, with_usec: with_usec, &block
261
+ def freeze_time(date_or_time = Time.now, with_usec: false, &block)
262
+ travel_to date_or_time, with_usec: with_usec, &block
259
263
  end
260
264
 
261
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
- @period = @utc ? period : get_period_and_ensure_valid_local_time(period)
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
- zone == "UTC" || zone == "UCT"
112
+ @is_utc
107
113
  end
108
114
  alias_method :gmt?, :utc?
109
115
 
@@ -136,7 +142,7 @@ 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 # => "Thu, 04 Dec 2014 11:00:25.624541392 EST -05:00"
145
+ # Time.zone.now.inspect # => "2024-11-13 07:00:10.528054960 UTC +00:00"
140
146
  def inspect
141
147
  "#{time.strftime('%F %H:%M:%S.%9N')} #{zone} #{formatted_offset}"
142
148
  end
@@ -146,7 +152,13 @@ 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
- "#{time.strftime(PRECISIONS[fraction_digits.to_i])}#{formatted_offset(true, 'Z')}"
155
+ if @is_utc
156
+ utc.iso8601(fraction_digits || 0)
157
+ else
158
+ str = time.iso8601(fraction_digits || 0)
159
+ str[-1] = formatted_offset(true, "Z")
160
+ str
161
+ end
150
162
  end
151
163
  alias_method :iso8601, :xmlschema
152
164
  alias_method :rfc3339, :xmlschema
@@ -299,16 +311,8 @@ module ActiveSupport
299
311
  if duration_of_variable_length?(other)
300
312
  method_missing(:+, other)
301
313
  else
302
- begin
303
- result = utc + other
304
- rescue TypeError
305
- result = utc.to_datetime.since(other)
306
- ActiveSupport.deprecator.warn(
307
- "Adding an instance of #{other.class} to an instance of #{self.class} is deprecated. This behavior will raise " \
308
- "a `TypeError` in Rails 8.1."
309
- )
310
- result.in_time_zone(time_zone)
311
- end
314
+ result = utc + other
315
+
312
316
  result.in_time_zone(time_zone)
313
317
  end
314
318
  end
@@ -491,13 +495,7 @@ module ActiveSupport
491
495
  # with the same UTC offset as +self+ or in the local system timezone
492
496
  # depending on the setting of +ActiveSupport.to_time_preserves_timezone+.
493
497
  def to_time
494
- if preserve_timezone == :zone
495
- @to_time_with_timezone ||= getlocal(time_zone)
496
- elsif preserve_timezone
497
- @to_time_with_instance_offset ||= getlocal(utc_offset)
498
- else
499
- @to_time_with_system_offset ||= getlocal
500
- end
498
+ @to_time_with_timezone ||= getlocal(time_zone)
501
499
  end
502
500
 
503
501
  # So that +self+ <tt>acts_like?(:time)</tt>.
@@ -560,7 +558,9 @@ module ActiveSupport
560
558
  SECONDS_PER_DAY = 86400
561
559
 
562
560
  def incorporate_utc_offset(time, offset)
563
- if time.kind_of?(Date)
561
+ if offset.zero?
562
+ time
563
+ elsif time.kind_of?(Date)
564
564
  time + Rational(offset, SECONDS_PER_DAY)
565
565
  else
566
566
  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/Godthab",
67
+ "Greenland" => "America/Nuuk",
67
68
  "Mid-Atlantic" => "Atlantic/South_Georgia",
68
69
  "Azores" => "Atlantic/Azores",
69
70
  "Cape Verde Is." => "Atlantic/Cape_Verde",
@@ -313,6 +314,12 @@ module ActiveSupport
313
314
  end
314
315
  # :startdoc:
315
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
+
316
323
  # Returns the offset of this time zone from UTC in seconds.
317
324
  def utc_offset
318
325
  @utc_offset || tzinfo&.current_period&.base_utc_offset
@@ -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.parse(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
@@ -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
@@ -61,7 +66,6 @@ module ActiveSupport
61
66
  autoload :Benchmarkable
62
67
  autoload :Cache
63
68
  autoload :Callbacks
64
- autoload :Configurable
65
69
  autoload :ClassAttribute
66
70
  autoload :Deprecation
67
71
  autoload :Delegation
@@ -99,10 +103,16 @@ module ActiveSupport
99
103
 
100
104
  cattr_accessor :test_order # :nodoc:
101
105
  cattr_accessor :test_parallelization_threshold, default: 50 # :nodoc:
106
+ cattr_accessor :parallelize_test_databases, default: true # :nodoc:
102
107
 
103
108
  @error_reporter = ActiveSupport::ErrorReporter.new
104
109
  singleton_class.attr_accessor :error_reporter # :nodoc:
105
110
 
111
+ @event_reporter = ActiveSupport::EventReporter.new
112
+ singleton_class.attr_accessor :event_reporter # :nodoc:
113
+
114
+ cattr_accessor :filter_parameters, default: [] # :nodoc:
115
+
106
116
  def self.cache_format_version
107
117
  Cache.format_version
108
118
  end
@@ -112,23 +122,18 @@ module ActiveSupport
112
122
  end
113
123
 
114
124
  def self.to_time_preserves_timezone
115
- DateAndTime::Compatibility.preserve_timezone
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
116
129
  end
117
130
 
118
131
  def self.to_time_preserves_timezone=(value)
119
- if !value
120
- ActiveSupport.deprecator.warn(
121
- "`to_time` will always preserve the receiver timezone rather than system local time in Rails 8.1. " \
122
- "To opt in to the new behavior, set `config.active_support.to_time_preserves_timezone = :zone`."
123
- )
124
- elsif value != :zone
125
- ActiveSupport.deprecator.warn(
126
- "`to_time` will always preserve the full timezone rather than offset of the receiver in Rails 8.1. " \
127
- "To opt in to the new behavior, set `config.active_support.to_time_preserves_timezone = :zone`."
128
- )
129
- end
130
-
131
- DateAndTime::Compatibility.preserve_timezone = value
132
+ ActiveSupport.deprecator.warn(
133
+ "`config.active_support.to_time_preserves_timezone` is deprecated and will be removed in Rails 8.2"
134
+ )
135
+
136
+ @to_time_preserves_timezone = value
132
137
  end
133
138
 
134
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: 8.0.0
4
+ version: 8.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Heinemeier Hansson
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2024-11-07 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: i18n
@@ -141,61 +140,61 @@ dependencies:
141
140
  - !ruby/object:Gem::Version
142
141
  version: '0'
143
142
  - !ruby/object:Gem::Dependency
144
- name: logger
143
+ name: json
145
144
  requirement: !ruby/object:Gem::Requirement
146
145
  requirements:
147
146
  - - ">="
148
147
  - !ruby/object:Gem::Version
149
- version: 1.4.2
148
+ version: '0'
150
149
  type: :runtime
151
150
  prerelease: false
152
151
  version_requirements: !ruby/object:Gem::Requirement
153
152
  requirements:
154
153
  - - ">="
155
154
  - !ruby/object:Gem::Version
156
- version: 1.4.2
155
+ version: '0'
157
156
  - !ruby/object:Gem::Dependency
158
- name: securerandom
157
+ name: logger
159
158
  requirement: !ruby/object:Gem::Requirement
160
159
  requirements:
161
160
  - - ">="
162
161
  - !ruby/object:Gem::Version
163
- version: '0.3'
162
+ version: 1.4.2
164
163
  type: :runtime
165
164
  prerelease: false
166
165
  version_requirements: !ruby/object:Gem::Requirement
167
166
  requirements:
168
167
  - - ">="
169
168
  - !ruby/object:Gem::Version
170
- version: '0.3'
169
+ version: 1.4.2
171
170
  - !ruby/object:Gem::Dependency
172
- name: uri
171
+ name: securerandom
173
172
  requirement: !ruby/object:Gem::Requirement
174
173
  requirements:
175
174
  - - ">="
176
175
  - !ruby/object:Gem::Version
177
- version: 0.13.1
176
+ version: '0.3'
178
177
  type: :runtime
179
178
  prerelease: false
180
179
  version_requirements: !ruby/object:Gem::Requirement
181
180
  requirements:
182
181
  - - ">="
183
182
  - !ruby/object:Gem::Version
184
- version: 0.13.1
183
+ version: '0.3'
185
184
  - !ruby/object:Gem::Dependency
186
- name: benchmark
185
+ name: uri
187
186
  requirement: !ruby/object:Gem::Requirement
188
187
  requirements:
189
188
  - - ">="
190
189
  - !ruby/object:Gem::Version
191
- version: '0.3'
190
+ version: 0.13.1
192
191
  type: :runtime
193
192
  prerelease: false
194
193
  version_requirements: !ruby/object:Gem::Requirement
195
194
  requirements:
196
195
  - - ">="
197
196
  - !ruby/object:Gem::Version
198
- version: '0.3'
197
+ version: 0.13.1
199
198
  description: A toolkit of support libraries and Ruby core extensions extracted from
200
199
  the Rails framework. Rich support for multibyte strings, internationalization, time
201
200
  zones, and testing.
@@ -234,8 +233,10 @@ files:
234
233
  - lib/active_support/concurrency/load_interlock_aware_monitor.rb
235
234
  - lib/active_support/concurrency/null_lock.rb
236
235
  - lib/active_support/concurrency/share_lock.rb
236
+ - lib/active_support/concurrency/thread_monitor.rb
237
237
  - lib/active_support/configurable.rb
238
238
  - lib/active_support/configuration_file.rb
239
+ - lib/active_support/continuous_integration.rb
239
240
  - lib/active_support/core_ext.rb
240
241
  - lib/active_support/core_ext/array.rb
241
242
  - lib/active_support/core_ext/array/access.rb
@@ -328,8 +329,8 @@ files:
328
329
  - lib/active_support/core_ext/range.rb
329
330
  - lib/active_support/core_ext/range/compare_range.rb
330
331
  - lib/active_support/core_ext/range/conversions.rb
331
- - lib/active_support/core_ext/range/each.rb
332
332
  - lib/active_support/core_ext/range/overlap.rb
333
+ - lib/active_support/core_ext/range/sole.rb
333
334
  - lib/active_support/core_ext/regexp.rb
334
335
  - lib/active_support/core_ext/securerandom.rb
335
336
  - lib/active_support/core_ext/string.rb
@@ -377,11 +378,14 @@ files:
377
378
  - lib/active_support/duration.rb
378
379
  - lib/active_support/duration/iso8601_parser.rb
379
380
  - lib/active_support/duration/iso8601_serializer.rb
381
+ - lib/active_support/editor.rb
380
382
  - lib/active_support/encrypted_configuration.rb
381
383
  - lib/active_support/encrypted_file.rb
382
384
  - lib/active_support/environment_inquirer.rb
383
385
  - lib/active_support/error_reporter.rb
384
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
385
389
  - lib/active_support/evented_file_update_checker.rb
386
390
  - lib/active_support/execution_context.rb
387
391
  - lib/active_support/execution_context/test_helper.rb
@@ -455,6 +459,7 @@ files:
455
459
  - lib/active_support/secure_compare_rotator.rb
456
460
  - lib/active_support/security_utils.rb
457
461
  - lib/active_support/string_inquirer.rb
462
+ - lib/active_support/structured_event_subscriber.rb
458
463
  - lib/active_support/subscriber.rb
459
464
  - lib/active_support/syntax_error_proxy.rb
460
465
  - lib/active_support/tagged_logging.rb
@@ -466,16 +471,17 @@ files:
466
471
  - lib/active_support/testing/declarative.rb
467
472
  - lib/active_support/testing/deprecation.rb
468
473
  - lib/active_support/testing/error_reporter_assertions.rb
474
+ - lib/active_support/testing/event_reporter_assertions.rb
469
475
  - lib/active_support/testing/file_fixtures.rb
470
476
  - lib/active_support/testing/isolation.rb
471
477
  - lib/active_support/testing/method_call_assertions.rb
478
+ - lib/active_support/testing/notification_assertions.rb
472
479
  - lib/active_support/testing/parallelization.rb
473
480
  - lib/active_support/testing/parallelization/server.rb
474
481
  - lib/active_support/testing/parallelization/worker.rb
475
482
  - lib/active_support/testing/parallelize_executor.rb
476
483
  - lib/active_support/testing/setup_and_teardown.rb
477
484
  - lib/active_support/testing/stream.rb
478
- - lib/active_support/testing/strict_warnings.rb
479
485
  - lib/active_support/testing/tagged_logging.rb
480
486
  - lib/active_support/testing/tests_without_assertions.rb
481
487
  - lib/active_support/testing/time_helpers.rb
@@ -495,12 +501,11 @@ licenses:
495
501
  - MIT
496
502
  metadata:
497
503
  bug_tracker_uri: https://github.com/rails/rails/issues
498
- changelog_uri: https://github.com/rails/rails/blob/v8.0.0/activesupport/CHANGELOG.md
499
- documentation_uri: https://api.rubyonrails.org/v8.0.0/
504
+ changelog_uri: https://github.com/rails/rails/blob/v8.1.0/activesupport/CHANGELOG.md
505
+ documentation_uri: https://api.rubyonrails.org/v8.1.0/
500
506
  mailing_list_uri: https://discuss.rubyonrails.org/c/rubyonrails-talk
501
- source_code_uri: https://github.com/rails/rails/tree/v8.0.0/activesupport
507
+ source_code_uri: https://github.com/rails/rails/tree/v8.1.0/activesupport
502
508
  rubygems_mfa_required: 'true'
503
- post_install_message:
504
509
  rdoc_options:
505
510
  - "--encoding"
506
511
  - UTF-8
@@ -517,8 +522,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
517
522
  - !ruby/object:Gem::Version
518
523
  version: '0'
519
524
  requirements: []
520
- rubygems_version: 3.5.22
521
- signing_key:
525
+ rubygems_version: 3.6.9
522
526
  specification_version: 4
523
527
  summary: A toolkit of support libraries and Ruby core extensions extracted from the
524
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,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)