activesupport 7.2.3.1 → 8.0.5

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 (65) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +171 -214
  3. data/lib/active_support/backtrace_cleaner.rb +1 -1
  4. data/lib/active_support/benchmark.rb +21 -0
  5. data/lib/active_support/benchmarkable.rb +3 -2
  6. data/lib/active_support/cache/file_store.rb +12 -2
  7. data/lib/active_support/cache/mem_cache_store.rb +4 -1
  8. data/lib/active_support/cache/memory_store.rb +6 -2
  9. data/lib/active_support/cache/redis_cache_store.rb +6 -3
  10. data/lib/active_support/cache.rb +16 -11
  11. data/lib/active_support/callbacks.rb +5 -3
  12. data/lib/active_support/class_attribute.rb +33 -0
  13. data/lib/active_support/code_generator.rb +9 -0
  14. data/lib/active_support/concurrency/share_lock.rb +0 -1
  15. data/lib/active_support/configuration_file.rb +15 -6
  16. data/lib/active_support/core_ext/array/conversions.rb +3 -3
  17. data/lib/active_support/core_ext/benchmark.rb +6 -9
  18. data/lib/active_support/core_ext/class/attribute.rb +24 -18
  19. data/lib/active_support/core_ext/date/conversions.rb +2 -0
  20. data/lib/active_support/core_ext/date_and_time/compatibility.rb +2 -2
  21. data/lib/active_support/core_ext/enumerable.rb +8 -3
  22. data/lib/active_support/core_ext/hash/deep_merge.rb +1 -0
  23. data/lib/active_support/core_ext/hash/except.rb +0 -12
  24. data/lib/active_support/core_ext/module/attr_internal.rb +3 -4
  25. data/lib/active_support/core_ext/object/json.rb +16 -10
  26. data/lib/active_support/core_ext/object/to_query.rb +2 -1
  27. data/lib/active_support/core_ext/range/overlap.rb +3 -3
  28. data/lib/active_support/core_ext/string/inflections.rb +1 -1
  29. data/lib/active_support/core_ext/thread/backtrace/location.rb +2 -7
  30. data/lib/active_support/core_ext/time/calculations.rb +14 -2
  31. data/lib/active_support/core_ext/time/conversions.rb +2 -0
  32. data/lib/active_support/delegation.rb +25 -44
  33. data/lib/active_support/dependencies.rb +0 -1
  34. data/lib/active_support/deprecation/reporting.rb +0 -19
  35. data/lib/active_support/deprecation.rb +1 -1
  36. data/lib/active_support/duration.rb +14 -10
  37. data/lib/active_support/encrypted_configuration.rb +20 -2
  38. data/lib/active_support/error_reporter.rb +31 -1
  39. data/lib/active_support/evented_file_update_checker.rb +0 -1
  40. data/lib/active_support/gem_version.rb +4 -4
  41. data/lib/active_support/hash_with_indifferent_access.rb +15 -16
  42. data/lib/active_support/i18n_railtie.rb +19 -11
  43. data/lib/active_support/inflector/inflections.rb +2 -1
  44. data/lib/active_support/inflector/methods.rb +3 -3
  45. data/lib/active_support/isolated_execution_state.rb +4 -4
  46. data/lib/active_support/json/decoding.rb +3 -1
  47. data/lib/active_support/json/encoding.rb +2 -2
  48. data/lib/active_support/logger_thread_safe_level.rb +6 -3
  49. data/lib/active_support/message_pack/extensions.rb +1 -1
  50. data/lib/active_support/notifications/fanout.rb +0 -1
  51. data/lib/active_support/notifications/instrumenter.rb +1 -1
  52. data/lib/active_support/number_helper.rb +22 -0
  53. data/lib/active_support/railtie.rb +6 -0
  54. data/lib/active_support/tagged_logging.rb +5 -0
  55. data/lib/active_support/test_case.rb +6 -0
  56. data/lib/active_support/testing/assertions.rb +84 -21
  57. data/lib/active_support/testing/autorun.rb +5 -0
  58. data/lib/active_support/testing/isolation.rb +0 -2
  59. data/lib/active_support/testing/parallelization/worker.rb +5 -1
  60. data/lib/active_support/testing/time_helpers.rb +2 -1
  61. data/lib/active_support/time_with_zone.rb +22 -13
  62. data/lib/active_support/values/time_zone.rb +11 -9
  63. data/lib/active_support.rb +10 -3
  64. metadata +21 -12
  65. data/lib/active_support/proxy_object.rb +0 -20
