activesupport 8.0.0.beta1 → 8.0.0.rc2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +43 -0
- data/lib/active_support/core_ext/module/attr_internal.rb +3 -4
- data/lib/active_support/core_ext/object/json.rb +5 -3
- data/lib/active_support/core_ext/string/multibyte.rb +1 -1
- data/lib/active_support/core_ext/thread/backtrace/location.rb +2 -7
- data/lib/active_support/core_ext/time/zones.rb +1 -1
- data/lib/active_support/delegation.rb +0 -2
- data/lib/active_support/dependencies.rb +0 -1
- data/lib/active_support/deprecation/reporting.rb +0 -19
- data/lib/active_support/duration.rb +14 -10
- data/lib/active_support/evented_file_update_checker.rb +0 -1
- data/lib/active_support/gem_version.rb +1 -1
- data/lib/active_support/hash_with_indifferent_access.rb +0 -4
- data/lib/active_support/i18n_railtie.rb +2 -3
- data/lib/active_support/isolated_execution_state.rb +0 -1
- data/lib/active_support/notifications/fanout.rb +0 -1
- data/lib/active_support/testing/assertions.rb +17 -10
- data/lib/active_support/testing/strict_warnings.rb +1 -1
- data/lib/active_support/time_with_zone.rb +1 -1
- data/lib/active_support/values/time_zone.rb +6 -6
- data/lib/active_support.rb +0 -1
- metadata +5 -6
- data/lib/active_support/proxy_object.rb +0 -20
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 309b3f63331379742ec341f945baf1c69c983363557239d775f3399757dfa0da
|
4
|
+
data.tar.gz: fb2e94747889b385ac5746a45da459af1af4117e881ea89e1e6d7d017bea26e3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 73cd2ab3d7fa8a743e28d7f79fde788233f3ca16ed3de1fe270879d1d4b94d839925c4b55d234daa8fdfa2b5b9308547e1a88cff669578b758b35eb1a9a9549d
|
7
|
+
data.tar.gz: 2a485b4d5c0de834e0b30f850f556139800d521525c5653130f05e9313f770ff1066f5464995570fcff00cd5c358d8264d454d48b7f279bd1b12f3259c268487
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,46 @@
|
|
1
|
+
## Rails 8.0.0.rc2 (October 30, 2024) ##
|
2
|
+
|
3
|
+
* No changes.
|
4
|
+
|
5
|
+
|
6
|
+
## Rails 8.0.0.rc1 (October 19, 2024) ##
|
7
|
+
|
8
|
+
* Remove deprecated support to passing an array of strings to `ActiveSupport::Deprecation#warn`.
|
9
|
+
|
10
|
+
*Rafael Mendonça França*
|
11
|
+
|
12
|
+
* Remove deprecated support to setting `attr_internal_naming_format` with a `@` prefix.
|
13
|
+
|
14
|
+
*Rafael Mendonça França*
|
15
|
+
|
16
|
+
* Remove deprecated `ActiveSupport::ProxyObject`.
|
17
|
+
|
18
|
+
*Rafael Mendonça França*
|
19
|
+
|
20
|
+
* Don't execute i18n watcher on boot. It shouldn't catch any file changes initially,
|
21
|
+
and unnecessarily slows down boot of applications with lots of translations.
|
22
|
+
|
23
|
+
*Gannon McGibbon*, *David Stosik*
|
24
|
+
|
25
|
+
* Fix `ActiveSupport::HashWithIndifferentAccess#stringify_keys` to stringify all keys not just symbols.
|
26
|
+
|
27
|
+
Previously:
|
28
|
+
|
29
|
+
```ruby
|
30
|
+
{ 1 => 2 }.with_indifferent_access.stringify_keys[1] # => 2
|
31
|
+
```
|
32
|
+
|
33
|
+
After this change:
|
34
|
+
|
35
|
+
```ruby
|
36
|
+
{ 1 => 2 }.with_indifferent_access.stringify_keys["1"] # => 2
|
37
|
+
```
|
38
|
+
|
39
|
+
This change can be seen as a bug fix, but since it behaved like this for a very long time, we're deciding
|
40
|
+
to not backport the fix and to make the change in a major release.
|
41
|
+
|
42
|
+
*Jean Boussier*
|
43
|
+
|
1
44
|
## Rails 8.0.0.beta1 (September 26, 2024) ##
|
2
45
|
|
3
46
|
* Include options when instrumenting `ActiveSupport::Cache::Store#delete` and `ActiveSupport::Cache::Store#delete_multi`.
|
@@ -24,14 +24,13 @@ class Module
|
|
24
24
|
|
25
25
|
def attr_internal_naming_format=(format)
|
26
26
|
if format.start_with?("@")
|
27
|
-
|
28
|
-
Setting `attr_internal_naming_format` with a `@` prefix is
|
27
|
+
raise ArgumentError, <<~MESSAGE.squish
|
28
|
+
Setting `attr_internal_naming_format` with a `@` prefix is not supported.
|
29
29
|
|
30
30
|
You can simply replace #{format.inspect} by #{format.delete_prefix("@").inspect}.
|
31
31
|
MESSAGE
|
32
|
-
|
33
|
-
format = format.delete_prefix("@")
|
34
32
|
end
|
33
|
+
|
35
34
|
@attr_internal_naming_format = format
|
36
35
|
end
|
37
36
|
end
|
@@ -239,9 +239,11 @@ class Pathname # :nodoc:
|
|
239
239
|
end
|
240
240
|
end
|
241
241
|
|
242
|
-
|
243
|
-
|
244
|
-
|
242
|
+
unless IPAddr.method_defined?(:as_json, false)
|
243
|
+
class IPAddr # :nodoc:
|
244
|
+
def as_json(options = nil)
|
245
|
+
to_s
|
246
|
+
end
|
245
247
|
end
|
246
248
|
end
|
247
249
|
|
@@ -19,7 +19,7 @@ class String
|
|
19
19
|
# >> "lj".upcase
|
20
20
|
# => "LJ"
|
21
21
|
#
|
22
|
-
# == Method chaining
|
22
|
+
# == \Method chaining
|
23
23
|
#
|
24
24
|
# All the methods on the Chars proxy which normally return a string will return a Chars object. This allows
|
25
25
|
# method chaining on the result of any of these methods.
|
@@ -1,12 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
class Thread::Backtrace::Location # :nodoc:
|
4
|
-
|
5
|
-
|
6
|
-
ErrorHighlight.spot(ex, backtrace_location: self)
|
7
|
-
end
|
8
|
-
else
|
9
|
-
def spot(ex)
|
10
|
-
end
|
4
|
+
def spot(ex)
|
5
|
+
ErrorHighlight.spot(ex, backtrace_location: self)
|
11
6
|
end
|
12
7
|
end
|
@@ -20,7 +20,7 @@ class Time
|
|
20
20
|
# This method accepts any of the following:
|
21
21
|
#
|
22
22
|
# * A \Rails TimeZone object.
|
23
|
-
# * An identifier for a \Rails TimeZone object (e.g., "Eastern Time (US & Canada)", <tt>-5.hours</tt>).
|
23
|
+
# * An identifier for a \Rails TimeZone object (e.g., "Eastern \Time (US & Canada)", <tt>-5.hours</tt>).
|
24
24
|
# * A +TZInfo::Timezone+ object.
|
25
25
|
# * An identifier for a +TZInfo::Timezone+ object (e.g., "America/New_York").
|
26
26
|
#
|
@@ -139,7 +139,6 @@ module ActiveSupport
|
|
139
139
|
|
140
140
|
def extract_callstack(callstack)
|
141
141
|
return [] if callstack.empty?
|
142
|
-
return _extract_callstack(callstack) if callstack.first.is_a? String
|
143
142
|
|
144
143
|
offending_line = callstack.find { |frame|
|
145
144
|
# Code generated with `eval` doesn't have an `absolute_path`, e.g. templates.
|
@@ -150,24 +149,6 @@ module ActiveSupport
|
|
150
149
|
[offending_line.path, offending_line.lineno, offending_line.label]
|
151
150
|
end
|
152
151
|
|
153
|
-
def _extract_callstack(callstack)
|
154
|
-
ActiveSupport.deprecator.warn(<<~MESSAGE)
|
155
|
-
Passing the result of `caller` to ActiveSupport::Deprecation#warn is deprecated and will be removed in Rails 8.0.
|
156
|
-
|
157
|
-
Please pass the result of `caller_locations` instead.
|
158
|
-
MESSAGE
|
159
|
-
|
160
|
-
offending_line = callstack.find { |line| !ignored_callstack?(line) } || callstack.first
|
161
|
-
|
162
|
-
if offending_line
|
163
|
-
if md = offending_line.match(/^(.+?):(\d+)(?::in `(.*?)')?/)
|
164
|
-
md.captures
|
165
|
-
else
|
166
|
-
offending_line
|
167
|
-
end
|
168
|
-
end
|
169
|
-
end
|
170
|
-
|
171
152
|
RAILS_GEM_ROOT = File.expand_path("../../../..", __dir__) + "/" # :nodoc:
|
172
153
|
LIB_DIR = RbConfig::CONFIG["libdir"] # :nodoc:
|
173
154
|
|
@@ -491,17 +491,21 @@ module ActiveSupport
|
|
491
491
|
if @parts.empty?
|
492
492
|
time.since(sign * value)
|
493
493
|
else
|
494
|
-
@parts.
|
495
|
-
|
496
|
-
|
497
|
-
|
498
|
-
|
499
|
-
|
500
|
-
|
501
|
-
|
502
|
-
|
503
|
-
|
494
|
+
@parts.each do |type, number|
|
495
|
+
t = time
|
496
|
+
time =
|
497
|
+
if type == :seconds
|
498
|
+
t.since(sign * number)
|
499
|
+
elsif type == :minutes
|
500
|
+
t.since(sign * number * 60)
|
501
|
+
elsif type == :hours
|
502
|
+
t.since(sign * number * 3600)
|
503
|
+
else
|
504
|
+
t.advance(type => sign * number)
|
505
|
+
end
|
504
506
|
end
|
507
|
+
|
508
|
+
time
|
505
509
|
end
|
506
510
|
end
|
507
511
|
|
@@ -313,10 +313,6 @@ module ActiveSupport
|
|
313
313
|
end
|
314
314
|
alias_method :without, :except
|
315
315
|
|
316
|
-
def stringify_keys!; self end
|
317
|
-
def deep_stringify_keys!; self end
|
318
|
-
def stringify_keys; dup end
|
319
|
-
def deep_stringify_keys; dup end
|
320
316
|
undef :symbolize_keys!
|
321
317
|
undef :deep_symbolize_keys!
|
322
318
|
def symbolize_keys; to_hash.symbolize_keys! end
|
@@ -66,9 +66,9 @@ module I18n
|
|
66
66
|
|
67
67
|
if app.config.reloading_enabled?
|
68
68
|
directories = watched_dirs_with_extensions(reloadable_paths)
|
69
|
-
root_load_paths = I18n.load_path.select { |path| path.start_with?(Rails.root.to_s) }
|
69
|
+
root_load_paths = I18n.load_path.select { |path| path.to_s.start_with?(Rails.root.to_s) }
|
70
70
|
reloader = app.config.file_watcher.new(root_load_paths, directories) do
|
71
|
-
I18n.load_path.delete_if { |
|
71
|
+
I18n.load_path.delete_if { |path| path.to_s.start_with?(Rails.root.to_s) && !File.exist?(path) }
|
72
72
|
I18n.load_path |= reloadable_paths.flat_map(&:existent)
|
73
73
|
end
|
74
74
|
|
@@ -76,7 +76,6 @@ module I18n
|
|
76
76
|
app.reloader.to_run do
|
77
77
|
reloader.execute_if_updated { require_unload_lock! }
|
78
78
|
end
|
79
|
-
reloader.execute
|
80
79
|
end
|
81
80
|
|
82
81
|
@i18n_inited = true
|
@@ -299,17 +299,24 @@ module ActiveSupport
|
|
299
299
|
end
|
300
300
|
|
301
301
|
def _callable_to_source_string(callable)
|
302
|
-
if defined?(RubyVM::
|
303
|
-
|
304
|
-
|
305
|
-
|
306
|
-
|
307
|
-
|
308
|
-
|
309
|
-
|
302
|
+
if defined?(RubyVM::InstructionSequence) && callable.is_a?(Proc)
|
303
|
+
iseq = RubyVM::InstructionSequence.of(callable)
|
304
|
+
source =
|
305
|
+
if iseq.script_lines
|
306
|
+
iseq.script_lines.join("\n")
|
307
|
+
elsif File.readable?(iseq.absolute_path)
|
308
|
+
File.read(iseq.absolute_path)
|
309
|
+
end
|
310
|
+
|
311
|
+
return callable unless source
|
312
|
+
|
313
|
+
location = iseq.to_a[4][:code_location]
|
314
|
+
return callable unless location
|
310
315
|
|
311
|
-
|
312
|
-
|
316
|
+
lines = source.lines[(location[0] - 1)..(location[2] - 1)]
|
317
|
+
lines[-1] = lines[-1].byteslice(...location[3])
|
318
|
+
lines[0] = lines[0].byteslice(location[1]...)
|
319
|
+
source = lines.join.strip
|
313
320
|
|
314
321
|
# We ignore procs defined with do/end as they are likely multi-line anyway.
|
315
322
|
if source.start_with?("{")
|
@@ -16,7 +16,7 @@ module ActiveSupport
|
|
16
16
|
/Failed to validate the schema cache because/,
|
17
17
|
|
18
18
|
# TODO: We need to decide what to do with this.
|
19
|
-
/Status code :unprocessable_entity is deprecated
|
19
|
+
/Status code :unprocessable_entity is deprecated/,
|
20
20
|
)
|
21
21
|
|
22
22
|
SUPPRESSED_WARNINGS = Regexp.union(
|
@@ -85,7 +85,7 @@ module ActiveSupport
|
|
85
85
|
end
|
86
86
|
alias_method :getlocal, :localtime
|
87
87
|
|
88
|
-
# Returns true if the current time is within Daylight Savings Time for the
|
88
|
+
# Returns true if the current time is within Daylight Savings \Time for the
|
89
89
|
# specified time zone.
|
90
90
|
#
|
91
91
|
# Time.zone = 'Eastern Time (US & Canada)' # => 'Eastern Time (US & Canada)'
|
@@ -12,7 +12,7 @@ module ActiveSupport
|
|
12
12
|
# * Limit the set of zones provided by TZInfo to a meaningful subset of 134
|
13
13
|
# zones.
|
14
14
|
# * Retrieve and display zones with a friendlier name
|
15
|
-
# (e.g., "Eastern Time (US & Canada)" instead of "America/New_York").
|
15
|
+
# (e.g., "Eastern \Time (US & Canada)" instead of "America/New_York").
|
16
16
|
# * Lazily load +TZInfo::Timezone+ instances only when they're needed.
|
17
17
|
# * Create ActiveSupport::TimeWithZone instances via TimeZone's +local+,
|
18
18
|
# +parse+, +at+, and +now+ methods.
|
@@ -355,7 +355,7 @@ module ActiveSupport
|
|
355
355
|
"(GMT#{formatted_offset}) #{name}"
|
356
356
|
end
|
357
357
|
|
358
|
-
# Method for creating new ActiveSupport::TimeWithZone instance in time zone
|
358
|
+
# \Method for creating new ActiveSupport::TimeWithZone instance in time zone
|
359
359
|
# of +self+ from given values.
|
360
360
|
#
|
361
361
|
# Time.zone = 'Hawaii' # => "Hawaii"
|
@@ -365,7 +365,7 @@ module ActiveSupport
|
|
365
365
|
ActiveSupport::TimeWithZone.new(nil, self, time)
|
366
366
|
end
|
367
367
|
|
368
|
-
# Method for creating new ActiveSupport::TimeWithZone instance in time zone
|
368
|
+
# \Method for creating new ActiveSupport::TimeWithZone instance in time zone
|
369
369
|
# of +self+ from number of seconds since the Unix epoch.
|
370
370
|
#
|
371
371
|
# Time.zone = 'Hawaii' # => "Hawaii"
|
@@ -380,7 +380,7 @@ module ActiveSupport
|
|
380
380
|
Time.at(*args).utc.in_time_zone(self)
|
381
381
|
end
|
382
382
|
|
383
|
-
# Method for creating new ActiveSupport::TimeWithZone instance in time zone
|
383
|
+
# \Method for creating new ActiveSupport::TimeWithZone instance in time zone
|
384
384
|
# of +self+ from an ISO 8601 string.
|
385
385
|
#
|
386
386
|
# Time.zone = 'Hawaii' # => "Hawaii"
|
@@ -432,7 +432,7 @@ module ActiveSupport
|
|
432
432
|
raise ArgumentError, "invalid date"
|
433
433
|
end
|
434
434
|
|
435
|
-
# Method for creating new ActiveSupport::TimeWithZone instance in time zone
|
435
|
+
# \Method for creating new ActiveSupport::TimeWithZone instance in time zone
|
436
436
|
# of +self+ from parsed string.
|
437
437
|
#
|
438
438
|
# Time.zone = 'Hawaii' # => "Hawaii"
|
@@ -454,7 +454,7 @@ module ActiveSupport
|
|
454
454
|
parts_to_time(Date._parse(str, false), now)
|
455
455
|
end
|
456
456
|
|
457
|
-
# Method for creating new ActiveSupport::TimeWithZone instance in time zone
|
457
|
+
# \Method for creating new ActiveSupport::TimeWithZone instance in time zone
|
458
458
|
# of +self+ from an RFC 3339 string.
|
459
459
|
#
|
460
460
|
# Time.zone = 'Hawaii' # => "Hawaii"
|
data/lib/active_support.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
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.0.0.rc2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- David Heinemeier Hansson
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-
|
11
|
+
date: 2024-10-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: i18n
|
@@ -448,7 +448,6 @@ files:
|
|
448
448
|
- lib/active_support/ordered_hash.rb
|
449
449
|
- lib/active_support/ordered_options.rb
|
450
450
|
- lib/active_support/parameter_filter.rb
|
451
|
-
- lib/active_support/proxy_object.rb
|
452
451
|
- lib/active_support/rails.rb
|
453
452
|
- lib/active_support/railtie.rb
|
454
453
|
- lib/active_support/reloader.rb
|
@@ -496,10 +495,10 @@ licenses:
|
|
496
495
|
- MIT
|
497
496
|
metadata:
|
498
497
|
bug_tracker_uri: https://github.com/rails/rails/issues
|
499
|
-
changelog_uri: https://github.com/rails/rails/blob/v8.0.0.
|
500
|
-
documentation_uri: https://api.rubyonrails.org/v8.0.0.
|
498
|
+
changelog_uri: https://github.com/rails/rails/blob/v8.0.0.rc2/activesupport/CHANGELOG.md
|
499
|
+
documentation_uri: https://api.rubyonrails.org/v8.0.0.rc2/
|
501
500
|
mailing_list_uri: https://discuss.rubyonrails.org/c/rubyonrails-talk
|
502
|
-
source_code_uri: https://github.com/rails/rails/tree/v8.0.0.
|
501
|
+
source_code_uri: https://github.com/rails/rails/tree/v8.0.0.rc2/activesupport
|
503
502
|
rubygems_mfa_required: 'true'
|
504
503
|
post_install_message:
|
505
504
|
rdoc_options:
|
@@ -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
|