activesupport 6.1.7.2 → 7.0.5
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of activesupport might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/CHANGELOG.md +261 -511
- data/lib/active_support/actionable_error.rb +1 -1
- data/lib/active_support/array_inquirer.rb +0 -2
- data/lib/active_support/backtrace_cleaner.rb +2 -2
- data/lib/active_support/benchmarkable.rb +2 -2
- data/lib/active_support/cache/file_store.rb +15 -9
- data/lib/active_support/cache/mem_cache_store.rb +148 -37
- data/lib/active_support/cache/memory_store.rb +24 -16
- data/lib/active_support/cache/null_store.rb +10 -2
- data/lib/active_support/cache/redis_cache_store.rb +59 -78
- data/lib/active_support/cache/strategy/local_cache.rb +38 -61
- data/lib/active_support/cache.rb +299 -147
- data/lib/active_support/callbacks.rb +184 -85
- data/lib/active_support/code_generator.rb +65 -0
- data/lib/active_support/concern.rb +5 -5
- data/lib/active_support/concurrency/load_interlock_aware_monitor.rb +2 -4
- data/lib/active_support/concurrency/share_lock.rb +2 -2
- data/lib/active_support/configurable.rb +8 -5
- data/lib/active_support/configuration_file.rb +1 -1
- data/lib/active_support/core_ext/array/access.rb +1 -5
- data/lib/active_support/core_ext/array/conversions.rb +13 -12
- data/lib/active_support/core_ext/array/deprecated_conversions.rb +25 -0
- data/lib/active_support/core_ext/array/grouping.rb +6 -6
- data/lib/active_support/core_ext/array/inquiry.rb +2 -2
- data/lib/active_support/core_ext/array.rb +1 -0
- data/lib/active_support/core_ext/big_decimal/conversions.rb +1 -1
- data/lib/active_support/core_ext/class/subclasses.rb +25 -17
- data/lib/active_support/core_ext/date/blank.rb +1 -1
- data/lib/active_support/core_ext/date/calculations.rb +24 -9
- data/lib/active_support/core_ext/date/conversions.rb +14 -14
- data/lib/active_support/core_ext/date/deprecated_conversions.rb +26 -0
- data/lib/active_support/core_ext/date.rb +1 -0
- data/lib/active_support/core_ext/date_and_time/calculations.rb +4 -4
- data/lib/active_support/core_ext/date_and_time/compatibility.rb +1 -1
- data/lib/active_support/core_ext/date_time/blank.rb +1 -1
- data/lib/active_support/core_ext/date_time/calculations.rb +4 -0
- data/lib/active_support/core_ext/date_time/conversions.rb +13 -13
- data/lib/active_support/core_ext/date_time/deprecated_conversions.rb +22 -0
- data/lib/active_support/core_ext/date_time.rb +1 -0
- data/lib/active_support/core_ext/digest/uuid.rb +39 -14
- data/lib/active_support/core_ext/enumerable.rb +106 -37
- data/lib/active_support/core_ext/file/atomic.rb +3 -1
- data/lib/active_support/core_ext/hash/conversions.rb +0 -1
- data/lib/active_support/core_ext/hash/deep_transform_values.rb +3 -3
- data/lib/active_support/core_ext/hash/indifferent_access.rb +3 -3
- data/lib/active_support/core_ext/hash/keys.rb +4 -4
- data/lib/active_support/core_ext/integer/inflections.rb +12 -12
- data/lib/active_support/core_ext/kernel/reporting.rb +4 -4
- data/lib/active_support/core_ext/kernel/singleton_class.rb +1 -1
- data/lib/active_support/core_ext/module/attribute_accessors.rb +2 -0
- data/lib/active_support/core_ext/module/attribute_accessors_per_thread.rb +19 -10
- data/lib/active_support/core_ext/module/delegation.rb +2 -8
- data/lib/active_support/core_ext/name_error.rb +2 -8
- data/lib/active_support/core_ext/numeric/conversions.rb +80 -77
- data/lib/active_support/core_ext/numeric/deprecated_conversions.rb +60 -0
- data/lib/active_support/core_ext/numeric.rb +1 -0
- data/lib/active_support/core_ext/object/acts_like.rb +29 -5
- data/lib/active_support/core_ext/object/blank.rb +2 -2
- data/lib/active_support/core_ext/object/deep_dup.rb +1 -1
- data/lib/active_support/core_ext/object/duplicable.rb +15 -4
- data/lib/active_support/core_ext/object/json.rb +30 -25
- data/lib/active_support/core_ext/object/to_query.rb +2 -2
- data/lib/active_support/core_ext/object/try.rb +20 -20
- data/lib/active_support/core_ext/object/with_options.rb +21 -2
- data/lib/active_support/core_ext/pathname/existence.rb +21 -0
- data/lib/active_support/core_ext/pathname.rb +3 -0
- data/lib/active_support/core_ext/range/compare_range.rb +0 -25
- data/lib/active_support/core_ext/range/conversions.rb +8 -8
- data/lib/active_support/core_ext/range/deprecated_conversions.rb +26 -0
- data/lib/active_support/core_ext/range/each.rb +1 -1
- data/lib/active_support/core_ext/range/include_time_with_zone.rb +3 -26
- data/lib/active_support/core_ext/range/overlaps.rb +1 -1
- data/lib/active_support/core_ext/range.rb +1 -1
- data/lib/active_support/core_ext/securerandom.rb +1 -1
- data/lib/active_support/core_ext/string/conversions.rb +2 -2
- data/lib/active_support/core_ext/string/filters.rb +1 -1
- data/lib/active_support/core_ext/string/inflections.rb +1 -1
- data/lib/active_support/core_ext/string/inquiry.rb +1 -1
- data/lib/active_support/core_ext/string/output_safety.rb +66 -38
- data/lib/active_support/core_ext/symbol/starts_ends_with.rb +0 -8
- data/lib/active_support/core_ext/time/calculations.rb +11 -8
- data/lib/active_support/core_ext/time/conversions.rb +13 -12
- data/lib/active_support/core_ext/time/deprecated_conversions.rb +22 -0
- data/lib/active_support/core_ext/time/zones.rb +10 -26
- data/lib/active_support/core_ext/time.rb +1 -0
- data/lib/active_support/core_ext/uri.rb +3 -27
- data/lib/active_support/core_ext.rb +1 -0
- data/lib/active_support/current_attributes.rb +31 -15
- data/lib/active_support/dependencies/interlock.rb +10 -18
- data/lib/active_support/dependencies/require_dependency.rb +28 -0
- data/lib/active_support/dependencies.rb +58 -788
- data/lib/active_support/deprecation/behaviors.rb +8 -5
- data/lib/active_support/deprecation/disallowed.rb +3 -3
- data/lib/active_support/deprecation/method_wrappers.rb +3 -3
- data/lib/active_support/deprecation/proxy_wrappers.rb +2 -2
- data/lib/active_support/deprecation.rb +2 -2
- data/lib/active_support/descendants_tracker.rb +174 -68
- data/lib/active_support/digest.rb +4 -4
- data/lib/active_support/duration/iso8601_parser.rb +3 -3
- data/lib/active_support/duration/iso8601_serializer.rb +9 -1
- data/lib/active_support/duration.rb +77 -48
- data/lib/active_support/encrypted_configuration.rb +45 -3
- data/lib/active_support/encrypted_file.rb +13 -1
- data/lib/active_support/environment_inquirer.rb +1 -1
- data/lib/active_support/error_reporter.rb +117 -0
- data/lib/active_support/evented_file_update_checker.rb +3 -5
- data/lib/active_support/execution_context/test_helper.rb +13 -0
- data/lib/active_support/execution_context.rb +53 -0
- data/lib/active_support/execution_wrapper.rb +30 -11
- data/lib/active_support/executor/test_helper.rb +7 -0
- data/lib/active_support/fork_tracker.rb +19 -12
- data/lib/active_support/gem_version.rb +5 -5
- data/lib/active_support/hash_with_indifferent_access.rb +3 -1
- data/lib/active_support/html_safe_translation.rb +43 -0
- data/lib/active_support/i18n.rb +1 -0
- data/lib/active_support/i18n_railtie.rb +1 -1
- data/lib/active_support/inflector/inflections.rb +23 -7
- data/lib/active_support/inflector/methods.rb +27 -50
- data/lib/active_support/inflector/transliterate.rb +1 -1
- data/lib/active_support/isolated_execution_state.rb +72 -0
- data/lib/active_support/json/encoding.rb +3 -3
- data/lib/active_support/key_generator.rb +22 -5
- data/lib/active_support/lazy_load_hooks.rb +28 -4
- data/lib/active_support/locale/en.yml +1 -1
- data/lib/active_support/log_subscriber/test_helper.rb +2 -2
- data/lib/active_support/log_subscriber.rb +15 -5
- data/lib/active_support/logger_thread_safe_level.rb +4 -13
- data/lib/active_support/message_encryptor.rb +12 -6
- data/lib/active_support/message_verifier.rb +46 -14
- data/lib/active_support/messages/metadata.rb +2 -2
- data/lib/active_support/multibyte/chars.rb +10 -11
- data/lib/active_support/multibyte/unicode.rb +0 -12
- data/lib/active_support/multibyte.rb +1 -1
- data/lib/active_support/notifications/fanout.rb +91 -65
- data/lib/active_support/notifications/instrumenter.rb +32 -15
- data/lib/active_support/notifications.rb +23 -23
- data/lib/active_support/number_helper/number_converter.rb +1 -3
- data/lib/active_support/number_helper/number_to_currency_converter.rb +11 -6
- data/lib/active_support/number_helper/number_to_delimited_converter.rb +1 -1
- data/lib/active_support/number_helper/number_to_human_size_converter.rb +1 -1
- data/lib/active_support/number_helper/number_to_phone_converter.rb +1 -1
- data/lib/active_support/number_helper/rounding_helper.rb +1 -5
- data/lib/active_support/number_helper.rb +4 -5
- data/lib/active_support/option_merger.rb +10 -18
- data/lib/active_support/ordered_hash.rb +1 -1
- data/lib/active_support/ordered_options.rb +1 -1
- data/lib/active_support/parameter_filter.rb +20 -11
- data/lib/active_support/per_thread_registry.rb +5 -1
- data/lib/active_support/railtie.rb +69 -19
- data/lib/active_support/rescuable.rb +12 -12
- data/lib/active_support/ruby_features.rb +7 -0
- data/lib/active_support/secure_compare_rotator.rb +2 -2
- data/lib/active_support/string_inquirer.rb +0 -2
- data/lib/active_support/subscriber.rb +7 -18
- data/lib/active_support/tagged_logging.rb +1 -1
- data/lib/active_support/test_case.rb +13 -21
- data/lib/active_support/testing/assertions.rb +35 -5
- data/lib/active_support/testing/deprecation.rb +52 -1
- data/lib/active_support/testing/isolation.rb +30 -29
- data/lib/active_support/testing/method_call_assertions.rb +5 -5
- data/lib/active_support/testing/parallelization/server.rb +4 -0
- data/lib/active_support/testing/parallelization/worker.rb +3 -0
- data/lib/active_support/testing/parallelization.rb +4 -0
- data/lib/active_support/testing/parallelize_executor.rb +76 -0
- data/lib/active_support/testing/stream.rb +3 -5
- data/lib/active_support/testing/tagged_logging.rb +1 -1
- data/lib/active_support/testing/time_helpers.rb +13 -2
- data/lib/active_support/time_with_zone.rb +62 -22
- data/lib/active_support/values/time_zone.rb +33 -14
- data/lib/active_support/version.rb +1 -1
- data/lib/active_support/xml_mini/jdom.rb +1 -1
- data/lib/active_support/xml_mini/libxml.rb +5 -5
- data/lib/active_support/xml_mini/libxmlsax.rb +1 -1
- data/lib/active_support/xml_mini/nokogiri.rb +4 -4
- 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 +5 -4
- data/lib/active_support.rb +16 -0
- metadata +28 -26
- data/lib/active_support/core_ext/marshal.rb +0 -26
- data/lib/active_support/dependencies/zeitwerk_integration.rb +0 -120
data/CHANGELOG.md
CHANGED
@@ -1,744 +1,494 @@
|
|
1
|
-
## Rails
|
1
|
+
## Rails 7.0.5 (May 24, 2023) ##
|
2
2
|
|
3
|
-
*
|
4
|
-
|
5
|
-
|
6
|
-
## Rails 6.1.7.1 (January 17, 2023) ##
|
7
|
-
|
8
|
-
* Avoid regex backtracking in Inflector.underscore
|
9
|
-
|
10
|
-
[CVE-2023-22796]
|
3
|
+
* Fixes TimeWithZone ArgumentError.
|
11
4
|
|
5
|
+
*Niklas Häusele*
|
12
6
|
|
13
|
-
## Rails 6.1.7 (September 09, 2022) ##
|
14
|
-
|
15
|
-
* No changes.
|
16
7
|
|
8
|
+
## Rails 7.0.4.3 (March 13, 2023) ##
|
17
9
|
|
18
|
-
|
10
|
+
* Implement SafeBuffer#bytesplice
|
19
11
|
|
20
|
-
|
12
|
+
[CVE-2023-28120]
|
21
13
|
|
22
14
|
|
23
|
-
## Rails
|
15
|
+
## Rails 7.0.4.2 (January 24, 2023) ##
|
24
16
|
|
25
17
|
* No changes.
|
26
18
|
|
27
19
|
|
28
|
-
## Rails
|
20
|
+
## Rails 7.0.4.1 (January 17, 2023) ##
|
29
21
|
|
30
|
-
*
|
31
|
-
|
32
|
-
Add the method `ERB::Util.xml_name_escape` to escape dangerous characters
|
33
|
-
in names of tags and names of attributes, following the specification of XML.
|
34
|
-
|
35
|
-
*Álvaro Martín Fraguas*
|
36
|
-
|
37
|
-
## Rails 6.1.5 (March 09, 2022) ##
|
38
|
-
|
39
|
-
* Fix `ActiveSupport::Duration.build` to support negative values.
|
40
|
-
|
41
|
-
The algorithm to collect the `parts` of the `ActiveSupport::Duration`
|
42
|
-
ignored the sign of the `value` and accumulated incorrect part values. This
|
43
|
-
impacted `ActiveSupport::Duration#sum` (which is dependent on `parts`) but
|
44
|
-
not `ActiveSupport::Duration#eql?` (which is dependent on `value`).
|
45
|
-
|
46
|
-
*Caleb Buxton*, *Braden Staudacher*
|
22
|
+
* Avoid regex backtracking in Inflector.underscore
|
47
23
|
|
48
|
-
|
49
|
-
return a `Time` with the timezone argument provided, if the caller was
|
50
|
-
initialized with a timezone argument.
|
24
|
+
[CVE-2023-22796]
|
51
25
|
|
52
|
-
Fixes [#42467](https://github.com/rails/rails/issues/42467).
|
53
26
|
|
54
|
-
|
27
|
+
## Rails 7.0.4 (September 09, 2022) ##
|
55
28
|
|
56
|
-
*
|
29
|
+
* Ensure `ActiveSupport::Testing::Isolation::Forking` closes pipes
|
57
30
|
|
58
|
-
|
31
|
+
Previously, `Forking.run_in_isolation` opened two ends of a pipe. The fork
|
32
|
+
process closed the read end, wrote to it, and then terminated (which
|
33
|
+
presumably closed the file descriptors on its end). The parent process
|
34
|
+
closed the write end, read from it, and returned, never closing the read
|
35
|
+
end.
|
59
36
|
|
60
|
-
|
37
|
+
This resulted in an accumulation of open file descriptors, which could
|
38
|
+
cause errors if the limit is reached.
|
61
39
|
|
62
|
-
*
|
40
|
+
*Sam Bostock*
|
63
41
|
|
42
|
+
* Redis cache store is now compatible with redis-rb 5.0.
|
64
43
|
|
65
|
-
|
44
|
+
*Jean Boussier*
|
66
45
|
|
67
|
-
*
|
46
|
+
* Fix `NoMethodError` on custom `ActiveSupport::Deprecation` behavior.
|
68
47
|
|
48
|
+
`ActiveSupport::Deprecation.behavior=` was supposed to accept any object
|
49
|
+
that responds to `call`, but in fact its internal implementation assumed that
|
50
|
+
this object could respond to `arity`, so it was restricted to only `Proc` objects.
|
69
51
|
|
70
|
-
|
52
|
+
This change removes this `arity` restriction of custom behaviors.
|
71
53
|
|
72
|
-
*
|
54
|
+
*Ryo Nakamura*
|
73
55
|
|
74
56
|
|
75
|
-
## Rails
|
57
|
+
## Rails 7.0.3.1 (July 12, 2022) ##
|
76
58
|
|
77
59
|
* No changes.
|
78
60
|
|
79
61
|
|
80
|
-
## Rails
|
62
|
+
## Rails 7.0.3 (May 09, 2022) ##
|
81
63
|
|
82
64
|
* No changes.
|
83
65
|
|
84
66
|
|
85
|
-
## Rails
|
86
|
-
|
87
|
-
* No changes.
|
67
|
+
## Rails 7.0.2.4 (April 26, 2022) ##
|
88
68
|
|
69
|
+
* Fix and add protections for XSS in `ActionView::Helpers` and `ERB::Util`.
|
89
70
|
|
90
|
-
|
91
|
-
|
92
|
-
* No changes.
|
71
|
+
Add the method `ERB::Util.xml_name_escape` to escape dangerous characters
|
72
|
+
in names of tags and names of attributes, following the specification of XML.
|
93
73
|
|
74
|
+
*Álvaro Martín Fraguas*
|
94
75
|
|
95
|
-
## Rails
|
76
|
+
## Rails 7.0.2.3 (March 08, 2022) ##
|
96
77
|
|
97
78
|
* No changes.
|
98
79
|
|
99
80
|
|
100
|
-
## Rails
|
81
|
+
## Rails 7.0.2.2 (February 11, 2022) ##
|
101
82
|
|
102
|
-
*
|
83
|
+
* Fix Reloader method signature to work with the new Executor signature
|
103
84
|
|
104
|
-
See [#42559](https://github.com/rails/rails/pull/42559).
|
105
85
|
|
106
|
-
|
86
|
+
## Rails 7.0.2.1 (February 11, 2022) ##
|
107
87
|
|
108
|
-
*
|
88
|
+
* No changes.
|
109
89
|
|
110
|
-
Fixes #42302.
|
111
90
|
|
112
|
-
|
91
|
+
## Rails 7.0.2 (February 08, 2022) ##
|
113
92
|
|
114
|
-
*
|
93
|
+
* Fix `ActiveSupport::EncryptedConfiguration` to be compatible with Psych 4
|
115
94
|
|
116
|
-
*
|
95
|
+
*Stephen Sugden*
|
117
96
|
|
118
|
-
*
|
97
|
+
* Improve `File.atomic_write` error handling.
|
119
98
|
|
120
|
-
*
|
99
|
+
*Daniel Pepper*
|
121
100
|
|
122
|
-
* Require a path for `config.cache_store = :file_store`.
|
123
101
|
|
124
|
-
|
102
|
+
## Rails 7.0.1 (January 06, 2022) ##
|
125
103
|
|
126
|
-
*
|
104
|
+
* Fix `Class#descendants` and `DescendantsTracker#descendants` compatibility with Ruby 3.1.
|
127
105
|
|
128
|
-
|
106
|
+
[The native `Class#descendants` was reverted prior to Ruby 3.1 release](https://bugs.ruby-lang.org/issues/14394#note-33),
|
107
|
+
but `Class#subclasses` was kept, breaking the feature detection.
|
129
108
|
|
109
|
+
*Jean Boussier*
|
130
110
|
|
131
|
-
## Rails 6.1.3.2 (May 05, 2021) ##
|
132
111
|
|
133
|
-
|
112
|
+
## Rails 7.0.0 (December 15, 2021) ##
|
134
113
|
|
114
|
+
* Fix `ActiveSupport::Duration.build` to support negative values.
|
135
115
|
|
136
|
-
|
116
|
+
The algorithm to collect the `parts` of the `ActiveSupport::Duration`
|
117
|
+
ignored the sign of the `value` and accumulated incorrect part values. This
|
118
|
+
impacted `ActiveSupport::Duration#sum` (which is dependent on `parts`) but
|
119
|
+
not `ActiveSupport::Duration#eql?` (which is dependent on `value`).
|
137
120
|
|
138
|
-
*
|
121
|
+
*Caleb Buxton*, *Braden Staudacher*
|
139
122
|
|
140
123
|
|
141
|
-
## Rails
|
124
|
+
## Rails 7.0.0.rc3 (December 14, 2021) ##
|
142
125
|
|
143
126
|
* No changes.
|
144
127
|
|
145
128
|
|
146
|
-
## Rails
|
129
|
+
## Rails 7.0.0.rc2 (December 14, 2021) ##
|
147
130
|
|
148
131
|
* No changes.
|
149
132
|
|
133
|
+
## Rails 7.0.0.rc1 (December 06, 2021) ##
|
150
134
|
|
151
|
-
|
152
|
-
|
153
|
-
* `ActiveSupport::Cache::MemCacheStore` now accepts an explicit `nil` for its `addresses` argument.
|
154
|
-
|
155
|
-
```ruby
|
156
|
-
config.cache_store = :mem_cache_store, nil
|
157
|
-
|
158
|
-
# is now equivalent to
|
135
|
+
* Deprecate passing a format to `#to_s` in favor of `#to_formatted_s` in `Array`, `Range`, `Date`, `DateTime`, `Time`,
|
136
|
+
`BigDecimal`, `Float` and, `Integer`.
|
159
137
|
|
160
|
-
|
161
|
-
|
162
|
-
# and is also equivalent to
|
163
|
-
|
164
|
-
config.cache_store = :mem_cache_store, ENV["MEMCACHE_SERVERS"] || "localhost:11211"
|
165
|
-
|
166
|
-
# which is the fallback behavior of Dalli
|
167
|
-
```
|
168
|
-
|
169
|
-
This helps those migrating from `:dalli_store`, where an explicit `nil` was permitted.
|
170
|
-
|
171
|
-
*Michael Overmeyer*
|
172
|
-
|
173
|
-
|
174
|
-
## Rails 6.1.1 (January 07, 2021) ##
|
175
|
-
|
176
|
-
* Change `IPAddr#to_json` to match the behavior of the json gem returning the string representation
|
177
|
-
instead of the instance variables of the object.
|
138
|
+
*Rafael Mendonça França*
|
178
139
|
|
179
|
-
|
140
|
+
* Document `ActiveSupport::Testing::Deprecation`.
|
180
141
|
|
181
|
-
|
182
|
-
IPAddr.new("127.0.0.1").to_json
|
183
|
-
# => "{\"addr\":2130706433,\"family\":2,\"mask_addr\":4294967295}"
|
184
|
-
```
|
142
|
+
*Sam Bostock & Sam Jordan*
|
185
143
|
|
186
|
-
|
144
|
+
* Add `Pathname#existence`.
|
187
145
|
|
188
146
|
```ruby
|
189
|
-
|
190
|
-
# => "\"127.0.0.1\""
|
147
|
+
Pathname.new("file").existence&.read
|
191
148
|
```
|
192
149
|
|
150
|
+
*Timo Schilling*
|
193
151
|
|
194
|
-
|
195
|
-
|
196
|
-
* Ensure `MemoryStore` disables compression by default. Reverts behavior of
|
197
|
-
`MemoryStore` to its prior rails `5.1` behavior.
|
198
|
-
|
199
|
-
*Max Gurewitz*
|
200
|
-
|
201
|
-
* Calling `iso8601` on negative durations retains the negative sign on individual
|
202
|
-
digits instead of prepending it.
|
203
|
-
|
204
|
-
This change is required so we can interoperate with PostgreSQL, which prefers
|
205
|
-
negative signs for each component.
|
206
|
-
|
207
|
-
Compatibility with other iso8601 parsers which support leading negatives as well
|
208
|
-
as negatives per component is still retained.
|
209
|
-
|
210
|
-
Before:
|
211
|
-
|
212
|
-
(-1.year - 1.day).iso8601
|
213
|
-
# => "-P1Y1D"
|
214
|
-
|
215
|
-
After:
|
216
|
-
|
217
|
-
(-1.year - 1.day).iso8601
|
218
|
-
# => "P-1Y-1D"
|
219
|
-
|
220
|
-
*Vipul A M*
|
221
|
-
|
222
|
-
* Remove deprecated `ActiveSupport::Notifications::Instrumenter#end=`.
|
152
|
+
* Remove deprecate `ActiveSupport::Multibyte::Unicode.default_normalization_form`.
|
223
153
|
|
224
154
|
*Rafael Mendonça França*
|
225
155
|
|
226
|
-
*
|
156
|
+
* Remove deprecated support to use `Range#include?` to check the inclusion of a value in
|
157
|
+
a date time range is deprecated.
|
227
158
|
|
228
159
|
*Rafael Mendonça França*
|
229
160
|
|
230
|
-
* Remove deprecated `
|
231
|
-
`ActiveSupport::Multibyte::Unicode.unpack_graphemes`,
|
232
|
-
`ActiveSupport::Multibyte::Unicode.normalize`,
|
233
|
-
`ActiveSupport::Multibyte::Unicode.downcase`,
|
234
|
-
`ActiveSupport::Multibyte::Unicode.upcase` and `ActiveSupport::Multibyte::Unicode.swapcase`.
|
161
|
+
* Remove deprecated `URI.parser`.
|
235
162
|
|
236
163
|
*Rafael Mendonça França*
|
237
164
|
|
238
|
-
* Remove deprecated `
|
165
|
+
* Remove deprecated `config.active_support.use_sha1_digests`.
|
239
166
|
|
240
167
|
*Rafael Mendonça França*
|
241
168
|
|
242
|
-
*
|
169
|
+
* Invoking `Object#with_options` without a `&block` argument returns the
|
170
|
+
`ActiveSupport::OptionMerger` instance.
|
243
171
|
|
244
|
-
*
|
245
|
-
|
246
|
-
* Remove deprecated file `active_support/core_ext/hash/transform_values`.
|
172
|
+
*Sean Doyle*
|
247
173
|
|
248
|
-
|
174
|
+
* `Rails.application.executor` hooks can now be called around every test
|
249
175
|
|
250
|
-
|
176
|
+
This helps to better simulate request or job local state being reset around tests and prevents state
|
177
|
+
leaking from one test to another.
|
251
178
|
|
252
|
-
|
253
|
-
|
254
|
-
* Remove deprecated file `active_support/core_ext/array/prepend_and_append`.
|
255
|
-
|
256
|
-
*Rafael Mendonça França*
|
257
|
-
|
258
|
-
* Remove deprecated file `active_support/core_ext/numeric/inquiry`.
|
259
|
-
|
260
|
-
*Rafael Mendonça França*
|
261
|
-
|
262
|
-
* Remove deprecated file `active_support/core_ext/module/reachable`.
|
263
|
-
|
264
|
-
*Rafael Mendonça França*
|
179
|
+
However it requires the executor hooks executed in the test environment to be re-entrant.
|
265
180
|
|
266
|
-
|
181
|
+
To enable this, set `config.active_support.executor_around_test_case = true` (this is the default in Rails 7).
|
267
182
|
|
268
|
-
*
|
269
|
-
|
270
|
-
* Remove deprecated `ActiveSupport::LoggerThreadSafeLevel#after_initialize`.
|
271
|
-
|
272
|
-
*Rafael Mendonça França*
|
273
|
-
|
274
|
-
* Remove deprecated `LoggerSilence` constant.
|
275
|
-
|
276
|
-
*Rafael Mendonça França*
|
277
|
-
|
278
|
-
* Remove deprecated fallback to `I18n.default_local` when `config.i18n.fallbacks` is empty.
|
279
|
-
|
280
|
-
*Rafael Mendonça França*
|
281
|
-
|
282
|
-
* Remove entries from local cache on `RedisCacheStore#delete_matched`
|
283
|
-
|
284
|
-
Fixes #38627
|
285
|
-
|
286
|
-
*ojab*
|
287
|
-
|
288
|
-
* Speed up `ActiveSupport::SecurityUtils.fixed_length_secure_compare` by using
|
289
|
-
`OpenSSL.fixed_length_secure_compare`, if available.
|
290
|
-
|
291
|
-
*Nate Matykiewicz*
|
292
|
-
|
293
|
-
* `ActiveSupport::Cache::MemCacheStore` now checks `ENV["MEMCACHE_SERVERS"]` before falling back to `"localhost:11211"` if configured without any addresses.
|
294
|
-
|
295
|
-
```ruby
|
296
|
-
config.cache_store = :mem_cache_store
|
297
|
-
|
298
|
-
# is now equivalent to
|
299
|
-
|
300
|
-
config.cache_store = :mem_cache_store, ENV["MEMCACHE_SERVERS"] || "localhost:11211"
|
301
|
-
|
302
|
-
# instead of
|
303
|
-
|
304
|
-
config.cache_store = :mem_cache_store, "localhost:11211" # ignores ENV["MEMCACHE_SERVERS"]
|
305
|
-
```
|
183
|
+
*Jean Boussier*
|
306
184
|
|
307
|
-
|
185
|
+
* `ActiveSupport::DescendantsTracker` now mostly delegate to `Class#descendants` on Ruby 3.1
|
308
186
|
|
309
|
-
|
310
|
-
it allows a subscriber to receive events for methods defined in the subscriber's ancestor class(es).
|
187
|
+
Ruby now provides a fast `Class#descendants` making `ActiveSupport::DescendantsTracker` mostly useless.
|
311
188
|
|
312
|
-
|
313
|
-
class ActionControllerSubscriber < ActiveSupport::Subscriber
|
314
|
-
attach_to :action_controller
|
189
|
+
As a result the following methods are deprecated:
|
315
190
|
|
316
|
-
|
317
|
-
|
318
|
-
end
|
191
|
+
- `ActiveSupport::DescendantsTracker.direct_descendants`
|
192
|
+
- `ActiveSupport::DescendantsTracker#direct_descendants`
|
319
193
|
|
320
|
-
|
321
|
-
info { "Redirected to #{event.payload[:location]}" }
|
322
|
-
end
|
323
|
-
end
|
194
|
+
*Jean Boussier*
|
324
195
|
|
325
|
-
|
326
|
-
# can provide its own instrumentation for certain events in the namespace
|
327
|
-
ActionControllerSubscriber.detach_from(:action_controller)
|
196
|
+
* Fix the `Digest::UUID.uuid_from_hash` behavior for namespace IDs that are different from the ones defined on `Digest::UUID`.
|
328
197
|
|
329
|
-
|
330
|
-
|
198
|
+
The new behavior will be enabled by setting the
|
199
|
+
`config.active_support.use_rfc4122_namespaced_uuids` option to `true`
|
200
|
+
and is the default for new apps.
|
331
201
|
|
332
|
-
|
333
|
-
|
334
|
-
|
202
|
+
The old behavior is the default for upgraded apps and will output a
|
203
|
+
deprecation warning every time a value that is different than one of
|
204
|
+
the constants defined on the `Digest::UUID` extension is used as the
|
205
|
+
namespace ID.
|
335
206
|
|
336
|
-
|
337
|
-
# using its own #start_processing implementation, while retaining ActionControllerSubscriber's instrumentation
|
338
|
-
# for "redirect_to.action_controller" notifications
|
339
|
-
end
|
340
|
-
```
|
207
|
+
*Alex Robbin*, *Erich Soares Machado*, *Eugene Kenny*
|
341
208
|
|
342
|
-
|
209
|
+
* `ActiveSupport::Inflector::Inflections#clear(:acronyms)` is now supported,
|
210
|
+
and `inflector.clear` / `inflector.clear(:all)` also clears acronyms.
|
343
211
|
|
344
|
-
*
|
212
|
+
*Alex Ghiculescu*, *Oliver Peate*
|
345
213
|
|
346
|
-
`config.active_support.use_sha1_digests` is deprecated in favour of `config.active_support.hash_digest_class = ::Digest::SHA1`.
|
347
214
|
|
348
|
-
|
215
|
+
## Rails 7.0.0.alpha2 (September 15, 2021) ##
|
349
216
|
|
350
|
-
*
|
217
|
+
* No changes.
|
351
218
|
|
352
|
-
*Jye Lee*
|
353
219
|
|
354
|
-
|
220
|
+
## Rails 7.0.0.alpha1 (September 15, 2021) ##
|
355
221
|
|
356
|
-
|
222
|
+
* `ActiveSupport::Dependencies` no longer installs a `const_missing` hook. Before this, you could push to the autoload paths and have constants autoloaded. This feature, known as the `classic` autoloader, has been removed.
|
357
223
|
|
358
|
-
*
|
224
|
+
*Xavier Noria*
|
359
225
|
|
360
|
-
*
|
361
|
-
to `read_multi` causing `fetch_multi` to not work properly
|
226
|
+
* Private internal classes of `ActiveSupport::Dependencies` have been deleted, like `ActiveSupport::Dependencies::Reference`, `ActiveSupport::Dependencies::Blamable`, and others.
|
362
227
|
|
363
|
-
*
|
228
|
+
*Xavier Noria*
|
364
229
|
|
365
|
-
*
|
366
|
-
and caused the provided `compression_threshold` to not be respected.
|
230
|
+
* The private API of `ActiveSupport::Dependencies` has been deleted. That includes methods like `hook!`, `unhook!`, `depend_on`, `require_or_load`, `mechanism`, and many others.
|
367
231
|
|
368
|
-
*
|
232
|
+
*Xavier Noria*
|
369
233
|
|
370
|
-
*
|
371
|
-
when reading entries written with `raw: true`.
|
234
|
+
* Improves the performance of `ActiveSupport::NumberHelper` formatters by avoiding the use of exceptions as flow control.
|
372
235
|
|
373
|
-
*
|
236
|
+
*Mike Dalessio*
|
374
237
|
|
375
|
-
*
|
376
|
-
`URI::DEFAULT_PARSER` instead.
|
238
|
+
* Removed rescue block from `ActiveSupport::Cache::RedisCacheStore#handle_exception`
|
377
239
|
|
378
|
-
|
240
|
+
Previously, if you provided a `error_handler` to `redis_cache_store`, any errors thrown by
|
241
|
+
the error handler would be rescued and logged only. Removed the `rescue` clause from `handle_exception`
|
242
|
+
to allow these to be thrown.
|
379
243
|
|
380
|
-
*
|
381
|
-
mode. The method is not deprecated as such (yet), but applications are
|
382
|
-
encouraged to not use it.
|
244
|
+
*Nicholas A. Stuart*
|
383
245
|
|
384
|
-
|
385
|
-
defensive with load order. Just refer to classes and modules normally. If
|
386
|
-
the constant name is dynamic, camelize if needed, and constantize.
|
246
|
+
* Allow entirely opting out of deprecation warnings.
|
387
247
|
|
388
|
-
|
248
|
+
Previously if you did `app.config.active_support.deprecation = :silence`, some work would
|
249
|
+
still be done on each call to `ActiveSupport::Deprecation.warn`. In very hot paths, this could
|
250
|
+
cause performance issues.
|
389
251
|
|
390
|
-
|
252
|
+
Now, you can make `ActiveSupport::Deprecation.warn` a no-op:
|
391
253
|
|
392
254
|
```ruby
|
393
|
-
|
394
|
-
:foo.ends_with?("o") # => true
|
255
|
+
config.active_support.report_deprecations = false
|
395
256
|
```
|
396
257
|
|
397
|
-
|
398
|
-
|
399
|
-
* Add override of unary plus for `ActiveSupport::Duration`.
|
258
|
+
This is the default in production for new apps. It is the equivalent to:
|
400
259
|
|
401
|
-
`+ 1.second` is now identical to `+1.second` to prevent errors
|
402
|
-
where a seemingly innocent change of formatting leads to a change in the code behavior.
|
403
|
-
|
404
|
-
Before:
|
405
|
-
```ruby
|
406
|
-
+1.second.class
|
407
|
-
# => ActiveSupport::Duration
|
408
|
-
(+ 1.second).class
|
409
|
-
# => Integer
|
410
|
-
```
|
411
|
-
|
412
|
-
After:
|
413
260
|
```ruby
|
414
|
-
|
415
|
-
|
416
|
-
(+ 1.second).class
|
417
|
-
# => ActiveSupport::Duration
|
261
|
+
config.active_support.deprecation = :silence
|
262
|
+
config.active_support.disallowed_deprecation = :silence
|
418
263
|
```
|
419
264
|
|
420
|
-
|
421
|
-
|
422
|
-
*Roman Kushnir*
|
423
|
-
|
424
|
-
* Add subsec to `ActiveSupport::TimeWithZone#inspect`.
|
425
|
-
|
426
|
-
Before:
|
265
|
+
but will take a more optimised code path.
|
427
266
|
|
428
|
-
|
429
|
-
# => "Thu, 22 Jun 2017 02:39:00 UTC +00:00"
|
430
|
-
Time.at(1498099140, 123456780, :nsec).in_time_zone.inspect
|
431
|
-
# => "Thu, 22 Jun 2017 02:39:00 UTC +00:00"
|
432
|
-
Time.at(1498099140 + Rational("1/3")).in_time_zone.inspect
|
433
|
-
# => "Thu, 22 Jun 2017 02:39:00 UTC +00:00"
|
434
|
-
|
435
|
-
After:
|
267
|
+
*Alex Ghiculescu*
|
436
268
|
|
437
|
-
|
438
|
-
|
439
|
-
Time.at(1498099140, 123456780, :nsec).in_time_zone.inspect
|
440
|
-
# => "Thu, 22 Jun 2017 02:39:00.123456780 UTC +00:00"
|
441
|
-
Time.at(1498099140 + Rational("1/3")).in_time_zone.inspect
|
442
|
-
# => "Thu, 22 Jun 2017 02:39:00.333333333 UTC +00:00"
|
269
|
+
* Faster tests by parallelizing only when overhead is justified by the number
|
270
|
+
of them.
|
443
271
|
|
444
|
-
|
272
|
+
Running tests in parallel adds overhead in terms of database
|
273
|
+
setup and fixture loading. Now, Rails will only parallelize test executions when
|
274
|
+
there are enough tests to make it worth it.
|
445
275
|
|
446
|
-
|
276
|
+
This threshold is 50 by default, and is configurable via config setting in
|
277
|
+
your test.rb:
|
447
278
|
|
448
279
|
```ruby
|
449
|
-
|
280
|
+
config.active_support.test_parallelization_threshold = 100
|
450
281
|
```
|
451
282
|
|
452
|
-
|
453
|
-
|
454
|
-
* Align `Range#cover?` extension behavior with Ruby behavior for backwards ranges.
|
455
|
-
|
456
|
-
`(1..10).cover?(5..3)` now returns `false`, as it does in plain Ruby.
|
457
|
-
|
458
|
-
Also update `#include?` and `#===` behavior to match.
|
459
|
-
|
460
|
-
*Michael Groeneman*
|
283
|
+
It's also configurable at the test case level:
|
461
284
|
|
462
|
-
|
463
|
-
|
464
|
-
|
465
|
-
|
466
|
-
|
467
|
-
|
468
|
-
New Rails 6.1 apps have it enabled by default, existing apps can upgrade
|
469
|
-
via the config in config/initializers/new_framework_defaults_6_1.rb
|
470
|
-
|
471
|
-
See the `utc_to_local_returns_utc_offset_times` documentation for details.
|
472
|
-
|
473
|
-
*Phil Ross*, *Jared Beck*
|
474
|
-
|
475
|
-
* Add Date and Time `#yesterday?` and `#tomorrow?` alongside `#today?`.
|
476
|
-
|
477
|
-
Aliased to `#prev_day?` and `#next_day?` to match the existing `#prev/next_day` methods.
|
478
|
-
|
479
|
-
*Jatin Dhankhar*
|
285
|
+
```ruby
|
286
|
+
class ActiveSupport::TestCase
|
287
|
+
parallelize threshold: 100
|
288
|
+
end
|
289
|
+
```
|
480
290
|
|
481
|
-
*
|
291
|
+
*Jorge Manrubia*
|
482
292
|
|
483
|
-
|
293
|
+
* OpenSSL constants are now used for Digest computations.
|
484
294
|
|
485
|
-
*
|
295
|
+
*Dirkjan Bussink*
|
486
296
|
|
487
|
-
|
488
|
-
|
489
|
-
|
490
|
-
and act accordingly.
|
297
|
+
* `TimeZone.iso8601` now accepts valid ordinal values similar to Ruby's `Date._iso8601` method.
|
298
|
+
A valid ordinal value will be converted to an instance of `TimeWithZone` using the `:year`
|
299
|
+
and `:yday` fragments returned from `Date._iso8601`.
|
491
300
|
|
492
301
|
```ruby
|
493
|
-
|
494
|
-
|
495
|
-
before_create { throw(:abort) }
|
496
|
-
|
497
|
-
def halted_callback_hook(filter, callback_name)
|
498
|
-
Rails.logger.info("Book couldn't be #{callback_name}d")
|
499
|
-
end
|
500
|
-
|
501
|
-
Book.create # => "Book couldn't be created"
|
502
|
-
book.save # => "Book couldn't be saved"
|
503
|
-
end
|
302
|
+
twz = ActiveSupport::TimeZone["Eastern Time (US & Canada)"].iso8601("21087")
|
303
|
+
twz.to_a[0, 6] == [0, 0, 0, 28, 03, 2021]
|
504
304
|
```
|
505
305
|
|
506
|
-
*
|
507
|
-
|
508
|
-
* Support `prepend` with `ActiveSupport::Concern`.
|
306
|
+
*Steve Laing*
|
509
307
|
|
510
|
-
|
308
|
+
* `Time#change` and methods that call it (e.g. `Time#advance`) will now
|
309
|
+
return a `Time` with the timezone argument provided, if the caller was
|
310
|
+
initialized with a timezone argument.
|
511
311
|
|
512
|
-
|
513
|
-
extend ActiveSupport::Concern
|
312
|
+
Fixes [#42467](https://github.com/rails/rails/issues/42467).
|
514
313
|
|
515
|
-
|
516
|
-
prepended do
|
517
|
-
end
|
518
|
-
end
|
314
|
+
*Alex Ghiculescu*
|
519
315
|
|
520
|
-
|
521
|
-
prepend Imposter
|
522
|
-
end
|
316
|
+
* Allow serializing any module or class to JSON by name.
|
523
317
|
|
524
|
-
|
525
|
-
updated: `concerning :Imposter, prepend: true do`.
|
318
|
+
*Tyler Rick*, *Zachary Scott*
|
526
319
|
|
527
|
-
|
320
|
+
* Raise `ActiveSupport::EncryptedFile::MissingKeyError` when the
|
321
|
+
`RAILS_MASTER_KEY` environment variable is blank (e.g. `""`).
|
528
322
|
|
529
|
-
*
|
530
|
-
in a date time range. It is recommended to use `Range#cover?` method
|
531
|
-
instead of `Range#include?` to check the inclusion of a value
|
532
|
-
in a date time range.
|
323
|
+
*Sunny Ripert*
|
533
324
|
|
534
|
-
|
325
|
+
* The `from:` option is added to `ActiveSupport::TestCase#assert_no_changes`.
|
535
326
|
|
536
|
-
|
327
|
+
It permits asserting on the initial value that is expected not to change.
|
537
328
|
|
538
329
|
```ruby
|
539
|
-
|
540
|
-
|
541
|
-
|
542
|
-
number_to_human_size(483989, precision: 2, round_mode: :up) # => "480 KB"
|
543
|
-
number_to_human(489939, precision: 2, round_mode: :floor) # => "480 Thousand"
|
544
|
-
|
545
|
-
485000.to_s(:human, precision: 2, round_mode: :half_even) # => "480 Thousand"
|
330
|
+
assert_no_changes -> { Status.all_good? }, from: true do
|
331
|
+
post :create, params: { status: { ok: true } }
|
332
|
+
end
|
546
333
|
```
|
547
334
|
|
548
|
-
*
|
549
|
-
|
550
|
-
* `Array#to_sentence` no longer returns a frozen string.
|
335
|
+
*George Claghorn*
|
551
336
|
|
552
|
-
|
337
|
+
* Deprecate `ActiveSupport::SafeBuffer`'s incorrect implicit conversion of objects into string.
|
553
338
|
|
554
|
-
|
555
|
-
|
556
|
-
|
557
|
-
|
558
|
-
|
559
|
-
['one', 'two'].to_sentence.frozen?
|
560
|
-
# => false
|
561
|
-
|
562
|
-
*Nicolas Dular*
|
563
|
-
|
564
|
-
* When an instance of `ActiveSupport::Duration` is converted to an `iso8601` duration string, if `weeks` are mixed with `date` parts, the `week` part will be converted to days.
|
565
|
-
This keeps the parser and serializer on the same page.
|
566
|
-
|
567
|
-
```ruby
|
568
|
-
duration = ActiveSupport::Duration.build(1000000)
|
569
|
-
# 1 week, 4 days, 13 hours, 46 minutes, and 40.0 seconds
|
339
|
+
Except for a few methods like `String#%`, objects must implement `#to_str`
|
340
|
+
to be implicitly converted to a String in string operations. In some
|
341
|
+
circumstances `ActiveSupport::SafeBuffer` was incorrectly calling the
|
342
|
+
explicit conversion method (`#to_s`) on them. This behavior is now
|
343
|
+
deprecated.
|
570
344
|
|
571
|
-
|
572
|
-
# P11DT13H46M40S
|
345
|
+
*Jean Boussier*
|
573
346
|
|
574
|
-
|
575
|
-
# 11 days, 13 hours, 46 minutes, and 40 seconds
|
347
|
+
* Allow nested access to keys on `Rails.application.credentials`.
|
576
348
|
|
577
|
-
|
578
|
-
# 1 week
|
349
|
+
Previously only top level keys in `credentials.yml.enc` could be accessed with method calls. Now any key can.
|
579
350
|
|
580
|
-
|
581
|
-
# P1W
|
351
|
+
For example, given these secrets:
|
582
352
|
|
583
|
-
|
584
|
-
|
353
|
+
```yml
|
354
|
+
aws:
|
355
|
+
access_key_id: 123
|
356
|
+
secret_access_key: 345
|
585
357
|
```
|
586
358
|
|
587
|
-
|
588
|
-
|
589
|
-
* Add block support to `ActiveSupport::Testing::TimeHelpers#travel_back`.
|
590
|
-
|
591
|
-
*Tim Masliuchenko*
|
592
|
-
|
593
|
-
* Update `ActiveSupport::Messages::Metadata#fresh?` to work for cookies with expiry set when
|
594
|
-
`ActiveSupport.parse_json_times = true`.
|
359
|
+
`Rails.application.credentials.aws.access_key_id` will now return the same thing as
|
360
|
+
`Rails.application.credentials.aws[:access_key_id]`.
|
595
361
|
|
596
|
-
*
|
362
|
+
*Alex Ghiculescu*
|
597
363
|
|
598
|
-
*
|
364
|
+
* Added a faster and more compact `ActiveSupport::Cache` serialization format.
|
599
365
|
|
600
|
-
|
366
|
+
It can be enabled with `config.active_support.cache_format_version = 7.0` or
|
367
|
+
`config.load_defaults 7.0`. Regardless of the configuration Active Support
|
368
|
+
7.0 can read cache entries serialized by Active Support 6.1 which allows to
|
369
|
+
upgrade without invalidating the cache. However Rails 6.1 can't read the
|
370
|
+
new format, so all readers must be upgraded before the new format is enabled.
|
601
371
|
|
602
|
-
*
|
603
|
-
and endless range targets.
|
372
|
+
*Jean Boussier*
|
604
373
|
|
605
|
-
|
374
|
+
* Add `Enumerable#sole`, per `ActiveRecord::FinderMethods#sole`. Returns the
|
375
|
+
sole item of the enumerable, raising if no items are found, or if more than
|
376
|
+
one is.
|
606
377
|
|
607
|
-
*
|
378
|
+
*Asherah Connor*
|
608
379
|
|
609
|
-
|
380
|
+
* Freeze `ActiveSupport::Duration#parts` and remove writer methods.
|
610
381
|
|
611
|
-
|
612
|
-
`ActiveSupport::Duration` unless `value` is of type `Numeric`.
|
382
|
+
Durations are meant to be value objects and should not be mutated.
|
613
383
|
|
614
|
-
|
615
|
-
`ActiveSupport::Duration` comparisons would fail confusingly
|
616
|
-
or return unexpected results when comparing durations built from instances of `String`.
|
384
|
+
*Andrew White*
|
617
385
|
|
618
|
-
|
386
|
+
* Fix `ActiveSupport::TimeZone#utc_to_local` with fractional seconds.
|
619
387
|
|
620
|
-
|
621
|
-
|
622
|
-
|
388
|
+
When `utc_to_local_returns_utc_offset_times` is false and the time
|
389
|
+
instance had fractional seconds the new UTC time instance was out by
|
390
|
+
a factor of 1,000,000 as the `Time.utc` constructor takes a usec
|
391
|
+
value and not a fractional second value.
|
623
392
|
|
624
|
-
|
625
|
-
# => false
|
393
|
+
*Andrew White*
|
626
394
|
|
627
|
-
|
628
|
-
# => false
|
395
|
+
* Add `expires_at` argument to `ActiveSupport::Cache` `write` and `fetch` to set a cache entry TTL as an absolute time.
|
629
396
|
|
630
|
-
|
631
|
-
|
397
|
+
```ruby
|
398
|
+
Rails.cache.write(key, value, expires_at: Time.now.at_end_of_hour)
|
399
|
+
```
|
632
400
|
|
633
|
-
|
634
|
-
# => ArgumentError (comparison of String with ActiveSupport::Duration failed)
|
401
|
+
*Jean Boussier*
|
635
402
|
|
636
|
-
|
403
|
+
* Deprecate `ActiveSupport::TimeWithZone.name` so that from Rails 7.1 it will use the default implementation.
|
637
404
|
|
638
|
-
|
639
|
-
# => TypeError (can't build an ActiveSupport::Duration from a String)
|
405
|
+
*Andrew White*
|
640
406
|
|
641
|
-
|
407
|
+
* Deprecates Rails custom `Enumerable#sum` and `Array#sum` in favor of Ruby's native implementation which
|
408
|
+
is considerably faster.
|
642
409
|
|
643
|
-
|
410
|
+
Ruby requires an initializer for non-numeric type as per examples below:
|
644
411
|
|
645
|
-
|
412
|
+
```ruby
|
413
|
+
%w[foo bar].sum('')
|
414
|
+
# instead of %w[foo bar].sum
|
646
415
|
|
647
|
-
|
648
|
-
|
416
|
+
[[1, 2], [3, 4, 5]].sum([])
|
417
|
+
# instead of [[1, 2], [3, 4, 5]].sum
|
418
|
+
```
|
649
419
|
|
650
|
-
*
|
420
|
+
*Alberto Mota*
|
651
421
|
|
652
|
-
*
|
422
|
+
* Tests parallelization is now disabled when running individual files to prevent the setup overhead.
|
653
423
|
|
654
|
-
|
655
|
-
thread_mattr_reader :client, default: Api::Client.new
|
656
|
-
end
|
424
|
+
It can still be enforced if the environment variable `PARALLEL_WORKERS` is present and set to a value greater than 1.
|
657
425
|
|
658
|
-
*
|
426
|
+
*Ricardo Díaz*
|
659
427
|
|
660
|
-
*
|
661
|
-
an Enumerable (also `compact_blank!` on Hash, Array, ActionController::Parameters).
|
428
|
+
* Fix proxying keyword arguments in `ActiveSupport::CurrentAttributes`.
|
662
429
|
|
663
|
-
*
|
430
|
+
*Marcin Kołodziej*
|
664
431
|
|
665
|
-
*
|
432
|
+
* Add `Enumerable#maximum` and `Enumerable#minimum` to easily calculate the maximum or minimum from extracted
|
433
|
+
elements of an enumerable.
|
666
434
|
|
667
|
-
|
668
|
-
|
435
|
+
```ruby
|
436
|
+
payments = [Payment.new(5), Payment.new(15), Payment.new(10)]
|
669
437
|
|
670
|
-
|
438
|
+
payments.minimum(:price) # => 5
|
439
|
+
payments.maximum(:price) # => 15
|
440
|
+
```
|
671
441
|
|
672
|
-
|
673
|
-
|
674
|
-
puts "Main is debug? #{logger.debug?}"
|
442
|
+
This also allows passing enumerables to `fresh_when` and `stale?` in Action Controller.
|
443
|
+
See PR [#41404](https://github.com/rails/rails/pull/41404) for an example.
|
675
444
|
|
676
|
-
|
677
|
-
logger.local_level = 0
|
678
|
-
puts "Thread is debug? #{logger.debug?}"
|
679
|
-
}.resume
|
445
|
+
*Ayrton De Craene*
|
680
446
|
|
681
|
-
|
447
|
+
* `ActiveSupport::Cache::MemCacheStore` now accepts an explicit `nil` for its `addresses` argument.
|
682
448
|
|
683
|
-
|
449
|
+
```ruby
|
450
|
+
config.cache_store = :mem_cache_store, nil
|
684
451
|
|
685
|
-
|
686
|
-
Thread is debug? true
|
687
|
-
Main is debug? true
|
452
|
+
# is now equivalent to
|
688
453
|
|
689
|
-
|
454
|
+
config.cache_store = :mem_cache_store
|
690
455
|
|
691
|
-
|
692
|
-
Thread is debug? true
|
693
|
-
Main is debug? false
|
456
|
+
# and is also equivalent to
|
694
457
|
|
695
|
-
|
458
|
+
config.cache_store = :mem_cache_store, ENV["MEMCACHE_SERVERS"] || "localhost:11211"
|
696
459
|
|
697
|
-
|
460
|
+
# which is the fallback behavior of Dalli
|
461
|
+
```
|
698
462
|
|
699
|
-
|
700
|
-
passed at the constructor level.
|
463
|
+
This helps those migrating from `:dalli_store`, where an explicit `nil` was permitted.
|
701
464
|
|
702
|
-
|
465
|
+
*Michael Overmeyer*
|
703
466
|
|
704
|
-
|
705
|
-
crypt.decrypt_and_verify(encrypted_message, on_rotation: proc { ... })
|
706
|
-
crypt.decrypt_and_verify(another_encrypted_message, on_rotation: proc { ... })
|
467
|
+
* Add `Enumerable#in_order_of` to put an Enumerable in a certain order by a key.
|
707
468
|
|
708
|
-
|
469
|
+
*DHH*
|
709
470
|
|
710
|
-
|
711
|
-
|
712
|
-
crypt.decrypt_and_verify(another_encrypted_message)
|
471
|
+
* `ActiveSupport::Inflector.camelize` behaves expected when provided a symbol `:upper` or `:lower` argument. Matches
|
472
|
+
`String#camelize` behavior.
|
713
473
|
|
714
|
-
*
|
474
|
+
*Alex Ghiculescu*
|
715
475
|
|
716
|
-
* `
|
717
|
-
|
718
|
-
the user to specify they want `nil` returned in this case.
|
476
|
+
* Raises an `ArgumentError` when the first argument of `ActiveSupport::Notification.subscribe` is
|
477
|
+
invalid.
|
719
478
|
|
720
|
-
*
|
479
|
+
*Vipul A M*
|
721
480
|
|
722
|
-
* `
|
723
|
-
and a frozen string if it were long enough to be truncated. Now truncate will
|
724
|
-
consistently return an unfrozen string regardless. This behavior is consistent
|
725
|
-
with `gsub` and `strip`.
|
481
|
+
* `HashWithIndifferentAccess#deep_transform_keys` now returns a `HashWithIndifferentAccess` instead of a `Hash`.
|
726
482
|
|
727
|
-
|
483
|
+
*Nathaniel Woodthorpe*
|
728
484
|
|
729
|
-
|
730
|
-
# => true
|
731
|
-
'foobar'.truncate(6).frozen?
|
732
|
-
# => false
|
485
|
+
* Consume dalli’s `cache_nils` configuration as `ActiveSupport::Cache`'s `skip_nil` when using `MemCacheStore`.
|
733
486
|
|
734
|
-
|
487
|
+
*Ritikesh G*
|
735
488
|
|
736
|
-
|
737
|
-
# => false
|
738
|
-
'foobar'.truncate(6).frozen?
|
739
|
-
# => false
|
489
|
+
* Add `RedisCacheStore#stats` method similar to `MemCacheStore#stats`. Calls `redis#info` internally.
|
740
490
|
|
741
|
-
*
|
491
|
+
*Ritikesh G*
|
742
492
|
|
743
493
|
|
744
|
-
Please check [6-
|
494
|
+
Please check [6-1-stable](https://github.com/rails/rails/blob/6-1-stable/activesupport/CHANGELOG.md) for previous changes.
|