@@ -19,7 +19,7 @@ module ActiveSupport
19
19
  #
20
20
  # assert_not foo, 'foo should be false'
21
21
  def assert_not(object, message = nil)
22
- message ||= "Expected #{mu_pp(object)} to be nil or false"
22
+ message ||= -> { "Expected #{mu_pp(object)} to be nil or false" }
23
23
  assert !object, message
24
24
  end
25
25
 
@@ -118,9 +118,14 @@ module ActiveSupport
118
118
 
119
119
  expressions.zip(exps, before) do |(code, diff), exp, before_value|
120
120
  actual = exp.call
121
- error = "#{code.inspect} didn't change by #{diff}, but by #{actual - before_value}"
122
- error = "#{message}.\n#{error}" if message
123
- assert_equal(before_value + diff, actual, error)
121
+ rich_message = -> do
122
+ code_string = code.respond_to?(:call) ? _callable_to_source_string(code) : code
123
+ error = "`#{code_string}` didn't change by #{diff}, but by #{actual - before_value}."
124
+ error = "#{error}\n#{diff before_value + diff, actual}" if Minitest::VERSION > "6"
125
+ error = "#{message}.\n#{error}" if message
126
+ error
127
+ end
128
+ assert_equal(before_value + diff, actual, rich_message)
124
129
  end
125
130
 
126
131
  retval
@@ -195,22 +200,32 @@ module ActiveSupport
195
200
  retval = _assert_nothing_raised_or_warn("assert_changes", &block)
196
201
 
197
202
  unless from == UNTRACKED
198
- error = "Expected change from #{from.inspect}, got #{before.inspect}"
199
- error = "#{message}.\n#{error}" if message
200
- assert from === before, error
203
+ rich_message = -> do
204
+ error = "Expected change from #{from.inspect}, got #{before.inspect}"
205
+ error = "#{message}.\n#{error}" if message
206
+ error
207
+ end
208
+ assert from === before, rich_message
201
209
  end
202
210
 
203
211
  after = exp.call
204
212
 
205
- error = "#{expression.inspect} didn't change"
206
- error = "#{error}. It was already #{to.inspect}" if before == to
207
- error = "#{message}.\n#{error}" if message
208
- refute_equal before, after, error
213
+ rich_message = -> do
214
+ code_string = expression.respond_to?(:call) ? _callable_to_source_string(expression) : expression
215
+ error = "`#{code_string}` didn't change"
216
+ error = "#{error}. It was already #{to.inspect}." if before == to
217
+ error = "#{message}.\n#{error}" if message
218
+ error
219
+ end
220
+ refute_equal before, after, rich_message
209
221
 
210
222
  unless to == UNTRACKED
211
- error = "Expected change to #{to.inspect}, got #{after.inspect}\n"
212
- error = "#{message}.\n#{error}" if message
213
- assert to === after, error
223
+ rich_message = -> do
224
+ error = "Expected change to #{to.inspect}, got #{after.inspect}\n"
225
+ error = "#{message}.\n#{error}" if message
226
+ error
227
+ end
228
+ assert to === after, rich_message
214
229
  end
215
230
 
216
231
  retval
@@ -242,20 +257,28 @@ module ActiveSupport
242
257
  retval = _assert_nothing_raised_or_warn("assert_no_changes", &block)
243
258
 
244
259
  unless from == UNTRACKED
