activesupport 7.0.8.7 → 7.2.3.1
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 +239 -386
- data/MIT-LICENSE +1 -1
- data/README.rdoc +5 -5
- data/lib/active_support/actionable_error.rb +3 -1
- data/lib/active_support/array_inquirer.rb +3 -1
- data/lib/active_support/backtrace_cleaner.rb +39 -7
- data/lib/active_support/benchmarkable.rb +1 -0
- data/lib/active_support/broadcast_logger.rb +238 -0
- data/lib/active_support/builder.rb +1 -1
- data/lib/active_support/cache/coder.rb +153 -0
- data/lib/active_support/cache/entry.rb +134 -0
- data/lib/active_support/cache/file_store.rb +51 -19
- data/lib/active_support/cache/mem_cache_store.rb +98 -134
- data/lib/active_support/cache/memory_store.rb +85 -30
- data/lib/active_support/cache/null_store.rb +8 -2
- data/lib/active_support/cache/redis_cache_store.rb +166 -153
- data/lib/active_support/cache/serializer_with_fallback.rb +152 -0
- data/lib/active_support/cache/strategy/local_cache.rb +64 -13
- data/lib/active_support/cache.rb +364 -292
- data/lib/active_support/callbacks.rb +121 -136
- data/lib/active_support/code_generator.rb +15 -10
- data/lib/active_support/concern.rb +4 -2
- data/lib/active_support/concurrency/load_interlock_aware_monitor.rb +42 -3
- data/lib/active_support/concurrency/null_lock.rb +13 -0
- data/lib/active_support/configurable.rb +10 -0
- data/lib/active_support/core_ext/array/conversions.rb +1 -2
- data/lib/active_support/core_ext/array.rb +0 -1
- data/lib/active_support/core_ext/benchmark.rb +1 -0
- data/lib/active_support/core_ext/class/attribute.rb +2 -2
- data/lib/active_support/core_ext/class/subclasses.rb +17 -34
- data/lib/active_support/core_ext/date/blank.rb +4 -0
- data/lib/active_support/core_ext/date/conversions.rb +1 -2
- data/lib/active_support/core_ext/date.rb +0 -1
- data/lib/active_support/core_ext/date_and_time/calculations.rb +10 -0
- data/lib/active_support/core_ext/date_and_time/compatibility.rb +28 -1
- data/lib/active_support/core_ext/date_time/blank.rb +4 -0
- data/lib/active_support/core_ext/date_time/conversions.rb +6 -4
- data/lib/active_support/core_ext/date_time.rb +0 -1
- data/lib/active_support/core_ext/digest/uuid.rb +7 -10
- data/lib/active_support/core_ext/enumerable.rb +20 -80
- data/lib/active_support/core_ext/erb/util.rb +201 -0
- data/lib/active_support/core_ext/hash/conversions.rb +1 -1
- data/lib/active_support/core_ext/hash/deep_merge.rb +22 -14
- data/lib/active_support/core_ext/hash/keys.rb +4 -4
- data/lib/active_support/core_ext/module/attr_internal.rb +17 -6
- data/lib/active_support/core_ext/module/attribute_accessors.rb +6 -0
- data/lib/active_support/core_ext/module/attribute_accessors_per_thread.rb +34 -16
- data/lib/active_support/core_ext/module/concerning.rb +6 -6
- data/lib/active_support/core_ext/module/delegation.rb +20 -119
- data/lib/active_support/core_ext/module/deprecation.rb +12 -12
- data/lib/active_support/core_ext/module/introspection.rb +3 -1
- data/lib/active_support/core_ext/numeric/bytes.rb +9 -0
- data/lib/active_support/core_ext/numeric/conversions.rb +5 -3
- data/lib/active_support/core_ext/numeric.rb +0 -1
- data/lib/active_support/core_ext/object/blank.rb +45 -1
- data/lib/active_support/core_ext/object/deep_dup.rb +16 -0
- data/lib/active_support/core_ext/object/inclusion.rb +13 -5
- data/lib/active_support/core_ext/object/instance_variables.rb +4 -2
- data/lib/active_support/core_ext/object/json.rb +17 -7
- data/lib/active_support/core_ext/object/try.rb +2 -2
- data/lib/active_support/core_ext/object/with.rb +46 -0
- data/lib/active_support/core_ext/object/with_options.rb +4 -4
- data/lib/active_support/core_ext/object.rb +1 -0
- data/lib/active_support/core_ext/pathname/blank.rb +20 -0
- data/lib/active_support/core_ext/pathname/existence.rb +2 -0
- data/lib/active_support/core_ext/pathname.rb +1 -0
- data/lib/active_support/core_ext/range/conversions.rb +28 -7
- data/lib/active_support/core_ext/range/overlap.rb +40 -0
- data/lib/active_support/core_ext/range/sole.rb +17 -0
- data/lib/active_support/core_ext/range.rb +2 -2
- data/lib/active_support/core_ext/securerandom.rb +24 -12
- data/lib/active_support/core_ext/string/conversions.rb +1 -1
- data/lib/active_support/core_ext/string/filters.rb +24 -18
- data/lib/active_support/core_ext/string/indent.rb +1 -1
- data/lib/active_support/core_ext/string/inflections.rb +16 -5
- data/lib/active_support/core_ext/string/multibyte.rb +3 -3
- data/lib/active_support/core_ext/string/output_safety.rb +37 -178
- data/lib/active_support/core_ext/thread/backtrace/location.rb +12 -0
- data/lib/active_support/core_ext/time/calculations.rb +36 -30
- data/lib/active_support/core_ext/time/compatibility.rb +24 -0
- data/lib/active_support/core_ext/time/conversions.rb +1 -3
- data/lib/active_support/core_ext/time/zones.rb +4 -4
- data/lib/active_support/core_ext/time.rb +0 -1
- data/lib/active_support/core_ext.rb +0 -1
- data/lib/active_support/current_attributes.rb +60 -46
- data/lib/active_support/deep_mergeable.rb +53 -0
- data/lib/active_support/delegation.rb +202 -0
- data/lib/active_support/dependencies/autoload.rb +9 -16
- data/lib/active_support/deprecation/behaviors.rb +65 -42
- data/lib/active_support/deprecation/constant_accessor.rb +47 -25
- data/lib/active_support/deprecation/deprecators.rb +104 -0
- data/lib/active_support/deprecation/disallowed.rb +3 -5
- data/lib/active_support/deprecation/method_wrappers.rb +6 -23
- data/lib/active_support/deprecation/proxy_wrappers.rb +34 -22
- data/lib/active_support/deprecation/reporting.rb +49 -27
- data/lib/active_support/deprecation.rb +39 -9
- data/lib/active_support/deprecator.rb +7 -0
- data/lib/active_support/descendants_tracker.rb +66 -172
- data/lib/active_support/duration/iso8601_parser.rb +2 -2
- data/lib/active_support/duration/iso8601_serializer.rb +1 -4
- data/lib/active_support/duration.rb +13 -7
- data/lib/active_support/encrypted_configuration.rb +30 -9
- data/lib/active_support/encrypted_file.rb +9 -4
- data/lib/active_support/environment_inquirer.rb +22 -2
- data/lib/active_support/error_reporter/test_helper.rb +15 -0
- data/lib/active_support/error_reporter.rb +163 -36
- data/lib/active_support/evented_file_update_checker.rb +0 -1
- data/lib/active_support/execution_wrapper.rb +5 -6
- data/lib/active_support/file_update_checker.rb +6 -4
- data/lib/active_support/fork_tracker.rb +4 -32
- data/lib/active_support/gem_version.rb +4 -4
- data/lib/active_support/gzip.rb +2 -0
- data/lib/active_support/hash_with_indifferent_access.rb +50 -30
- data/lib/active_support/html_safe_translation.rb +19 -6
- data/lib/active_support/i18n.rb +1 -1
- data/lib/active_support/i18n_railtie.rb +20 -13
- data/lib/active_support/inflector/inflections.rb +2 -0
- data/lib/active_support/inflector/methods.rb +23 -11
- data/lib/active_support/inflector/transliterate.rb +3 -1
- data/lib/active_support/isolated_execution_state.rb +26 -22
- data/lib/active_support/json/decoding.rb +3 -2
- data/lib/active_support/json/encoding.rb +48 -48
- data/lib/active_support/key_generator.rb +9 -1
- data/lib/active_support/lazy_load_hooks.rb +7 -5
- data/lib/active_support/locale/en.yml +2 -0
- data/lib/active_support/log_subscriber.rb +74 -34
- data/lib/active_support/logger.rb +22 -60
- data/lib/active_support/logger_thread_safe_level.rb +10 -32
- data/lib/active_support/message_encryptor.rb +197 -53
- data/lib/active_support/message_encryptors.rb +141 -0
- data/lib/active_support/message_pack/cache_serializer.rb +23 -0
- data/lib/active_support/message_pack/extensions.rb +305 -0
- data/lib/active_support/message_pack/serializer.rb +63 -0
- data/lib/active_support/message_pack.rb +50 -0
- data/lib/active_support/message_verifier.rb +229 -89
- data/lib/active_support/message_verifiers.rb +137 -0
- data/lib/active_support/messages/codec.rb +65 -0
- data/lib/active_support/messages/metadata.rb +111 -45
- data/lib/active_support/messages/rotation_coordinator.rb +93 -0
- data/lib/active_support/messages/rotator.rb +38 -31
- data/lib/active_support/messages/serializer_with_fallback.rb +158 -0
- data/lib/active_support/multibyte/chars.rb +8 -3
- data/lib/active_support/multibyte/unicode.rb +9 -37
- data/lib/active_support/notifications/fanout.rb +248 -87
- data/lib/active_support/notifications/instrumenter.rb +93 -25
- data/lib/active_support/notifications.rb +29 -28
- data/lib/active_support/number_helper/number_converter.rb +16 -7
- data/lib/active_support/number_helper/number_to_currency_converter.rb +6 -6
- data/lib/active_support/number_helper/number_to_delimited_converter.rb +17 -2
- data/lib/active_support/number_helper/number_to_human_size_converter.rb +3 -3
- data/lib/active_support/number_helper/number_to_phone_converter.rb +1 -0
- data/lib/active_support/number_helper.rb +379 -318
- data/lib/active_support/option_merger.rb +2 -2
- data/lib/active_support/ordered_hash.rb +3 -3
- data/lib/active_support/ordered_options.rb +67 -15
- data/lib/active_support/parameter_filter.rb +84 -69
- data/lib/active_support/proxy_object.rb +8 -3
- data/lib/active_support/railtie.rb +25 -20
- data/lib/active_support/reloader.rb +12 -4
- data/lib/active_support/rescuable.rb +2 -0
- data/lib/active_support/secure_compare_rotator.rb +16 -9
- data/lib/active_support/string_inquirer.rb +4 -2
- data/lib/active_support/subscriber.rb +10 -27
- data/lib/active_support/syntax_error_proxy.rb +60 -0
- data/lib/active_support/tagged_logging.rb +64 -25
- data/lib/active_support/test_case.rb +156 -7
- data/lib/active_support/testing/assertions.rb +28 -12
- data/lib/active_support/testing/autorun.rb +0 -2
- data/lib/active_support/testing/constant_stubbing.rb +54 -0
- data/lib/active_support/testing/deprecation.rb +20 -27
- data/lib/active_support/testing/error_reporter_assertions.rb +107 -0
- data/lib/active_support/testing/isolation.rb +21 -9
- data/lib/active_support/testing/method_call_assertions.rb +7 -8
- data/lib/active_support/testing/parallelization/server.rb +18 -2
- data/lib/active_support/testing/parallelization/worker.rb +2 -2
- data/lib/active_support/testing/parallelization.rb +12 -1
- data/lib/active_support/testing/parallelize_executor.rb +8 -3
- data/lib/active_support/testing/setup_and_teardown.rb +2 -0
- data/lib/active_support/testing/stream.rb +1 -1
- data/lib/active_support/testing/tests_without_assertions.rb +19 -0
- data/lib/active_support/testing/time_helpers.rb +38 -16
- data/lib/active_support/time_with_zone.rb +12 -18
- data/lib/active_support/values/time_zone.rb +25 -14
- data/lib/active_support/version.rb +1 -1
- data/lib/active_support/xml_mini/jdom.rb +3 -10
- data/lib/active_support/xml_mini/nokogiri.rb +1 -1
- data/lib/active_support/xml_mini/nokogirisax.rb +1 -1
- data/lib/active_support/xml_mini/rexml.rb +1 -1
- data/lib/active_support/xml_mini.rb +14 -3
- data/lib/active_support.rb +15 -3
- metadata +148 -24
- data/lib/active_support/core_ext/array/deprecated_conversions.rb +0 -25
- data/lib/active_support/core_ext/date/deprecated_conversions.rb +0 -40
- data/lib/active_support/core_ext/date_time/deprecated_conversions.rb +0 -36
- data/lib/active_support/core_ext/numeric/deprecated_conversions.rb +0 -60
- data/lib/active_support/core_ext/range/deprecated_conversions.rb +0 -36
- data/lib/active_support/core_ext/range/include_time_with_zone.rb +0 -5
- data/lib/active_support/core_ext/range/overlaps.rb +0 -10
- data/lib/active_support/core_ext/time/deprecated_conversions.rb +0 -73
- data/lib/active_support/core_ext/uri.rb +0 -5
- data/lib/active_support/deprecation/instance_delegator.rb +0 -38
- data/lib/active_support/per_thread_registry.rb +0 -65
- data/lib/active_support/ruby_features.rb +0 -7
data/CHANGELOG.md
CHANGED
|
@@ -1,600 +1,453 @@
|
|
|
1
|
-
## Rails 7.
|
|
2
|
-
|
|
3
|
-
* No changes.
|
|
1
|
+
## Rails 7.2.3.1 (March 23, 2026) ##
|
|
4
2
|
|
|
3
|
+
* Reject scientific notation in NumberConverter
|
|
5
4
|
|
|
6
|
-
|
|
5
|
+
[CVE-2026-33176]
|
|
7
6
|
|
|
8
|
-
*
|
|
7
|
+
*Jean Boussier*
|
|
9
8
|
|
|
9
|
+
* Fix `SafeBuffer#%` to preserve unsafe status
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
[CVE-2026-33170]
|
|
12
12
|
|
|
13
|
-
*
|
|
13
|
+
*Jean Boussier*
|
|
14
14
|
|
|
15
|
+
* Improve performance of NumberToDelimitedConverter
|
|
15
16
|
|
|
16
|
-
|
|
17
|
+
[CVE-2026-33169]
|
|
17
18
|
|
|
18
|
-
*
|
|
19
|
+
*Jean Boussier*
|
|
19
20
|
|
|
20
21
|
|
|
21
|
-
## Rails 7.
|
|
22
|
+
## Rails 7.2.3 (October 28, 2025) ##
|
|
22
23
|
|
|
23
|
-
*
|
|
24
|
+
* Fix `Enumerable#sole` to return the full tuple instead of just the first element of the tuple.
|
|
24
25
|
|
|
26
|
+
*Olivier Bellone*
|
|
25
27
|
|
|
26
|
-
|
|
28
|
+
* Fix parallel tests hanging when worker processes die abruptly.
|
|
27
29
|
|
|
28
|
-
|
|
30
|
+
Previously, if a worker process was killed (e.g., OOM killed, `kill -9`) during parallel
|
|
31
|
+
test execution, the test suite would hang forever waiting for the dead worker.
|
|
29
32
|
|
|
33
|
+
*Joshua Young*
|
|
30
34
|
|
|
31
|
-
|
|
35
|
+
* `ActiveSupport::FileUpdateChecker` does not depend on `Time.now` to prevent unnecessary reloads with time travel test helpers
|
|
32
36
|
|
|
33
|
-
*
|
|
37
|
+
*Jan Grodowski*
|
|
34
38
|
|
|
39
|
+
* Fix `ActiveSupport::BroadcastLogger` from executing a block argument for each logger (tagged, info, etc.).
|
|
35
40
|
|
|
36
|
-
|
|
41
|
+
*Jared Armstrong*
|
|
37
42
|
|
|
38
|
-
* Fix `
|
|
39
|
-
disable it are set.
|
|
43
|
+
* Fix `ActiveSupport::HashWithIndifferentAccess#transform_keys!` removing defaults.
|
|
40
44
|
|
|
41
45
|
*Hartley McGuire*
|
|
42
46
|
|
|
43
|
-
* Fix
|
|
44
|
-
|
|
45
|
-
Fixes [#48938](https://github.com/rails/rails/issues/48938).
|
|
46
|
-
|
|
47
|
-
*Jonathan del Strother*
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
## Rails 7.0.7.2 (August 22, 2023) ##
|
|
51
|
-
|
|
52
|
-
* No changes.
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
## Rails 7.0.7.1 (August 22, 2023) ##
|
|
56
|
-
|
|
57
|
-
* Use a temporary file for storing unencrypted files while editing
|
|
58
|
-
|
|
59
|
-
[CVE-2023-38037]
|
|
47
|
+
* Fix `ActiveSupport::HashWithIndifferentAccess#tranform_keys!` to handle collisions.
|
|
60
48
|
|
|
49
|
+
If the transformation would result in a key equal to another not yet transformed one,
|
|
50
|
+
it would result in keys being lost.
|
|
61
51
|
|
|
62
|
-
|
|
52
|
+
Before:
|
|
63
53
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
* Fix `to_s` with no arguments not respecting custom `:default` formats
|
|
69
|
-
|
|
70
|
-
*Hartley McGuire*
|
|
54
|
+
```ruby
|
|
55
|
+
>> {a: 1, b: 2}.with_indifferent_access.transform_keys!(&:succ)
|
|
56
|
+
=> {"c" => 1}
|
|
57
|
+
```
|
|
71
58
|
|
|
72
|
-
|
|
59
|
+
After:
|
|
73
60
|
|
|
74
|
-
|
|
61
|
+
```ruby
|
|
62
|
+
>> {a: 1, b: 2}.with_indifferent_access.transform_keys!(&:succ)
|
|
63
|
+
=> {"c" => 1, "d" => 2}
|
|
64
|
+
```
|
|
75
65
|
|
|
76
|
-
*
|
|
66
|
+
*Jason T Johnson*, *Jean Boussier*
|
|
77
67
|
|
|
78
|
-
|
|
68
|
+
* Fix `ActiveSupport::Cache::MemCacheStore#read_multi` to handle network errors.
|
|
79
69
|
|
|
80
|
-
|
|
81
|
-
compatible version of the Listen gem
|
|
70
|
+
This method specifically wasn't handling network errors like other codepaths.
|
|
82
71
|
|
|
83
|
-
*
|
|
72
|
+
*Alessandro Dal Grande*
|
|
84
73
|
|
|
74
|
+
* Fix Active Support Cache `fetch_multi` when local store is active.
|
|
85
75
|
|
|
86
|
-
|
|
76
|
+
`fetch_multi` now properly yield to the provided block for missing entries
|
|
77
|
+
that have been recorded as such in the local store.
|
|
87
78
|
|
|
88
|
-
*
|
|
89
|
-
methods
|
|
79
|
+
*Jean Boussier*
|
|
90
80
|
|
|
91
|
-
|
|
81
|
+
* Fix execution wrapping to report all exceptions, including `Exception`.
|
|
92
82
|
|
|
93
|
-
|
|
83
|
+
If a more serious error like `SystemStackError` or `NoMemoryError` happens,
|
|
84
|
+
the error reporter should be able to report these kinds of exceptions.
|
|
94
85
|
|
|
95
|
-
*
|
|
86
|
+
*Gannon McGibbon*
|
|
96
87
|
|
|
97
|
-
* Fix
|
|
88
|
+
* Fix `RedisCacheStore` and `MemCacheStore` to also handle connection pool related errors.
|
|
98
89
|
|
|
99
|
-
|
|
90
|
+
These errors are rescued and reported to `Rails.error`.
|
|
100
91
|
|
|
92
|
+
*Jean Boussier*
|
|
101
93
|
|
|
102
|
-
|
|
94
|
+
* Fix `ActiveSupport::Cache#read_multi` to respect version expiry when using local cache.
|
|
103
95
|
|
|
104
|
-
*
|
|
96
|
+
*zzak*
|
|
105
97
|
|
|
98
|
+
* Fix `ActiveSupport::MessageVerifier` and `ActiveSupport::MessageEncryptor` configuration of `on_rotation` callback.
|
|
106
99
|
|
|
107
|
-
|
|
100
|
+
```ruby
|
|
101
|
+
verifier.rotate(old_secret).on_rotation { ... }
|
|
102
|
+
```
|
|
108
103
|
|
|
109
|
-
|
|
104
|
+
Now both work as documented.
|
|
110
105
|
|
|
111
|
-
*
|
|
106
|
+
*Jean Boussier*
|
|
112
107
|
|
|
108
|
+
* Fix `ActiveSupport::MessageVerifier` to always be able to verify both URL-safe and URL-unsafe payloads.
|
|
113
109
|
|
|
114
|
-
|
|
110
|
+
This is to allow transitioning seemlessly from either configuration without immediately invalidating
|
|
111
|
+
all previously generated signed messages.
|
|
115
112
|
|
|
116
|
-
*
|
|
113
|
+
*Jean Boussier*, *Florent Beaurain*, *Ali Sepehri*
|
|
117
114
|
|
|
118
|
-
|
|
115
|
+
* Fix `cache.fetch` to honor the provided expiry when `:race_condition_ttl` is used.
|
|
119
116
|
|
|
117
|
+
```ruby
|
|
118
|
+
cache.fetch("key", expires_in: 1.hour, race_condition_ttl: 5.second) do
|
|
119
|
+
"something"
|
|
120
|
+
end
|
|
121
|
+
```
|
|
120
122
|
|
|
121
|
-
|
|
123
|
+
In the above example, the final cache entry would have a 10 seconds TTL instead
|
|
124
|
+
of the requested 1 hour.
|
|
122
125
|
|
|
123
|
-
*
|
|
126
|
+
*Dhia*
|
|
124
127
|
|
|
128
|
+
* Better handle procs with splat arguments in `set_callback`.
|
|
125
129
|
|
|
126
|
-
|
|
130
|
+
*Radamés Roriz*
|
|
127
131
|
|
|
128
|
-
*
|
|
132
|
+
* Fix `String#mb_chars` to not mutate the receiver.
|
|
129
133
|
|
|
130
|
-
|
|
134
|
+
Previously it would call `force_encoding` on the receiver,
|
|
135
|
+
now it dups the receiver first.
|
|
131
136
|
|
|
137
|
+
*Jean Boussier*
|
|
132
138
|
|
|
133
|
-
|
|
139
|
+
* Improve `ErrorSubscriber` to also mark error causes as reported.
|
|
134
140
|
|
|
135
|
-
|
|
141
|
+
This avoid some cases of errors being reported twice, notably in views because of how
|
|
142
|
+
errors are wrapped in `ActionView::Template::Error`.
|
|
136
143
|
|
|
137
|
-
|
|
138
|
-
process closed the read end, wrote to it, and then terminated (which
|
|
139
|
-
presumably closed the file descriptors on its end). The parent process
|
|
140
|
-
closed the write end, read from it, and returned, never closing the read
|
|
141
|
-
end.
|
|
144
|
+
*Jean Boussier*
|
|
142
145
|
|
|
143
|
-
|
|
144
|
-
cause errors if the limit is reached.
|
|
146
|
+
* Fix `Module#module_parent_name` to return the correct name after the module has been named.
|
|
145
147
|
|
|
146
|
-
|
|
148
|
+
When called on an anonymous module, the return value wouldn't change after the module was given a name
|
|
149
|
+
later by being assigned to a constant.
|
|
147
150
|
|
|
148
|
-
|
|
151
|
+
```ruby
|
|
152
|
+
mod = Module.new
|
|
153
|
+
mod.module_parent_name # => "Object"
|
|
154
|
+
MyModule::Something = mod
|
|
155
|
+
mod.module_parent_name # => "MyModule"
|
|
156
|
+
```
|
|
149
157
|
|
|
150
158
|
*Jean Boussier*
|
|
151
159
|
|
|
152
|
-
* Fix
|
|
153
|
-
|
|
154
|
-
`ActiveSupport::Deprecation.behavior=` was supposed to accept any object
|
|
155
|
-
that responds to `call`, but in fact its internal implementation assumed that
|
|
156
|
-
this object could respond to `arity`, so it was restricted to only `Proc` objects.
|
|
160
|
+
* Fix a bug in `ERB::Util.tokenize` that causes incorrect tokenization when ERB tags are preceeded by multibyte characters.
|
|
157
161
|
|
|
158
|
-
|
|
162
|
+
*Martin Emde*
|
|
159
163
|
|
|
160
|
-
*Ryo Nakamura*
|
|
161
164
|
|
|
162
|
-
|
|
163
|
-
## Rails 7.0.3.1 (July 12, 2022) ##
|
|
165
|
+
## Rails 7.2.2.2 (August 13, 2025) ##
|
|
164
166
|
|
|
165
167
|
* No changes.
|
|
166
168
|
|
|
167
169
|
|
|
168
|
-
## Rails 7.
|
|
170
|
+
## Rails 7.2.2.1 (December 10, 2024) ##
|
|
169
171
|
|
|
170
172
|
* No changes.
|
|
171
173
|
|
|
172
174
|
|
|
173
|
-
## Rails 7.
|
|
174
|
-
|
|
175
|
-
* Fix and add protections for XSS in `ActionView::Helpers` and `ERB::Util`.
|
|
175
|
+
## Rails 7.2.2 (October 30, 2024) ##
|
|
176
176
|
|
|
177
|
-
|
|
178
|
-
in names of tags and names of attributes, following the specification of XML.
|
|
177
|
+
* Include options when instrumenting `ActiveSupport::Cache::Store#delete` and `ActiveSupport::Cache::Store#delete_multi`.
|
|
179
178
|
|
|
180
|
-
|
|
179
|
+
*Adam Renberg Tamm*
|
|
181
180
|
|
|
182
|
-
|
|
181
|
+
* Print test names when running `rails test -v` for parallel tests.
|
|
183
182
|
|
|
184
|
-
*
|
|
183
|
+
*John Hawthorn*, *Abeid Ahmed*
|
|
185
184
|
|
|
186
185
|
|
|
187
|
-
## Rails 7.
|
|
186
|
+
## Rails 7.2.1.2 (October 23, 2024) ##
|
|
188
187
|
|
|
189
|
-
*
|
|
188
|
+
* No changes.
|
|
190
189
|
|
|
191
190
|
|
|
192
|
-
## Rails 7.
|
|
191
|
+
## Rails 7.2.1.1 (October 15, 2024) ##
|
|
193
192
|
|
|
194
193
|
* No changes.
|
|
195
194
|
|
|
196
195
|
|
|
197
|
-
## Rails 7.
|
|
196
|
+
## Rails 7.2.1 (August 22, 2024) ##
|
|
198
197
|
|
|
199
|
-
*
|
|
198
|
+
* No changes.
|
|
200
199
|
|
|
201
|
-
*Stephen Sugden*
|
|
202
200
|
|
|
203
|
-
|
|
201
|
+
## Rails 7.2.0 (August 09, 2024) ##
|
|
204
202
|
|
|
205
|
-
|
|
203
|
+
* Fix `delegate_missing_to allow_nil: true` when called with implict self
|
|
206
204
|
|
|
205
|
+
```ruby
|
|
206
|
+
class Person
|
|
207
|
+
delegate_missing_to :address, allow_nil: true
|
|
207
208
|
|
|
208
|
-
|
|
209
|
+
def address
|
|
210
|
+
nil
|
|
211
|
+
end
|
|
209
212
|
|
|
210
|
-
|
|
213
|
+
def berliner?
|
|
214
|
+
city == "Berlin"
|
|
215
|
+
end
|
|
216
|
+
end
|
|
211
217
|
|
|
212
|
-
|
|
213
|
-
|
|
218
|
+
Person.new.city # => nil
|
|
219
|
+
Person.new.berliner? # undefined local variable or method `city' for an instance of Person (NameError)
|
|
220
|
+
```
|
|
214
221
|
|
|
215
222
|
*Jean Boussier*
|
|
216
223
|
|
|
224
|
+
* Add `logger` as a dependency since it is a bundled gem candidate for Ruby 3.5
|
|
217
225
|
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
* Fix `ActiveSupport::Duration.build` to support negative values.
|
|
221
|
-
|
|
222
|
-
The algorithm to collect the `parts` of the `ActiveSupport::Duration`
|
|
223
|
-
ignored the sign of the `value` and accumulated incorrect part values. This
|
|
224
|
-
impacted `ActiveSupport::Duration#sum` (which is dependent on `parts`) but
|
|
225
|
-
not `ActiveSupport::Duration#eql?` (which is dependent on `value`).
|
|
226
|
-
|
|
227
|
-
*Caleb Buxton*, *Braden Staudacher*
|
|
228
|
-
|
|
226
|
+
*Earlopain*
|
|
229
227
|
|
|
230
|
-
|
|
228
|
+
* Define `Digest::UUID.nil_uuid`, which returns the so-called nil UUID.
|
|
231
229
|
|
|
232
|
-
*
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
## Rails 7.0.0.rc2 (December 14, 2021) ##
|
|
230
|
+
*Xavier Noria*
|
|
236
231
|
|
|
237
|
-
*
|
|
232
|
+
* Support `duration` type in `ActiveSupport::XmlMini`.
|
|
238
233
|
|
|
239
|
-
|
|
234
|
+
*heka1024*
|
|
240
235
|
|
|
241
|
-
*
|
|
242
|
-
`BigDecimal`, `Float` and, `Integer`.
|
|
236
|
+
* Remove deprecated `ActiveSupport::Notifications::Event#children` and `ActiveSupport::Notifications::Event#parent_of?`.
|
|
243
237
|
|
|
244
238
|
*Rafael Mendonça França*
|
|
245
239
|
|
|
246
|
-
*
|
|
247
|
-
|
|
248
|
-
*Sam Bostock & Sam Jordan*
|
|
249
|
-
|
|
250
|
-
* Add `Pathname#existence`.
|
|
251
|
-
|
|
252
|
-
```ruby
|
|
253
|
-
Pathname.new("file").existence&.read
|
|
254
|
-
```
|
|
255
|
-
|
|
256
|
-
*Timo Schilling*
|
|
240
|
+
* Remove deprecated support to call the following methods without passing a deprecator:
|
|
257
241
|
|
|
258
|
-
|
|
242
|
+
- `deprecate`
|
|
243
|
+
- `deprecate_constant`
|
|
244
|
+
- `ActiveSupport::Deprecation::DeprecatedObjectProxy.new`
|
|
245
|
+
- `ActiveSupport::Deprecation::DeprecatedInstanceVariableProxy.new`
|
|
246
|
+
- `ActiveSupport::Deprecation::DeprecatedConstantProxy.new`
|
|
247
|
+
- `assert_deprecated`
|
|
248
|
+
- `assert_not_deprecated`
|
|
249
|
+
- `collect_deprecations`
|
|
259
250
|
|
|
260
251
|
*Rafael Mendonça França*
|
|
261
252
|
|
|
262
|
-
* Remove deprecated
|
|
263
|
-
a date time range is deprecated.
|
|
253
|
+
* Remove deprecated `ActiveSupport::Deprecation` delegation to instance.
|
|
264
254
|
|
|
265
255
|
*Rafael Mendonça França*
|
|
266
256
|
|
|
267
|
-
* Remove deprecated `
|
|
257
|
+
* Remove deprecated `SafeBuffer#clone_empty`.
|
|
268
258
|
|
|
269
259
|
*Rafael Mendonça França*
|
|
270
260
|
|
|
271
|
-
* Remove deprecated `
|
|
261
|
+
* Remove deprecated `#to_default_s` from `Array`, `Date`, `DateTime` and `Time`.
|
|
272
262
|
|
|
273
263
|
*Rafael Mendonça França*
|
|
274
264
|
|
|
275
|
-
*
|
|
276
|
-
`ActiveSupport::OptionMerger` instance.
|
|
277
|
-
|
|
278
|
-
*Sean Doyle*
|
|
279
|
-
|
|
280
|
-
* `Rails.application.executor` hooks can now be called around every test
|
|
281
|
-
|
|
282
|
-
This helps to better simulate request or job local state being reset around tests and prevents state
|
|
283
|
-
leaking from one test to another.
|
|
284
|
-
|
|
285
|
-
However it requires the executor hooks executed in the test environment to be re-entrant.
|
|
286
|
-
|
|
287
|
-
To enable this, set `config.active_support.executor_around_test_case = true` (this is the default in Rails 7).
|
|
288
|
-
|
|
289
|
-
*Jean Boussier*
|
|
290
|
-
|
|
291
|
-
* `ActiveSupport::DescendantsTracker` now mostly delegate to `Class#descendants` on Ruby 3.1
|
|
265
|
+
* Remove deprecated support to passing `Dalli::Client` instances to `MemCacheStore`.
|
|
292
266
|
|
|
293
|
-
|
|
267
|
+
*Rafael Mendonça França*
|
|
294
268
|
|
|
295
|
-
|
|
269
|
+
* Remove deprecated `config.active_support.use_rfc4122_namespaced_uuids`.
|
|
296
270
|
|
|
297
|
-
|
|
298
|
-
- `ActiveSupport::DescendantsTracker#direct_descendants`
|
|
271
|
+
*Rafael Mendonça França*
|
|
299
272
|
|
|
300
|
-
|
|
273
|
+
* Remove deprecated `config.active_support.remove_deprecated_time_with_zone_name`.
|
|
301
274
|
|
|
302
|
-
*
|
|
275
|
+
*Rafael Mendonça França*
|
|
303
276
|
|
|
304
|
-
|
|
305
|
-
`config.active_support.use_rfc4122_namespaced_uuids` option to `true`
|
|
306
|
-
and is the default for new apps.
|
|
277
|
+
* Remove deprecated `config.active_support.disable_to_s_conversion`.
|
|
307
278
|
|
|
308
|
-
|
|
309
|
-
deprecation warning every time a value that is different than one of
|
|
310
|
-
the constants defined on the `Digest::UUID` extension is used as the
|
|
311
|
-
namespace ID.
|
|
279
|
+
*Rafael Mendonça França*
|
|
312
280
|
|
|
313
|
-
|
|
281
|
+
* Remove deprecated support to bolding log text with positional boolean in `ActiveSupport::LogSubscriber#color`.
|
|
314
282
|
|
|
315
|
-
*
|
|
316
|
-
and `inflector.clear` / `inflector.clear(:all)` also clears acronyms.
|
|
283
|
+
*Rafael Mendonça França*
|
|
317
284
|
|
|
318
|
-
|
|
285
|
+
* Remove deprecated constants `ActiveSupport::LogSubscriber::CLEAR` and `ActiveSupport::LogSubscriber::BOLD`.
|
|
319
286
|
|
|
287
|
+
*Rafael Mendonça França*
|
|
320
288
|
|
|
321
|
-
|
|
289
|
+
* Remove deprecated support for `config.active_support.cache_format_version = 6.1`.
|
|
322
290
|
|
|
323
|
-
*
|
|
291
|
+
*Rafael Mendonça França*
|
|
324
292
|
|
|
293
|
+
* Remove deprecated `:pool_size` and `:pool_timeout` options for the cache storage.
|
|
325
294
|
|
|
326
|
-
|
|
295
|
+
*Rafael Mendonça França*
|
|
327
296
|
|
|
328
|
-
*
|
|
297
|
+
* Warn on tests without assertions.
|
|
329
298
|
|
|
330
|
-
|
|
299
|
+
`ActiveSupport::TestCase` now warns when tests do not run any assertions.
|
|
300
|
+
This is helpful in detecting broken tests that do not perform intended assertions.
|
|
331
301
|
|
|
332
|
-
*
|
|
302
|
+
*fatkodima*
|
|
333
303
|
|
|
334
|
-
|
|
304
|
+
* Support `hexBinary` type in `ActiveSupport::XmlMini`.
|
|
335
305
|
|
|
336
|
-
*
|
|
306
|
+
*heka1024*
|
|
337
307
|
|
|
338
|
-
|
|
308
|
+
* Deprecate `ActiveSupport::ProxyObject` in favor of Ruby's built-in `BasicObject`.
|
|
339
309
|
|
|
340
|
-
*
|
|
310
|
+
*Earlopain*
|
|
341
311
|
|
|
342
|
-
|
|
312
|
+
* `stub_const` now accepts a `exists: false` parameter to allow stubbing missing constants.
|
|
343
313
|
|
|
344
|
-
*
|
|
345
|
-
|
|
346
|
-
Previously, if you provided a `error_handler` to `redis_cache_store`, any errors thrown by
|
|
347
|
-
the error handler would be rescued and logged only. Removed the `rescue` clause from `handle_exception`
|
|
348
|
-
to allow these to be thrown.
|
|
314
|
+
*Jean Boussier*
|
|
349
315
|
|
|
350
|
-
|
|
316
|
+
* Make `ActiveSupport::BacktraceCleaner` copy filters and silencers on dup and clone.
|
|
351
317
|
|
|
352
|
-
|
|
318
|
+
Previously the copy would still share the internal silencers and filters array,
|
|
319
|
+
causing state to leak.
|
|
353
320
|
|
|
354
|
-
|
|
355
|
-
still be done on each call to `ActiveSupport::Deprecation.warn`. In very hot paths, this could
|
|
356
|
-
cause performance issues.
|
|
321
|
+
*Jean Boussier*
|
|
357
322
|
|
|
358
|
-
|
|
323
|
+
* Updating Astana with Western Kazakhstan TZInfo identifier.
|
|
359
324
|
|
|
360
|
-
|
|
361
|
-
config.active_support.report_deprecations = false
|
|
362
|
-
```
|
|
325
|
+
*Damian Nelson*
|
|
363
326
|
|
|
364
|
-
|
|
327
|
+
* Add filename support for `ActiveSupport::Logger.logger_outputs_to?`.
|
|
365
328
|
|
|
366
329
|
```ruby
|
|
367
|
-
|
|
368
|
-
|
|
330
|
+
logger = Logger.new('/var/log/rails.log')
|
|
331
|
+
ActiveSupport::Logger.logger_outputs_to?(logger, '/var/log/rails.log')
|
|
369
332
|
```
|
|
370
333
|
|
|
371
|
-
|
|
334
|
+
*Christian Schmidt*
|
|
372
335
|
|
|
373
|
-
|
|
336
|
+
* Include `IPAddr#prefix` when serializing an `IPAddr` using the
|
|
337
|
+
`ActiveSupport::MessagePack` serializer.
|
|
374
338
|
|
|
375
|
-
|
|
376
|
-
of
|
|
339
|
+
This change is backward and forward compatible — old payloads can
|
|
340
|
+
still be read, and new payloads will be readable by older versions of Rails.
|
|
377
341
|
|
|
378
|
-
|
|
379
|
-
setup and fixture loading. Now, Rails will only parallelize test executions when
|
|
380
|
-
there are enough tests to make it worth it.
|
|
342
|
+
*Taiki Komaba*
|
|
381
343
|
|
|
382
|
-
|
|
383
|
-
your test.rb:
|
|
344
|
+
* Add `default:` support for `ActiveSupport::CurrentAttributes.attribute`.
|
|
384
345
|
|
|
385
346
|
```ruby
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
It's also configurable at the test case level:
|
|
390
|
-
|
|
391
|
-
```ruby
|
|
392
|
-
class ActiveSupport::TestCase
|
|
393
|
-
parallelize threshold: 100
|
|
347
|
+
class Current < ActiveSupport::CurrentAttributes
|
|
348
|
+
attribute :counter, default: 0
|
|
394
349
|
end
|
|
395
350
|
```
|
|
396
351
|
|
|
397
|
-
*
|
|
398
|
-
|
|
399
|
-
* OpenSSL constants are now used for Digest computations.
|
|
400
|
-
|
|
401
|
-
*Dirkjan Bussink*
|
|
352
|
+
*Sean Doyle*
|
|
402
353
|
|
|
403
|
-
*
|
|
404
|
-
A valid ordinal value will be converted to an instance of `TimeWithZone` using the `:year`
|
|
405
|
-
and `:yday` fragments returned from `Date._iso8601`.
|
|
354
|
+
* Yield instance to `Object#with` block.
|
|
406
355
|
|
|
407
356
|
```ruby
|
|
408
|
-
|
|
409
|
-
|
|
357
|
+
client.with(timeout: 5_000) do |c|
|
|
358
|
+
c.get("/commits")
|
|
359
|
+
end
|
|
410
360
|
```
|
|
411
361
|
|
|
412
|
-
*
|
|
413
|
-
|
|
414
|
-
* `Time#change` and methods that call it (e.g. `Time#advance`) will now
|
|
415
|
-
return a `Time` with the timezone argument provided, if the caller was
|
|
416
|
-
initialized with a timezone argument.
|
|
417
|
-
|
|
418
|
-
Fixes [#42467](https://github.com/rails/rails/issues/42467).
|
|
362
|
+
*Sean Doyle*
|
|
419
363
|
|
|
420
|
-
|
|
364
|
+
* Use logical core count instead of physical core count to determine the
|
|
365
|
+
default number of workers when parallelizing tests.
|
|
421
366
|
|
|
422
|
-
*
|
|
367
|
+
*Jonathan Hefner*
|
|
423
368
|
|
|
424
|
-
|
|
369
|
+
* Fix `Time.now/DateTime.now/Date.today` to return results in a system timezone after `#travel_to`.
|
|
425
370
|
|
|
426
|
-
|
|
427
|
-
|
|
371
|
+
There is a bug in the current implementation of #travel_to:
|
|
372
|
+
it remembers a timezone of its argument, and all stubbed methods start
|
|
373
|
+
returning results in that remembered timezone. However, the expected
|
|
374
|
+
behavior is to return results in a system timezone.
|
|
428
375
|
|
|
429
|
-
*
|
|
376
|
+
*Aleksei Chernenkov*
|
|
430
377
|
|
|
431
|
-
*
|
|
378
|
+
* Add `ErrorReported#unexpected` to report precondition violations.
|
|
432
379
|
|
|
433
|
-
|
|
380
|
+
For example:
|
|
434
381
|
|
|
435
382
|
```ruby
|
|
436
|
-
|
|
437
|
-
|
|
383
|
+
def edit
|
|
384
|
+
if published?
|
|
385
|
+
Rails.error.unexpected("[BUG] Attempting to edit a published article, that shouldn't be possible")
|
|
386
|
+
return false
|
|
387
|
+
end
|
|
388
|
+
# ...
|
|
438
389
|
end
|
|
439
390
|
```
|
|
440
391
|
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
* Deprecate `ActiveSupport::SafeBuffer`'s incorrect implicit conversion of objects into string.
|
|
444
|
-
|
|
445
|
-
Except for a few methods like `String#%`, objects must implement `#to_str`
|
|
446
|
-
to be implicitly converted to a String in string operations. In some
|
|
447
|
-
circumstances `ActiveSupport::SafeBuffer` was incorrectly calling the
|
|
448
|
-
explicit conversion method (`#to_s`) on them. This behavior is now
|
|
449
|
-
deprecated.
|
|
392
|
+
The above will raise an error in development and test, but only report the error in production.
|
|
450
393
|
|
|
451
394
|
*Jean Boussier*
|
|
452
395
|
|
|
453
|
-
*
|
|
454
|
-
|
|
455
|
-
Previously only top level keys in `credentials.yml.enc` could be accessed with method calls. Now any key can.
|
|
456
|
-
|
|
457
|
-
For example, given these secrets:
|
|
458
|
-
|
|
459
|
-
```yml
|
|
460
|
-
aws:
|
|
461
|
-
access_key_id: 123
|
|
462
|
-
secret_access_key: 345
|
|
463
|
-
```
|
|
464
|
-
|
|
465
|
-
`Rails.application.credentials.aws.access_key_id` will now return the same thing as
|
|
466
|
-
`Rails.application.credentials.aws[:access_key_id]`.
|
|
467
|
-
|
|
468
|
-
*Alex Ghiculescu*
|
|
469
|
-
|
|
470
|
-
* Added a faster and more compact `ActiveSupport::Cache` serialization format.
|
|
396
|
+
* Make the order of read_multi and write_multi notifications for `Cache::Store#fetch_multi` operations match the order they are executed in.
|
|
471
397
|
|
|
472
|
-
|
|
473
|
-
`config.load_defaults 7.0`. Regardless of the configuration Active Support
|
|
474
|
-
7.0 can read cache entries serialized by Active Support 6.1 which allows to
|
|
475
|
-
upgrade without invalidating the cache. However Rails 6.1 can't read the
|
|
476
|
-
new format, so all readers must be upgraded before the new format is enabled.
|
|
477
|
-
|
|
478
|
-
*Jean Boussier*
|
|
398
|
+
*Adam Renberg Tamm*
|
|
479
399
|
|
|
480
|
-
*
|
|
481
|
-
sole item of the enumerable, raising if no items are found, or if more than
|
|
482
|
-
one is.
|
|
400
|
+
* Make return values of `Cache::Store#write` consistent.
|
|
483
401
|
|
|
484
|
-
|
|
402
|
+
The return value was not specified before. Now it returns `true` on a successful write,
|
|
403
|
+
`nil` if there was an error talking to the cache backend, and `false` if the write failed
|
|
404
|
+
for another reason (e.g. the key already exists and `unless_exist: true` was passed).
|
|
485
405
|
|
|
486
|
-
*
|
|
406
|
+
*Sander Verdonschot*
|
|
487
407
|
|
|
488
|
-
|
|
408
|
+
* Fix logged cache keys not always matching actual key used by cache action.
|
|
489
409
|
|
|
490
|
-
*
|
|
491
|
-
|
|
492
|
-
* Fix `ActiveSupport::TimeZone#utc_to_local` with fractional seconds.
|
|
493
|
-
|
|
494
|
-
When `utc_to_local_returns_utc_offset_times` is false and the time
|
|
495
|
-
instance had fractional seconds the new UTC time instance was out by
|
|
496
|
-
a factor of 1,000,000 as the `Time.utc` constructor takes a usec
|
|
497
|
-
value and not a fractional second value.
|
|
498
|
-
|
|
499
|
-
*Andrew White*
|
|
500
|
-
|
|
501
|
-
* Add `expires_at` argument to `ActiveSupport::Cache` `write` and `fetch` to set a cache entry TTL as an absolute time.
|
|
502
|
-
|
|
503
|
-
```ruby
|
|
504
|
-
Rails.cache.write(key, value, expires_at: Time.now.at_end_of_hour)
|
|
505
|
-
```
|
|
506
|
-
|
|
507
|
-
*Jean Boussier*
|
|
508
|
-
|
|
509
|
-
* Deprecate `ActiveSupport::TimeWithZone.name` so that from Rails 7.1 it will use the default implementation.
|
|
510
|
-
|
|
511
|
-
*Andrew White*
|
|
512
|
-
|
|
513
|
-
* Deprecates Rails custom `Enumerable#sum` and `Array#sum` in favor of Ruby's native implementation which
|
|
514
|
-
is considerably faster.
|
|
515
|
-
|
|
516
|
-
Ruby requires an initializer for non-numeric type as per examples below:
|
|
517
|
-
|
|
518
|
-
```ruby
|
|
519
|
-
%w[foo bar].sum('')
|
|
520
|
-
# instead of %w[foo bar].sum
|
|
521
|
-
|
|
522
|
-
[[1, 2], [3, 4, 5]].sum([])
|
|
523
|
-
# instead of [[1, 2], [3, 4, 5]].sum
|
|
524
|
-
```
|
|
525
|
-
|
|
526
|
-
*Alberto Mota*
|
|
527
|
-
|
|
528
|
-
* Tests parallelization is now disabled when running individual files to prevent the setup overhead.
|
|
529
|
-
|
|
530
|
-
It can still be enforced if the environment variable `PARALLEL_WORKERS` is present and set to a value greater than 1.
|
|
531
|
-
|
|
532
|
-
*Ricardo Díaz*
|
|
533
|
-
|
|
534
|
-
* Fix proxying keyword arguments in `ActiveSupport::CurrentAttributes`.
|
|
535
|
-
|
|
536
|
-
*Marcin Kołodziej*
|
|
537
|
-
|
|
538
|
-
* Add `Enumerable#maximum` and `Enumerable#minimum` to easily calculate the maximum or minimum from extracted
|
|
539
|
-
elements of an enumerable.
|
|
540
|
-
|
|
541
|
-
```ruby
|
|
542
|
-
payments = [Payment.new(5), Payment.new(15), Payment.new(10)]
|
|
543
|
-
|
|
544
|
-
payments.minimum(:price) # => 5
|
|
545
|
-
payments.maximum(:price) # => 15
|
|
546
|
-
```
|
|
547
|
-
|
|
548
|
-
This also allows passing enumerables to `fresh_when` and `stale?` in Action Controller.
|
|
549
|
-
See PR [#41404](https://github.com/rails/rails/pull/41404) for an example.
|
|
550
|
-
|
|
551
|
-
*Ayrton De Craene*
|
|
552
|
-
|
|
553
|
-
* `ActiveSupport::Cache::MemCacheStore` now accepts an explicit `nil` for its `addresses` argument.
|
|
554
|
-
|
|
555
|
-
```ruby
|
|
556
|
-
config.cache_store = :mem_cache_store, nil
|
|
557
|
-
|
|
558
|
-
# is now equivalent to
|
|
559
|
-
|
|
560
|
-
config.cache_store = :mem_cache_store
|
|
410
|
+
*Hartley McGuire*
|
|
561
411
|
|
|
562
|
-
|
|
412
|
+
* Improve error messages of `assert_changes` and `assert_no_changes`.
|
|
563
413
|
|
|
564
|
-
|
|
414
|
+
`assert_changes` error messages now display objects with `.inspect` to make it easier
|
|
415
|
+
to differentiate nil from empty strings, strings from symbols, etc.
|
|
416
|
+
`assert_no_changes` error messages now surface the actual value.
|
|
565
417
|
|
|
566
|
-
|
|
567
|
-
```
|
|
418
|
+
*pcreux*
|
|
568
419
|
|
|
569
|
-
|
|
420
|
+
* Fix `#to_fs(:human_size)` to correctly work with negative numbers.
|
|
570
421
|
|
|
571
|
-
*
|
|
422
|
+
*Earlopain*
|
|
572
423
|
|
|
573
|
-
*
|
|
424
|
+
* Fix `BroadcastLogger#dup` so that it duplicates the logger's `broadcasts`.
|
|
574
425
|
|
|
575
|
-
*
|
|
426
|
+
*Andrew Novoselac*
|
|
576
427
|
|
|
577
|
-
* `
|
|
578
|
-
`String#camelize` behavior.
|
|
428
|
+
* Fix issue where `bootstrap.rb` overwrites the `level` of a `BroadcastLogger`'s `broadcasts`.
|
|
579
429
|
|
|
580
|
-
*
|
|
430
|
+
*Andrew Novoselac*
|
|
581
431
|
|
|
582
|
-
*
|
|
583
|
-
invalid.
|
|
432
|
+
* Fix compatibility with the `semantic_logger` gem.
|
|
584
433
|
|
|
585
|
-
|
|
434
|
+
The `semantic_logger` gem doesn't behave exactly like stdlib logger in that
|
|
435
|
+
`SemanticLogger#level` returns a Symbol while stdlib `Logger#level` returns an Integer.
|
|
586
436
|
|
|
587
|
-
|
|
437
|
+
This caused the various `LogSubscriber` classes in Rails to break when assigned a
|
|
438
|
+
`SemanticLogger` instance.
|
|
588
439
|
|
|
589
|
-
*
|
|
440
|
+
*Jean Boussier*, *ojab*
|
|
590
441
|
|
|
591
|
-
*
|
|
442
|
+
* Fix MemoryStore to prevent race conditions when incrementing or decrementing.
|
|
592
443
|
|
|
593
|
-
*
|
|
444
|
+
*Pierre Jambet*
|
|
594
445
|
|
|
595
|
-
*
|
|
446
|
+
* Implement `HashWithIndifferentAccess#to_proc`.
|
|
596
447
|
|
|
597
|
-
|
|
448
|
+
Previously, calling `#to_proc` on `HashWithIndifferentAccess` object used inherited `#to_proc`
|
|
449
|
+
method from the `Hash` class, which was not able to access values using indifferent keys.
|
|
598
450
|
|
|
451
|
+
*fatkodima*
|
|
599
452
|
|
|
600
|
-
Please check [
|
|
453
|
+
Please check [7-1-stable](https://github.com/rails/rails/blob/7-1-stable/activesupport/CHANGELOG.md) for previous changes.
|