activesupport 7.0.8.7 → 7.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +229 -397
- 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 +34 -177
- 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_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 +142 -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,432 @@
|
|
|
1
|
-
## Rails 7.
|
|
1
|
+
## Rails 7.2.3 (October 28, 2025) ##
|
|
2
2
|
|
|
3
|
-
*
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
## Rails 7.0.8.6 (October 23, 2024) ##
|
|
7
|
-
|
|
8
|
-
* No changes.
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
## Rails 7.0.8.5 (October 15, 2024) ##
|
|
12
|
-
|
|
13
|
-
* No changes.
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
## Rails 7.0.8.4 (June 04, 2024) ##
|
|
3
|
+
* Fix `Enumerable#sole` to return the full tuple instead of just the first element of the tuple.
|
|
17
4
|
|
|
18
|
-
*
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
## Rails 7.0.8.3 (May 17, 2024) ##
|
|
5
|
+
*Olivier Bellone*
|
|
22
6
|
|
|
23
|
-
*
|
|
7
|
+
* Fix parallel tests hanging when worker processes die abruptly.
|
|
24
8
|
|
|
9
|
+
Previously, if a worker process was killed (e.g., OOM killed, `kill -9`) during parallel
|
|
10
|
+
test execution, the test suite would hang forever waiting for the dead worker.
|
|
25
11
|
|
|
26
|
-
|
|
12
|
+
*Joshua Young*
|
|
27
13
|
|
|
28
|
-
*
|
|
14
|
+
* `ActiveSupport::FileUpdateChecker` does not depend on `Time.now` to prevent unnecessary reloads with time travel test helpers
|
|
29
15
|
|
|
16
|
+
*Jan Grodowski*
|
|
30
17
|
|
|
31
|
-
|
|
18
|
+
* Fix `ActiveSupport::BroadcastLogger` from executing a block argument for each logger (tagged, info, etc.).
|
|
32
19
|
|
|
33
|
-
*
|
|
20
|
+
*Jared Armstrong*
|
|
34
21
|
|
|
35
|
-
|
|
36
|
-
## Rails 7.0.8 (September 09, 2023) ##
|
|
37
|
-
|
|
38
|
-
* Fix `TimeWithZone` still using deprecated `#to_s` when `ENV` or `config` to
|
|
39
|
-
disable it are set.
|
|
22
|
+
* Fix `ActiveSupport::HashWithIndifferentAccess#transform_keys!` removing defaults.
|
|
40
23
|
|
|
41
24
|
*Hartley McGuire*
|
|
42
25
|
|
|
43
|
-
* Fix
|
|
44
|
-
|
|
45
|
-
Fixes [#48938](https://github.com/rails/rails/issues/48938).
|
|
26
|
+
* Fix `ActiveSupport::HashWithIndifferentAccess#tranform_keys!` to handle collisions.
|
|
46
27
|
|
|
47
|
-
|
|
28
|
+
If the transformation would result in a key equal to another not yet transformed one,
|
|
29
|
+
it would result in keys being lost.
|
|
48
30
|
|
|
31
|
+
Before:
|
|
49
32
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
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]
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
## Rails 7.0.7 (August 09, 2023) ##
|
|
63
|
-
|
|
64
|
-
* Fix `Cache::NullStore` with local caching for repeated reads.
|
|
65
|
-
|
|
66
|
-
*fatkodima*
|
|
67
|
-
|
|
68
|
-
* Fix `to_s` with no arguments not respecting custom `:default` formats
|
|
69
|
-
|
|
70
|
-
*Hartley McGuire*
|
|
33
|
+
```ruby
|
|
34
|
+
>> {a: 1, b: 2}.with_indifferent_access.transform_keys!(&:succ)
|
|
35
|
+
=> {"c" => 1}
|
|
36
|
+
```
|
|
71
37
|
|
|
72
|
-
|
|
38
|
+
After:
|
|
73
39
|
|
|
74
|
-
|
|
40
|
+
```ruby
|
|
41
|
+
>> {a: 1, b: 2}.with_indifferent_access.transform_keys!(&:succ)
|
|
42
|
+
=> {"c" => 1, "d" => 2}
|
|
43
|
+
```
|
|
75
44
|
|
|
76
|
-
*
|
|
45
|
+
*Jason T Johnson*, *Jean Boussier*
|
|
77
46
|
|
|
78
|
-
|
|
47
|
+
* Fix `ActiveSupport::Cache::MemCacheStore#read_multi` to handle network errors.
|
|
79
48
|
|
|
80
|
-
|
|
81
|
-
compatible version of the Listen gem
|
|
49
|
+
This method specifically wasn't handling network errors like other codepaths.
|
|
82
50
|
|
|
83
|
-
*
|
|
51
|
+
*Alessandro Dal Grande*
|
|
84
52
|
|
|
53
|
+
* Fix Active Support Cache `fetch_multi` when local store is active.
|
|
85
54
|
|
|
86
|
-
|
|
55
|
+
`fetch_multi` now properly yield to the provided block for missing entries
|
|
56
|
+
that have been recorded as such in the local store.
|
|
87
57
|
|
|
88
|
-
*
|
|
89
|
-
methods
|
|
58
|
+
*Jean Boussier*
|
|
90
59
|
|
|
91
|
-
|
|
60
|
+
* Fix execution wrapping to report all exceptions, including `Exception`.
|
|
92
61
|
|
|
93
|
-
|
|
62
|
+
If a more serious error like `SystemStackError` or `NoMemoryError` happens,
|
|
63
|
+
the error reporter should be able to report these kinds of exceptions.
|
|
94
64
|
|
|
95
|
-
*
|
|
65
|
+
*Gannon McGibbon*
|
|
96
66
|
|
|
97
|
-
* Fix
|
|
67
|
+
* Fix `RedisCacheStore` and `MemCacheStore` to also handle connection pool related errors.
|
|
98
68
|
|
|
99
|
-
|
|
69
|
+
These errors are rescued and reported to `Rails.error`.
|
|
100
70
|
|
|
71
|
+
*Jean Boussier*
|
|
101
72
|
|
|
102
|
-
|
|
73
|
+
* Fix `ActiveSupport::Cache#read_multi` to respect version expiry when using local cache.
|
|
103
74
|
|
|
104
|
-
*
|
|
75
|
+
*zzak*
|
|
105
76
|
|
|
77
|
+
* Fix `ActiveSupport::MessageVerifier` and `ActiveSupport::MessageEncryptor` configuration of `on_rotation` callback.
|
|
106
78
|
|
|
107
|
-
|
|
79
|
+
```ruby
|
|
80
|
+
verifier.rotate(old_secret).on_rotation { ... }
|
|
81
|
+
```
|
|
108
82
|
|
|
109
|
-
|
|
83
|
+
Now both work as documented.
|
|
110
84
|
|
|
111
|
-
*
|
|
85
|
+
*Jean Boussier*
|
|
112
86
|
|
|
87
|
+
* Fix `ActiveSupport::MessageVerifier` to always be able to verify both URL-safe and URL-unsafe payloads.
|
|
113
88
|
|
|
114
|
-
|
|
89
|
+
This is to allow transitioning seemlessly from either configuration without immediately invalidating
|
|
90
|
+
all previously generated signed messages.
|
|
115
91
|
|
|
116
|
-
*
|
|
92
|
+
*Jean Boussier*, *Florent Beaurain*, *Ali Sepehri*
|
|
117
93
|
|
|
118
|
-
|
|
94
|
+
* Fix `cache.fetch` to honor the provided expiry when `:race_condition_ttl` is used.
|
|
119
95
|
|
|
96
|
+
```ruby
|
|
97
|
+
cache.fetch("key", expires_in: 1.hour, race_condition_ttl: 5.second) do
|
|
98
|
+
"something"
|
|
99
|
+
end
|
|
100
|
+
```
|
|
120
101
|
|
|
121
|
-
|
|
102
|
+
In the above example, the final cache entry would have a 10 seconds TTL instead
|
|
103
|
+
of the requested 1 hour.
|
|
122
104
|
|
|
123
|
-
*
|
|
105
|
+
*Dhia*
|
|
124
106
|
|
|
107
|
+
* Better handle procs with splat arguments in `set_callback`.
|
|
125
108
|
|
|
126
|
-
|
|
109
|
+
*Radamés Roriz*
|
|
127
110
|
|
|
128
|
-
*
|
|
111
|
+
* Fix `String#mb_chars` to not mutate the receiver.
|
|
129
112
|
|
|
130
|
-
|
|
113
|
+
Previously it would call `force_encoding` on the receiver,
|
|
114
|
+
now it dups the receiver first.
|
|
131
115
|
|
|
116
|
+
*Jean Boussier*
|
|
132
117
|
|
|
133
|
-
|
|
118
|
+
* Improve `ErrorSubscriber` to also mark error causes as reported.
|
|
134
119
|
|
|
135
|
-
|
|
120
|
+
This avoid some cases of errors being reported twice, notably in views because of how
|
|
121
|
+
errors are wrapped in `ActionView::Template::Error`.
|
|
136
122
|
|
|
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.
|
|
123
|
+
*Jean Boussier*
|
|
142
124
|
|
|
143
|
-
|
|
144
|
-
cause errors if the limit is reached.
|
|
125
|
+
* Fix `Module#module_parent_name` to return the correct name after the module has been named.
|
|
145
126
|
|
|
146
|
-
|
|
127
|
+
When called on an anonymous module, the return value wouldn't change after the module was given a name
|
|
128
|
+
later by being assigned to a constant.
|
|
147
129
|
|
|
148
|
-
|
|
130
|
+
```ruby
|
|
131
|
+
mod = Module.new
|
|
132
|
+
mod.module_parent_name # => "Object"
|
|
133
|
+
MyModule::Something = mod
|
|
134
|
+
mod.module_parent_name # => "MyModule"
|
|
135
|
+
```
|
|
149
136
|
|
|
150
137
|
*Jean Boussier*
|
|
151
138
|
|
|
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.
|
|
139
|
+
* Fix a bug in `ERB::Util.tokenize` that causes incorrect tokenization when ERB tags are preceeded by multibyte characters.
|
|
157
140
|
|
|
158
|
-
|
|
141
|
+
*Martin Emde*
|
|
159
142
|
|
|
160
|
-
*Ryo Nakamura*
|
|
161
143
|
|
|
162
|
-
|
|
163
|
-
## Rails 7.0.3.1 (July 12, 2022) ##
|
|
144
|
+
## Rails 7.2.2.2 (August 13, 2025) ##
|
|
164
145
|
|
|
165
146
|
* No changes.
|
|
166
147
|
|
|
167
148
|
|
|
168
|
-
## Rails 7.
|
|
149
|
+
## Rails 7.2.2.1 (December 10, 2024) ##
|
|
169
150
|
|
|
170
151
|
* No changes.
|
|
171
152
|
|
|
172
153
|
|
|
173
|
-
## Rails 7.
|
|
174
|
-
|
|
175
|
-
* Fix and add protections for XSS in `ActionView::Helpers` and `ERB::Util`.
|
|
154
|
+
## Rails 7.2.2 (October 30, 2024) ##
|
|
176
155
|
|
|
177
|
-
|
|
178
|
-
in names of tags and names of attributes, following the specification of XML.
|
|
156
|
+
* Include options when instrumenting `ActiveSupport::Cache::Store#delete` and `ActiveSupport::Cache::Store#delete_multi`.
|
|
179
157
|
|
|
180
|
-
|
|
158
|
+
*Adam Renberg Tamm*
|
|
181
159
|
|
|
182
|
-
|
|
160
|
+
* Print test names when running `rails test -v` for parallel tests.
|
|
183
161
|
|
|
184
|
-
*
|
|
162
|
+
*John Hawthorn*, *Abeid Ahmed*
|
|
185
163
|
|
|
186
164
|
|
|
187
|
-
## Rails 7.
|
|
165
|
+
## Rails 7.2.1.2 (October 23, 2024) ##
|
|
188
166
|
|
|
189
|
-
*
|
|
167
|
+
* No changes.
|
|
190
168
|
|
|
191
169
|
|
|
192
|
-
## Rails 7.
|
|
170
|
+
## Rails 7.2.1.1 (October 15, 2024) ##
|
|
193
171
|
|
|
194
172
|
* No changes.
|
|
195
173
|
|
|
196
174
|
|
|
197
|
-
## Rails 7.
|
|
175
|
+
## Rails 7.2.1 (August 22, 2024) ##
|
|
198
176
|
|
|
199
|
-
*
|
|
177
|
+
* No changes.
|
|
200
178
|
|
|
201
|
-
*Stephen Sugden*
|
|
202
179
|
|
|
203
|
-
|
|
180
|
+
## Rails 7.2.0 (August 09, 2024) ##
|
|
204
181
|
|
|
205
|
-
|
|
182
|
+
* Fix `delegate_missing_to allow_nil: true` when called with implict self
|
|
206
183
|
|
|
184
|
+
```ruby
|
|
185
|
+
class Person
|
|
186
|
+
delegate_missing_to :address, allow_nil: true
|
|
207
187
|
|
|
208
|
-
|
|
188
|
+
def address
|
|
189
|
+
nil
|
|
190
|
+
end
|
|
209
191
|
|
|
210
|
-
|
|
192
|
+
def berliner?
|
|
193
|
+
city == "Berlin"
|
|
194
|
+
end
|
|
195
|
+
end
|
|
211
196
|
|
|
212
|
-
|
|
213
|
-
|
|
197
|
+
Person.new.city # => nil
|
|
198
|
+
Person.new.berliner? # undefined local variable or method `city' for an instance of Person (NameError)
|
|
199
|
+
```
|
|
214
200
|
|
|
215
201
|
*Jean Boussier*
|
|
216
202
|
|
|
203
|
+
* Add `logger` as a dependency since it is a bundled gem candidate for Ruby 3.5
|
|
217
204
|
|
|
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`).
|
|
205
|
+
*Earlopain*
|
|
226
206
|
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
## Rails 7.0.0.rc3 (December 14, 2021) ##
|
|
231
|
-
|
|
232
|
-
* No changes.
|
|
207
|
+
* Define `Digest::UUID.nil_uuid`, which returns the so-called nil UUID.
|
|
233
208
|
|
|
209
|
+
*Xavier Noria*
|
|
234
210
|
|
|
235
|
-
|
|
211
|
+
* Support `duration` type in `ActiveSupport::XmlMini`.
|
|
236
212
|
|
|
237
|
-
*
|
|
213
|
+
*heka1024*
|
|
238
214
|
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
* Deprecate passing a format to `#to_s` in favor of `#to_formatted_s` in `Array`, `Range`, `Date`, `DateTime`, `Time`,
|
|
242
|
-
`BigDecimal`, `Float` and, `Integer`.
|
|
215
|
+
* Remove deprecated `ActiveSupport::Notifications::Event#children` and `ActiveSupport::Notifications::Event#parent_of?`.
|
|
243
216
|
|
|
244
217
|
*Rafael Mendonça França*
|
|
245
218
|
|
|
246
|
-
*
|
|
247
|
-
|
|
248
|
-
*Sam Bostock & Sam Jordan*
|
|
219
|
+
* Remove deprecated support to call the following methods without passing a deprecator:
|
|
249
220
|
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
* Remove deprecate `ActiveSupport::Multibyte::Unicode.default_normalization_form`.
|
|
221
|
+
- `deprecate`
|
|
222
|
+
- `deprecate_constant`
|
|
223
|
+
- `ActiveSupport::Deprecation::DeprecatedObjectProxy.new`
|
|
224
|
+
- `ActiveSupport::Deprecation::DeprecatedInstanceVariableProxy.new`
|
|
225
|
+
- `ActiveSupport::Deprecation::DeprecatedConstantProxy.new`
|
|
226
|
+
- `assert_deprecated`
|
|
227
|
+
- `assert_not_deprecated`
|
|
228
|
+
- `collect_deprecations`
|
|
259
229
|
|
|
260
230
|
*Rafael Mendonça França*
|
|
261
231
|
|
|
262
|
-
* Remove deprecated
|
|
263
|
-
a date time range is deprecated.
|
|
232
|
+
* Remove deprecated `ActiveSupport::Deprecation` delegation to instance.
|
|
264
233
|
|
|
265
234
|
*Rafael Mendonça França*
|
|
266
235
|
|
|
267
|
-
* Remove deprecated `
|
|
236
|
+
* Remove deprecated `SafeBuffer#clone_empty`.
|
|
268
237
|
|
|
269
238
|
*Rafael Mendonça França*
|
|
270
239
|
|
|
271
|
-
* Remove deprecated `
|
|
240
|
+
* Remove deprecated `#to_default_s` from `Array`, `Date`, `DateTime` and `Time`.
|
|
272
241
|
|
|
273
242
|
*Rafael Mendonça França*
|
|
274
243
|
|
|
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.
|
|
244
|
+
* Remove deprecated support to passing `Dalli::Client` instances to `MemCacheStore`.
|
|
286
245
|
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
*Jean Boussier*
|
|
290
|
-
|
|
291
|
-
* `ActiveSupport::DescendantsTracker` now mostly delegate to `Class#descendants` on Ruby 3.1
|
|
246
|
+
*Rafael Mendonça França*
|
|
292
247
|
|
|
293
|
-
|
|
248
|
+
* Remove deprecated `config.active_support.use_rfc4122_namespaced_uuids`.
|
|
294
249
|
|
|
295
|
-
|
|
250
|
+
*Rafael Mendonça França*
|
|
296
251
|
|
|
297
|
-
|
|
298
|
-
- `ActiveSupport::DescendantsTracker#direct_descendants`
|
|
252
|
+
* Remove deprecated `config.active_support.remove_deprecated_time_with_zone_name`.
|
|
299
253
|
|
|
300
|
-
*
|
|
254
|
+
*Rafael Mendonça França*
|
|
301
255
|
|
|
302
|
-
*
|
|
256
|
+
* Remove deprecated `config.active_support.disable_to_s_conversion`.
|
|
303
257
|
|
|
304
|
-
|
|
305
|
-
`config.active_support.use_rfc4122_namespaced_uuids` option to `true`
|
|
306
|
-
and is the default for new apps.
|
|
258
|
+
*Rafael Mendonça França*
|
|
307
259
|
|
|
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.
|
|
260
|
+
* Remove deprecated support to bolding log text with positional boolean in `ActiveSupport::LogSubscriber#color`.
|
|
312
261
|
|
|
313
|
-
*
|
|
262
|
+
*Rafael Mendonça França*
|
|
314
263
|
|
|
315
|
-
* `ActiveSupport::
|
|
316
|
-
and `inflector.clear` / `inflector.clear(:all)` also clears acronyms.
|
|
264
|
+
* Remove deprecated constants `ActiveSupport::LogSubscriber::CLEAR` and `ActiveSupport::LogSubscriber::BOLD`.
|
|
317
265
|
|
|
318
|
-
*
|
|
266
|
+
*Rafael Mendonça França*
|
|
319
267
|
|
|
268
|
+
* Remove deprecated support for `config.active_support.cache_format_version = 6.1`.
|
|
320
269
|
|
|
321
|
-
|
|
270
|
+
*Rafael Mendonça França*
|
|
322
271
|
|
|
323
|
-
*
|
|
272
|
+
* Remove deprecated `:pool_size` and `:pool_timeout` options for the cache storage.
|
|
324
273
|
|
|
274
|
+
*Rafael Mendonça França*
|
|
325
275
|
|
|
326
|
-
|
|
276
|
+
* Warn on tests without assertions.
|
|
327
277
|
|
|
328
|
-
|
|
278
|
+
`ActiveSupport::TestCase` now warns when tests do not run any assertions.
|
|
279
|
+
This is helpful in detecting broken tests that do not perform intended assertions.
|
|
329
280
|
|
|
330
|
-
*
|
|
281
|
+
*fatkodima*
|
|
331
282
|
|
|
332
|
-
*
|
|
283
|
+
* Support `hexBinary` type in `ActiveSupport::XmlMini`.
|
|
333
284
|
|
|
334
|
-
*
|
|
285
|
+
*heka1024*
|
|
335
286
|
|
|
336
|
-
*
|
|
287
|
+
* Deprecate `ActiveSupport::ProxyObject` in favor of Ruby's built-in `BasicObject`.
|
|
337
288
|
|
|
338
|
-
*
|
|
289
|
+
*Earlopain*
|
|
339
290
|
|
|
340
|
-
*
|
|
291
|
+
* `stub_const` now accepts a `exists: false` parameter to allow stubbing missing constants.
|
|
341
292
|
|
|
342
|
-
*
|
|
293
|
+
*Jean Boussier*
|
|
343
294
|
|
|
344
|
-
*
|
|
295
|
+
* Make `ActiveSupport::BacktraceCleaner` copy filters and silencers on dup and clone.
|
|
345
296
|
|
|
346
|
-
Previously
|
|
347
|
-
|
|
348
|
-
to allow these to be thrown.
|
|
297
|
+
Previously the copy would still share the internal silencers and filters array,
|
|
298
|
+
causing state to leak.
|
|
349
299
|
|
|
350
|
-
*
|
|
300
|
+
*Jean Boussier*
|
|
351
301
|
|
|
352
|
-
*
|
|
302
|
+
* Updating Astana with Western Kazakhstan TZInfo identifier.
|
|
353
303
|
|
|
354
|
-
|
|
355
|
-
still be done on each call to `ActiveSupport::Deprecation.warn`. In very hot paths, this could
|
|
356
|
-
cause performance issues.
|
|
304
|
+
*Damian Nelson*
|
|
357
305
|
|
|
358
|
-
|
|
306
|
+
* Add filename support for `ActiveSupport::Logger.logger_outputs_to?`.
|
|
359
307
|
|
|
360
308
|
```ruby
|
|
361
|
-
|
|
309
|
+
logger = Logger.new('/var/log/rails.log')
|
|
310
|
+
ActiveSupport::Logger.logger_outputs_to?(logger, '/var/log/rails.log')
|
|
362
311
|
```
|
|
363
312
|
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
```ruby
|
|
367
|
-
config.active_support.deprecation = :silence
|
|
368
|
-
config.active_support.disallowed_deprecation = :silence
|
|
369
|
-
```
|
|
313
|
+
*Christian Schmidt*
|
|
370
314
|
|
|
371
|
-
|
|
315
|
+
* Include `IPAddr#prefix` when serializing an `IPAddr` using the
|
|
316
|
+
`ActiveSupport::MessagePack` serializer.
|
|
372
317
|
|
|
373
|
-
|
|
318
|
+
This change is backward and forward compatible — old payloads can
|
|
319
|
+
still be read, and new payloads will be readable by older versions of Rails.
|
|
374
320
|
|
|
375
|
-
*
|
|
376
|
-
of them.
|
|
321
|
+
*Taiki Komaba*
|
|
377
322
|
|
|
378
|
-
|
|
379
|
-
setup and fixture loading. Now, Rails will only parallelize test executions when
|
|
380
|
-
there are enough tests to make it worth it.
|
|
381
|
-
|
|
382
|
-
This threshold is 50 by default, and is configurable via config setting in
|
|
383
|
-
your test.rb:
|
|
384
|
-
|
|
385
|
-
```ruby
|
|
386
|
-
config.active_support.test_parallelization_threshold = 100
|
|
387
|
-
```
|
|
388
|
-
|
|
389
|
-
It's also configurable at the test case level:
|
|
323
|
+
* Add `default:` support for `ActiveSupport::CurrentAttributes.attribute`.
|
|
390
324
|
|
|
391
325
|
```ruby
|
|
392
|
-
class ActiveSupport::
|
|
393
|
-
|
|
326
|
+
class Current < ActiveSupport::CurrentAttributes
|
|
327
|
+
attribute :counter, default: 0
|
|
394
328
|
end
|
|
395
329
|
```
|
|
396
330
|
|
|
397
|
-
*
|
|
398
|
-
|
|
399
|
-
* OpenSSL constants are now used for Digest computations.
|
|
400
|
-
|
|
401
|
-
*Dirkjan Bussink*
|
|
331
|
+
*Sean Doyle*
|
|
402
332
|
|
|
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`.
|
|
333
|
+
* Yield instance to `Object#with` block.
|
|
406
334
|
|
|
407
335
|
```ruby
|
|
408
|
-
|
|
409
|
-
|
|
336
|
+
client.with(timeout: 5_000) do |c|
|
|
337
|
+
c.get("/commits")
|
|
338
|
+
end
|
|
410
339
|
```
|
|
411
340
|
|
|
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).
|
|
341
|
+
*Sean Doyle*
|
|
419
342
|
|
|
420
|
-
|
|
343
|
+
* Use logical core count instead of physical core count to determine the
|
|
344
|
+
default number of workers when parallelizing tests.
|
|
421
345
|
|
|
422
|
-
*
|
|
346
|
+
*Jonathan Hefner*
|
|
423
347
|
|
|
424
|
-
|
|
348
|
+
* Fix `Time.now/DateTime.now/Date.today` to return results in a system timezone after `#travel_to`.
|
|
425
349
|
|
|
426
|
-
|
|
427
|
-
|
|
350
|
+
There is a bug in the current implementation of #travel_to:
|
|
351
|
+
it remembers a timezone of its argument, and all stubbed methods start
|
|
352
|
+
returning results in that remembered timezone. However, the expected
|
|
353
|
+
behavior is to return results in a system timezone.
|
|
428
354
|
|
|
429
|
-
*
|
|
355
|
+
*Aleksei Chernenkov*
|
|
430
356
|
|
|
431
|
-
*
|
|
357
|
+
* Add `ErrorReported#unexpected` to report precondition violations.
|
|
432
358
|
|
|
433
|
-
|
|
359
|
+
For example:
|
|
434
360
|
|
|
435
361
|
```ruby
|
|
436
|
-
|
|
437
|
-
|
|
362
|
+
def edit
|
|
363
|
+
if published?
|
|
364
|
+
Rails.error.unexpected("[BUG] Attempting to edit a published article, that shouldn't be possible")
|
|
365
|
+
return false
|
|
366
|
+
end
|
|
367
|
+
# ...
|
|
438
368
|
end
|
|
439
369
|
```
|
|
440
370
|
|
|
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.
|
|
371
|
+
The above will raise an error in development and test, but only report the error in production.
|
|
450
372
|
|
|
451
373
|
*Jean Boussier*
|
|
452
374
|
|
|
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:
|
|
375
|
+
* Make the order of read_multi and write_multi notifications for `Cache::Store#fetch_multi` operations match the order they are executed in.
|
|
458
376
|
|
|
459
|
-
|
|
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*
|
|
377
|
+
*Adam Renberg Tamm*
|
|
469
378
|
|
|
470
|
-
*
|
|
379
|
+
* Make return values of `Cache::Store#write` consistent.
|
|
471
380
|
|
|
472
|
-
|
|
473
|
-
`
|
|
474
|
-
|
|
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*
|
|
381
|
+
The return value was not specified before. Now it returns `true` on a successful write,
|
|
382
|
+
`nil` if there was an error talking to the cache backend, and `false` if the write failed
|
|
383
|
+
for another reason (e.g. the key already exists and `unless_exist: true` was passed).
|
|
479
384
|
|
|
480
|
-
*
|
|
481
|
-
sole item of the enumerable, raising if no items are found, or if more than
|
|
482
|
-
one is.
|
|
385
|
+
*Sander Verdonschot*
|
|
483
386
|
|
|
484
|
-
|
|
387
|
+
* Fix logged cache keys not always matching actual key used by cache action.
|
|
485
388
|
|
|
486
|
-
*
|
|
487
|
-
|
|
488
|
-
Durations are meant to be value objects and should not be mutated.
|
|
489
|
-
|
|
490
|
-
*Andrew White*
|
|
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
|
|
389
|
+
*Hartley McGuire*
|
|
561
390
|
|
|
562
|
-
|
|
391
|
+
* Improve error messages of `assert_changes` and `assert_no_changes`.
|
|
563
392
|
|
|
564
|
-
|
|
393
|
+
`assert_changes` error messages now display objects with `.inspect` to make it easier
|
|
394
|
+
to differentiate nil from empty strings, strings from symbols, etc.
|
|
395
|
+
`assert_no_changes` error messages now surface the actual value.
|
|
565
396
|
|
|
566
|
-
|
|
567
|
-
```
|
|
397
|
+
*pcreux*
|
|
568
398
|
|
|
569
|
-
|
|
399
|
+
* Fix `#to_fs(:human_size)` to correctly work with negative numbers.
|
|
570
400
|
|
|
571
|
-
*
|
|
401
|
+
*Earlopain*
|
|
572
402
|
|
|
573
|
-
*
|
|
403
|
+
* Fix `BroadcastLogger#dup` so that it duplicates the logger's `broadcasts`.
|
|
574
404
|
|
|
575
|
-
*
|
|
405
|
+
*Andrew Novoselac*
|
|
576
406
|
|
|
577
|
-
* `
|
|
578
|
-
`String#camelize` behavior.
|
|
407
|
+
* Fix issue where `bootstrap.rb` overwrites the `level` of a `BroadcastLogger`'s `broadcasts`.
|
|
579
408
|
|
|
580
|
-
*
|
|
409
|
+
*Andrew Novoselac*
|
|
581
410
|
|
|
582
|
-
*
|
|
583
|
-
invalid.
|
|
411
|
+
* Fix compatibility with the `semantic_logger` gem.
|
|
584
412
|
|
|
585
|
-
|
|
413
|
+
The `semantic_logger` gem doesn't behave exactly like stdlib logger in that
|
|
414
|
+
`SemanticLogger#level` returns a Symbol while stdlib `Logger#level` returns an Integer.
|
|
586
415
|
|
|
587
|
-
|
|
416
|
+
This caused the various `LogSubscriber` classes in Rails to break when assigned a
|
|
417
|
+
`SemanticLogger` instance.
|
|
588
418
|
|
|
589
|
-
*
|
|
419
|
+
*Jean Boussier*, *ojab*
|
|
590
420
|
|
|
591
|
-
*
|
|
421
|
+
* Fix MemoryStore to prevent race conditions when incrementing or decrementing.
|
|
592
422
|
|
|
593
|
-
*
|
|
423
|
+
*Pierre Jambet*
|
|
594
424
|
|
|
595
|
-
*
|
|
425
|
+
* Implement `HashWithIndifferentAccess#to_proc`.
|
|
596
426
|
|
|
597
|
-
|
|
427
|
+
Previously, calling `#to_proc` on `HashWithIndifferentAccess` object used inherited `#to_proc`
|
|
428
|
+
method from the `Hash` class, which was not able to access values using indifferent keys.
|
|
598
429
|
|
|
430
|
+
*fatkodima*
|
|
599
431
|
|
|
600
|
-
Please check [
|
|
432
|
+
Please check [7-1-stable](https://github.com/rails/rails/blob/7-1-stable/activesupport/CHANGELOG.md) for previous changes.
|