245
- error = "Expected initial value of #{from.inspect}, got #{before.inspect}"
246
- error = "#{message}.\n#{error}" if message
247
- assert from === before, error
260
+ rich_message = -> do
261
+ error = "Expected initial value of #{from.inspect}, got #{before.inspect}"
262
+ error = "#{message}.\n#{error}" if message
263
+ error
264
+ end
265
+ assert from === before, rich_message
248
266
  end
249
267
 
250
268
  after = exp.call
251
269
 
252
- error = "#{expression.inspect} changed"
253
- error = "#{message}.\n#{error}" if message
270
+ rich_message = -> do
271
+ code_string = expression.respond_to?(:call) ? _callable_to_source_string(expression) : expression
272
+ error = "`#{code_string}` changed."
273
+ error = "#{message}.\n#{error}" if message
274
+ error = "#{error}\n#{diff before, after}" if Minitest::VERSION > "6"
275
+ error
276
+ end
254
277
 
255
278
  if before.nil?
256
- assert_nil after, error
279
+ assert_nil after, rich_message
257
280
  else
258
- assert_equal before, after, error
281
+ assert_equal before, after, rich_message
259
282
  end
260
283
 
261
284
  retval
@@ -276,6 +299,46 @@ module ActiveSupport
276
299
 
277
300
  raise
278
301
  end
302
+
303
+ def _callable_to_source_string(callable)
304
+ if defined?(RubyVM::InstructionSequence) && callable.is_a?(Proc)
305
+ iseq = RubyVM::InstructionSequence.of(callable)
306
+ source =
307
+ if iseq.script_lines
308
+ iseq.script_lines.join("\n")
309
+ elsif File.readable?(iseq.absolute_path)
310
+ File.read(iseq.absolute_path)
311
+ end
312
+
313
+ return callable unless source
314
+
315
+ location = iseq.to_a[4][:code_location]
316
+ return callable unless location
317
+
318
+ lines = source.lines[(location[0] - 1)..(location[2] - 1)]
319
+ lines[-1] = lines[-1].byteslice(...location[3])
320
+ lines[0] = lines[0].byteslice(location[1]...)
321
+ source = lines.join.strip
322
+
323
+ # Strip stabby lambda from Ruby 4.1+
324
+ source = source.sub(/^->\s*/, "")
325
+
326
+ # We ignore procs defined with do/end as they are likely multi-line anyway.
327
+ if source.start_with?("{")
328
+ source.delete_suffix!("}")
329
+ source.delete_prefix!("{")
330
+ source.strip!
331
+ # It won't read nice if the callable contains multiple
332
+ # lines, and it should be a rare occurrence anyway.
333
+ # Same if it takes arguments.
334
+ if !source.include?("\n") && !source.start_with?("|")
335
+ return source
336
+ end
337
+ end
338
+ end
339
+
340
+ callable
341
+ end
279
342
  end
280
343
  end
281
344
  end
@@ -2,4 +2,9 @@
2
2
 
3
3
  require "minitest"
4
4
 
5
+ # This respond_to check handles tests running sub-processes in an
6
+ # unbundled environment, which triggers MT5 usage. This conditional may
7
+ # be removable after the version bump, though it currently safeguards
8
+ # against issues in environments with multiple versions installed.
9
+ Minitest.load :rails if Minitest.respond_to? :load
5
10
  Minitest.autorun
@@ -5,8 +5,6 @@ require "active_support/testing/parallelize_executor"
5
5
  module ActiveSupport
6
6
  module Testing
7
7
  module Isolation
8
- require "thread"
9
-
10
8
  SubprocessCrashed = Class.new(StandardError)
11
9
 
12
10
  def self.included(klass) # :nodoc:
@@ -47,7 +47,11 @@ module ActiveSupport
47
47
  set_process_title("#{klass}##{method}")
48
48
 
49
49
  result = klass.with_info_handler reporter do
50
- Minitest.run_one_method(klass, method)
50
+ if Minitest.respond_to? :run_one_method
51
+ Minitest.run_one_method klass, method
52
+ else
53
+ klass.new(method).run
54
+ end
51
55
  end
52
56
 
53
57
  safe_record(reporter, result)
@@ -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
@@ -136,9 +136,9 @@ module ActiveSupport
136
136
 
137
137
  # Returns a string of the object's date, time, zone, and offset from UTC.
138
138
  #
139
- # Time.zone.now.inspect # => "Thu, 04 Dec 2014 11:00:25.624541392 EST -05:00"
139
+ # Time.zone.now.inspect # => "2024-11-13 07:00:10.528054960 UTC +00:00"
140
140
  def inspect
141
- "#{time.strftime('%a, %d %b %Y %H:%M:%S.%9N')} #{zone} #{formatted_offset}"
141
+ "#{time.strftime('%F %H:%M:%S.%9N')} #{zone} #{formatted_offset}"
142
142
  end
143
143
 
144
144
  # Returns a string of the object's date and time in the ISO 8601 standard
@@ -157,11 +157,11 @@ module ActiveSupport
157
157
  # to +false+.
158
158
  #
159
159
  # # With ActiveSupport::JSON::Encoding.use_standard_json_time_format = true
160
- # Time.utc(2005,2,1,15,15,10).in_time_zone("Hawaii").to_json
160
+ # Time.utc(2005,2,1,15,15,10).in_time_zone("Hawaii").as_json
161
161
  # # => "2005-02-01T05:15:10.000-10:00"
162
162
  #
163
163
  # # With ActiveSupport::JSON::Encoding.use_standard_json_time_format = false
164
- # Time.utc(2005,2,1,15,15,10).in_time_zone("Hawaii").to_json
164
+ # Time.utc(2005,2,1,15,15,10).in_time_zone("Hawaii").as_json
165
165
  # # => "2005/02/01 05:15:10 -1000"
166
166
  def as_json(options = nil)
167
167
  if ActiveSupport::JSON::Encoding.use_standard_json_time_format
@@ -215,8 +215,7 @@ module ActiveSupport
215
215
  elsif formatter = ::Time::DATE_FORMATS[format]
216
216
  formatter.respond_to?(:call) ? formatter.call(self).to_s : strftime(formatter)
217
217
  else
218
- # Change to to_s when deprecation is gone.
219
- "#{time.strftime("%Y-%m-%d %H:%M:%S")} #{formatted_offset(false, 'UTC')}"
218
+ to_s
220
219
  end
221
220
  end
222
221
  alias_method :to_formatted_s, :to_fs
@@ -300,7 +299,16 @@ module ActiveSupport
300
299
  if duration_of_variable_length?(other)
301
300
  method_missing(:+, other)
302
301
  else
303
- result = utc.acts_like?(:date) ? utc.since(other) : utc + other rescue utc.since(other)
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
304
312
  result.in_time_zone(time_zone)
305
313
  end
306
314
  end
@@ -336,7 +344,7 @@ module ActiveSupport
336
344
  elsif duration_of_variable_length?(other)
337
345
  method_missing(:-, other)
338
346
  else
339
- result = utc.acts_like?(:date) ? utc.ago(other) : utc - other rescue utc.ago(other)
347
+ result = utc - other
340
348
  result.in_time_zone(time_zone)
341
349
  end
342
350
  end
@@ -479,11 +487,13 @@ module ActiveSupport
479
487
  @to_datetime ||= utc.to_datetime.new_offset(Rational(utc_offset, 86_400))
480
488
  end
481
489
 
482
- # Returns an instance of +Time+, either with the same UTC offset
483
- # as +self+ or in the local system timezone depending on the setting
484
- # of +ActiveSupport.to_time_preserves_timezone+.
490
+ # Returns an instance of +Time+, either with the same timezone as +self+,
491
+ # with the same UTC offset as +self+ or in the local system timezone
492
+ # depending on the setting of +ActiveSupport.to_time_preserves_timezone+.
485
493
  def to_time
486
- if preserve_timezone
494
+ if preserve_timezone == :zone
495
+ @to_time_with_timezone ||= getlocal(time_zone)
496
+ elsif preserve_timezone
487
497
  @to_time_with_instance_offset ||= getlocal(utc_offset)
488
498
  else
489
499
  @to_time_with_system_offset ||= getlocal
@@ -535,7 +545,6 @@ module ActiveSupport
535
545
  # Ensure proxy class responds to all methods that underlying time instance
536
546
  # responds to.
537
547
  def respond_to_missing?(sym, include_priv)
538
- return false if sym.to_sym == :acts_like_date?
539
548
  time.respond_to?(sym, include_priv)
540
549
  end
541
550
 
@@ -208,9 +208,7 @@ module ActiveSupport
208
208
  TZInfo::Timezone.get(MAPPING[name] || name)
209
209
  end
210
210
 
211
- # :stopdoc:
212
- alias_method :create, :new
213
- # :startdoc:
211
+ alias_method :create, :new # :nodoc:
214
212
 
215
213
  # Returns a TimeZone instance with the given name, or +nil+ if no
216
214
  # such TimeZone instance exists. (This exists to support the use of
@@ -554,15 +552,11 @@ module ActiveSupport
554
552
  tzinfo.local_to_utc(time, dst)
555
553
  end
556
554
 
557
- # Available so that TimeZone instances respond like +TZInfo::Timezone+
558
- # instances.
559
- def period_for_utc(time)
555
+ def period_for_utc(time) # :nodoc:
560
556
  tzinfo.period_for_utc(time)
561
557
  end
562
558
 
563
- # Available so that TimeZone instances respond like +TZInfo::Timezone+
564
- # instances.
565
- def period_for_local(time, dst = true)
559
+ def period_for_local(time, dst = true) # :nodoc:
566
560
  tzinfo.period_for_local(time, dst) { |periods| periods.last }
567
561
  end
568
562
 
@@ -570,6 +564,14 @@ module ActiveSupport
570
564
  tzinfo.periods_for_local(time)
571
565
  end
572
566
 
567
+ def abbr(time) # :nodoc:
568
+ tzinfo.abbr(time)
569
+ end
570
+
571
+ def dst?(time) # :nodoc:
572
+ tzinfo.dst?(time)
573
+ end
574
+
573
575
  def init_with(coder) # :nodoc:
574
576
  initialize(coder["name"])
575
577
  end
@@ -57,11 +57,12 @@ module ActiveSupport
57
57
 
58
58
  eager_autoload do
59
59
  autoload :BacktraceCleaner
60
- autoload :ProxyObject
60
+ autoload :Benchmark
61
61
  autoload :Benchmarkable
62
62
  autoload :Cache
63
63
  autoload :Callbacks
64
64
  autoload :Configurable
65
+ autoload :ClassAttribute
65
66
  autoload :Deprecation
66
67
  autoload :Delegation
67
68
  autoload :Digest
@@ -115,9 +116,15 @@ module ActiveSupport
115
116
  end
116
117
 
117
118
  def self.to_time_preserves_timezone=(value)
118
- unless value
119
+ if !value
119
120
  ActiveSupport.deprecator.warn(
120
- "Support for the pre-Ruby 2.4 behavior of to_time has been deprecated and will be removed in Rails 8.0."
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`."
121
128
  )
122
129
  end
123
130
 
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: 7.2.3.1
4
+ version: 8.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Heinemeier Hansson
@@ -90,9 +90,6 @@ dependencies:
90
90
  - - ">="
91
91
  - !ruby/object:Gem::Version
92
92
  version: '5.1'
93
- - - "<"
94
- - !ruby/object:Gem::Version
95
- version: '6'
96
93
  type: :runtime
97
94
  prerelease: false
98
95
  version_requirements: !ruby/object:Gem::Requirement
@@ -100,9 +97,6 @@ dependencies:
100
97
  - - ">="
101
98
  - !ruby/object:Gem::Version
102
99
  version: '5.1'
103
- - - "<"
104
- - !ruby/object:Gem::Version
105
- version: '6'
106
100
  - !ruby/object:Gem::Dependency
107
101
  name: base64
108
102
  requirement: !ruby/object:Gem::Requirement
@@ -173,6 +167,20 @@ dependencies:
173
167
  - - ">="
174
168
  - !ruby/object:Gem::Version
175
169
  version: '0.3'
170
+ - !ruby/object:Gem::Dependency
171
+ name: uri
172
+ requirement: !ruby/object:Gem::Requirement
173
+ requirements:
174
+ - - ">="
175
+ - !ruby/object:Gem::Version
176
+ version: 0.13.1
177
+ type: :runtime
178
+ prerelease: false
179
+ version_requirements: !ruby/object:Gem::Requirement
180
+ requirements:
181
+ - - ">="
182
+ - !ruby/object:Gem::Version
183
+ version: 0.13.1
176
184
  - !ruby/object:Gem::Dependency
177
185
  name: benchmark
178
186
  requirement: !ruby/object:Gem::Requirement
@@ -203,6 +211,7 @@ files:
203
211
  - lib/active_support/all.rb
204
212
  - lib/active_support/array_inquirer.rb
205
213
  - lib/active_support/backtrace_cleaner.rb
214
+ - lib/active_support/benchmark.rb
206
215
  - lib/active_support/benchmarkable.rb
207
216
  - lib/active_support/broadcast_logger.rb
208
217
  - lib/active_support/builder.rb
@@ -218,6 +227,7 @@ files:
218
227
  - lib/active_support/cache/strategy/local_cache.rb
219
228
  - lib/active_support/cache/strategy/local_cache_middleware.rb
220
229
  - lib/active_support/callbacks.rb
230
+ - lib/active_support/class_attribute.rb
221
231
  - lib/active_support/code_generator.rb
222
232
  - lib/active_support/concern.rb
223
233
  - lib/active_support/concurrency/load_interlock_aware_monitor.rb
@@ -438,7 +448,6 @@ files:
438
448
  - lib/active_support/ordered_hash.rb
439
449
  - lib/active_support/ordered_options.rb
440
450
  - lib/active_support/parameter_filter.rb
441
- - lib/active_support/proxy_object.rb
442
451
  - lib/active_support/rails.rb
443
452
  - lib/active_support/railtie.rb
444
453
  - lib/active_support/reloader.rb
@@ -485,10 +494,10 @@ licenses:
485
494
  - MIT
486
495
  metadata:
487
496
  bug_tracker_uri: https://github.com/rails/rails/issues
488
- changelog_uri: https://github.com/rails/rails/blob/v7.2.3.1/activesupport/CHANGELOG.md
489
- documentation_uri: https://api.rubyonrails.org/v7.2.3.1/
497
+ changelog_uri: https://github.com/rails/rails/blob/v8.0.5/activesupport/CHANGELOG.md
498
+ documentation_uri: https://api.rubyonrails.org/v8.0.5/
490
499
  mailing_list_uri: https://discuss.rubyonrails.org/c/rubyonrails-talk
491
- source_code_uri: https://github.com/rails/rails/tree/v7.2.3.1/activesupport
500
+ source_code_uri: https://github.com/rails/rails/tree/v8.0.5/activesupport
492
501
  rubygems_mfa_required: 'true'
493
502
  rdoc_options:
494
503
  - "--encoding"
@@ -499,7 +508,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
499
508
  requirements:
500
509
  - - ">="
501
510
  - !ruby/object:Gem::Version
502
- version: 3.1.0
511
+ version: 3.2.0
503
512
  required_rubygems_version: !ruby/object:Gem::Requirement
504
513
  requirements:
505
514
  - - ">="
@@ -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