activesupport 6.1.7.10 → 7.0.0.alpha1
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 +151 -664
- data/MIT-LICENSE +1 -1
- data/lib/active_support/actionable_error.rb +1 -1
- data/lib/active_support/array_inquirer.rb +0 -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 +119 -28
- data/lib/active_support/cache/memory_store.rb +21 -13
- data/lib/active_support/cache/null_store.rb +10 -2
- data/lib/active_support/cache/redis_cache_store.rb +39 -59
- data/lib/active_support/cache/strategy/local_cache.rb +29 -49
- data/lib/active_support/cache.rb +189 -45
- data/lib/active_support/callbacks.rb +35 -31
- 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 +6 -3
- 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 +6 -6
- data/lib/active_support/core_ext/array/grouping.rb +6 -6
- data/lib/active_support/core_ext/big_decimal/conversions.rb +1 -1
- data/lib/active_support/core_ext/date/blank.rb +1 -1
- data/lib/active_support/core_ext/date/calculations.rb +2 -2
- data/lib/active_support/core_ext/date_time/blank.rb +1 -1
- data/lib/active_support/core_ext/digest/uuid.rb +13 -13
- data/lib/active_support/core_ext/enumerable.rb +64 -12
- data/lib/active_support/core_ext/file/atomic.rb +1 -1
- data/lib/active_support/core_ext/hash/keys.rb +1 -1
- data/lib/active_support/core_ext/kernel/reporting.rb +4 -4
- 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 +2 -2
- 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 +11 -0
- data/lib/active_support/core_ext/object/json.rb +29 -24
- 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/range/compare_range.rb +0 -25
- data/lib/active_support/core_ext/range/each.rb +1 -1
- data/lib/active_support/core_ext/range/include_time_with_zone.rb +1 -1
- 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/output_safety.rb +60 -68
- data/lib/active_support/core_ext/symbol/starts_ends_with.rb +0 -8
- data/lib/active_support/core_ext/time/calculations.rb +4 -5
- data/lib/active_support/core_ext/time/zones.rb +2 -17
- data/lib/active_support/core_ext/uri.rb +0 -14
- data/lib/active_support/current_attributes.rb +17 -2
- 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 +4 -1
- data/lib/active_support/deprecation/method_wrappers.rb +3 -3
- data/lib/active_support/deprecation/proxy_wrappers.rb +1 -1
- data/lib/active_support/deprecation.rb +1 -1
- data/lib/active_support/descendants_tracker.rb +12 -9
- 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 +80 -52
- data/lib/active_support/encrypted_configuration.rb +11 -1
- data/lib/active_support/encrypted_file.rb +10 -9
- data/lib/active_support/environment_inquirer.rb +1 -1
- data/lib/active_support/evented_file_update_checker.rb +1 -1
- data/lib/active_support/execution_wrapper.rb +13 -16
- data/lib/active_support/fork_tracker.rb +2 -4
- data/lib/active_support/gem_version.rb +4 -4
- data/lib/active_support/hash_with_indifferent_access.rb +3 -1
- data/lib/active_support/i18n.rb +1 -0
- data/lib/active_support/inflector/inflections.rb +11 -4
- data/lib/active_support/inflector/methods.rb +23 -46
- data/lib/active_support/json/encoding.rb +3 -3
- data/lib/active_support/key_generator.rb +18 -1
- data/lib/active_support/locale/en.yml +1 -1
- data/lib/active_support/log_subscriber.rb +13 -3
- data/lib/active_support/logger_thread_safe_level.rb +5 -13
- data/lib/active_support/message_encryptor.rb +3 -3
- data/lib/active_support/message_verifier.rb +4 -4
- data/lib/active_support/messages/metadata.rb +2 -2
- data/lib/active_support/multibyte/chars.rb +10 -11
- data/lib/active_support/multibyte.rb +1 -1
- data/lib/active_support/notifications/fanout.rb +31 -11
- data/lib/active_support/notifications/instrumenter.rb +17 -0
- data/lib/active_support/notifications.rb +10 -0
- 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 +0 -2
- data/lib/active_support/option_merger.rb +4 -16
- data/lib/active_support/ordered_hash.rb +1 -1
- data/lib/active_support/parameter_filter.rb +5 -0
- data/lib/active_support/per_thread_registry.rb +1 -1
- data/lib/active_support/railtie.rb +33 -10
- data/lib/active_support/reloader.rb +1 -1
- data/lib/active_support/rescuable.rb +2 -2
- data/lib/active_support/secure_compare_rotator.rb +1 -1
- data/lib/active_support/string_inquirer.rb +0 -2
- data/lib/active_support/subscriber.rb +5 -0
- data/lib/active_support/test_case.rb +9 -21
- data/lib/active_support/testing/assertions.rb +34 -4
- data/lib/active_support/testing/deprecation.rb +1 -1
- data/lib/active_support/testing/isolation.rb +1 -1
- 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 +19 -6
- data/lib/active_support/values/time_zone.rb +25 -11
- 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 +2 -1
- data/lib/active_support.rb +14 -1
- metadata +11 -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,788 +1,275 @@
|
|
1
|
-
## Rails
|
1
|
+
## Rails 7.0.0.alpha1 (September 15, 2021) ##
|
2
2
|
|
3
|
-
*
|
3
|
+
* `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.
|
4
4
|
|
5
|
+
*Xavier Noria*
|
5
6
|
|
6
|
-
|
7
|
-
|
8
|
-
* No changes.
|
9
|
-
|
10
|
-
|
11
|
-
## Rails 6.1.7.8 (June 04, 2024) ##
|
12
|
-
|
13
|
-
* No changes.
|
14
|
-
|
15
|
-
|
16
|
-
## Rails 6.1.7.7 (February 21, 2024) ##
|
17
|
-
|
18
|
-
* No changes.
|
19
|
-
|
20
|
-
|
21
|
-
## Rails 6.1.7.6 (August 22, 2023) ##
|
22
|
-
|
23
|
-
* No changes.
|
24
|
-
|
25
|
-
|
26
|
-
## Rails 6.1.7.5 (August 22, 2023) ##
|
27
|
-
|
28
|
-
* Use a temporary file for storing unencrypted files while editing
|
29
|
-
|
30
|
-
[CVE-2023-38037]
|
31
|
-
|
32
|
-
|
33
|
-
## Rails 6.1.7.4 (June 26, 2023) ##
|
34
|
-
|
35
|
-
* No changes.
|
36
|
-
|
37
|
-
|
38
|
-
## Rails 6.1.7.3 (March 13, 2023) ##
|
39
|
-
|
40
|
-
* Implement SafeBuffer#bytesplice
|
41
|
-
|
42
|
-
[CVE-2023-28120]
|
43
|
-
|
44
|
-
|
45
|
-
## Rails 6.1.7.2 (January 24, 2023) ##
|
46
|
-
|
47
|
-
* No changes.
|
48
|
-
|
49
|
-
|
50
|
-
## Rails 6.1.7.1 (January 17, 2023) ##
|
51
|
-
|
52
|
-
* Avoid regex backtracking in Inflector.underscore
|
53
|
-
|
54
|
-
[CVE-2023-22796]
|
55
|
-
|
56
|
-
|
57
|
-
## Rails 6.1.7 (September 09, 2022) ##
|
58
|
-
|
59
|
-
* No changes.
|
60
|
-
|
61
|
-
|
62
|
-
## Rails 6.1.6.1 (July 12, 2022) ##
|
63
|
-
|
64
|
-
* No changes.
|
65
|
-
|
66
|
-
|
67
|
-
## Rails 6.1.6 (May 09, 2022) ##
|
68
|
-
|
69
|
-
* No changes.
|
70
|
-
|
71
|
-
|
72
|
-
## Rails 6.1.5.1 (April 26, 2022) ##
|
73
|
-
|
74
|
-
* Fix and add protections for XSS in `ActionView::Helpers` and `ERB::Util`.
|
75
|
-
|
76
|
-
Add the method `ERB::Util.xml_name_escape` to escape dangerous characters
|
77
|
-
in names of tags and names of attributes, following the specification of XML.
|
78
|
-
|
79
|
-
*Álvaro Martín Fraguas*
|
80
|
-
|
81
|
-
## Rails 6.1.5 (March 09, 2022) ##
|
82
|
-
|
83
|
-
* Fix `ActiveSupport::Duration.build` to support negative values.
|
84
|
-
|
85
|
-
The algorithm to collect the `parts` of the `ActiveSupport::Duration`
|
86
|
-
ignored the sign of the `value` and accumulated incorrect part values. This
|
87
|
-
impacted `ActiveSupport::Duration#sum` (which is dependent on `parts`) but
|
88
|
-
not `ActiveSupport::Duration#eql?` (which is dependent on `value`).
|
89
|
-
|
90
|
-
*Caleb Buxton*, *Braden Staudacher*
|
91
|
-
|
92
|
-
* `Time#change` and methods that call it (eg. `Time#advance`) will now
|
93
|
-
return a `Time` with the timezone argument provided, if the caller was
|
94
|
-
initialized with a timezone argument.
|
95
|
-
|
96
|
-
Fixes [#42467](https://github.com/rails/rails/issues/42467).
|
97
|
-
|
98
|
-
*Alex Ghiculescu*
|
99
|
-
|
100
|
-
* Clone to keep extended Logger methods for tagged logger.
|
101
|
-
|
102
|
-
*Orhan Toy*
|
103
|
-
|
104
|
-
* `assert_changes` works on including `ActiveSupport::Assertions` module.
|
105
|
-
|
106
|
-
*Pedro Medeiros*
|
107
|
-
|
108
|
-
|
109
|
-
## Rails 6.1.4.7 (March 08, 2022) ##
|
110
|
-
|
111
|
-
* No changes.
|
112
|
-
|
113
|
-
|
114
|
-
## Rails 6.1.4.6 (February 11, 2022) ##
|
115
|
-
|
116
|
-
* Fix Reloader method signature to work with the new Executor signature
|
117
|
-
|
118
|
-
|
119
|
-
## Rails 6.1.4.5 (February 11, 2022) ##
|
120
|
-
|
121
|
-
* No changes.
|
122
|
-
|
123
|
-
|
124
|
-
## Rails 6.1.4.4 (December 15, 2021) ##
|
125
|
-
|
126
|
-
* No changes.
|
127
|
-
|
128
|
-
|
129
|
-
## Rails 6.1.4.3 (December 14, 2021) ##
|
130
|
-
|
131
|
-
* No changes.
|
132
|
-
|
133
|
-
|
134
|
-
## Rails 6.1.4.2 (December 14, 2021) ##
|
135
|
-
|
136
|
-
* No changes.
|
137
|
-
|
138
|
-
|
139
|
-
## Rails 6.1.4.1 (August 19, 2021) ##
|
140
|
-
|
141
|
-
* No changes.
|
142
|
-
|
143
|
-
|
144
|
-
## Rails 6.1.4 (June 24, 2021) ##
|
145
|
-
|
146
|
-
* MemCacheStore: convert any underlying value (including `false`) to an `Entry`.
|
147
|
-
|
148
|
-
See [#42559](https://github.com/rails/rails/pull/42559).
|
149
|
-
|
150
|
-
*Alex Ghiculescu*
|
151
|
-
|
152
|
-
* Fix bug in `number_with_precision` when using large `BigDecimal` values.
|
153
|
-
|
154
|
-
Fixes #42302.
|
155
|
-
|
156
|
-
*Federico Aldunate*, *Zachary Scott*
|
157
|
-
|
158
|
-
* Check byte size instead of length on `secure_compare`.
|
159
|
-
|
160
|
-
*Tietew*
|
161
|
-
|
162
|
-
* Fix `Time.at` to not lose `:in` option.
|
163
|
-
|
164
|
-
*Ryuta Kamizono*
|
165
|
-
|
166
|
-
* Require a path for `config.cache_store = :file_store`.
|
167
|
-
|
168
|
-
*Alex Ghiculescu*
|
169
|
-
|
170
|
-
* Avoid having to store complex object in the default translation file.
|
171
|
-
|
172
|
-
*Rafael Mendonça França*
|
173
|
-
|
174
|
-
|
175
|
-
## Rails 6.1.3.2 (May 05, 2021) ##
|
176
|
-
|
177
|
-
* No changes.
|
178
|
-
|
179
|
-
|
180
|
-
## Rails 6.1.3.1 (March 26, 2021) ##
|
181
|
-
|
182
|
-
* No changes.
|
183
|
-
|
184
|
-
|
185
|
-
## Rails 6.1.3 (February 17, 2021) ##
|
186
|
-
|
187
|
-
* No changes.
|
188
|
-
|
189
|
-
|
190
|
-
## Rails 6.1.2.1 (February 10, 2021) ##
|
191
|
-
|
192
|
-
* No changes.
|
193
|
-
|
194
|
-
|
195
|
-
## Rails 6.1.2 (February 09, 2021) ##
|
196
|
-
|
197
|
-
* `ActiveSupport::Cache::MemCacheStore` now accepts an explicit `nil` for its `addresses` argument.
|
7
|
+
* Private internal classes of `ActiveSupport::Dependencies` have been deleted, like `ActiveSupport::Dependencies::Reference`, `ActiveSupport::Dependencies::Blamable`, and others.
|
198
8
|
|
199
|
-
|
200
|
-
config.cache_store = :mem_cache_store, nil
|
201
|
-
|
202
|
-
# is now equivalent to
|
9
|
+
*Xavier Noria*
|
203
10
|
|
204
|
-
|
11
|
+
* The private API of `ActiveSupport::Dependencies` has been deleted. That includes methods like `hook!`, `unhook!`, `depend_on`, `require_or_load`, `mechanism`, and many others.
|
205
12
|
|
206
|
-
|
13
|
+
*Xavier Noria*
|
207
14
|
|
208
|
-
|
15
|
+
* Improves the performance of `ActiveSupport::NumberHelper` formatters by avoiding the use of exceptions as flow control.
|
209
16
|
|
210
|
-
|
211
|
-
```
|
17
|
+
*Mike Dalessio*
|
212
18
|
|
213
|
-
|
19
|
+
* Removed rescue block from `ActiveSupport::Cache::RedisCacheStore#handle_exception`
|
214
20
|
|
215
|
-
|
21
|
+
Previously, if you provided a `error_handler` to `redis_cache_store`, any errors thrown by
|
22
|
+
the error handler would be rescued and logged only. Removed the `rescue` clause from `handle_exception`
|
23
|
+
to allow these to be thrown.
|
216
24
|
|
25
|
+
*Nicholas A. Stuart*
|
217
26
|
|
218
|
-
|
27
|
+
* Allow entirely opting out of deprecation warnings.
|
219
28
|
|
220
|
-
|
221
|
-
|
29
|
+
Previously if you did `app.config.active_support.deprecation = :silence`, some work would
|
30
|
+
still be done on each call to `ActiveSupport::Deprecation.warn`. In very hot paths, this could
|
31
|
+
cause performance issues.
|
222
32
|
|
223
|
-
|
33
|
+
Now, you can make `ActiveSupport::Deprecation.warn` a no-op:
|
224
34
|
|
225
35
|
```ruby
|
226
|
-
|
227
|
-
# => "{\"addr\":2130706433,\"family\":2,\"mask_addr\":4294967295}"
|
36
|
+
config.active_support.report_deprecations = false
|
228
37
|
```
|
229
38
|
|
230
|
-
|
39
|
+
This is the default in production for new apps. It is the equivalent to:
|
231
40
|
|
232
41
|
```ruby
|
233
|
-
|
234
|
-
|
42
|
+
config.active_support.deprecation = :silence
|
43
|
+
config.active_support.disallowed_deprecation = :silence
|
235
44
|
```
|
236
45
|
|
46
|
+
but will take a more optimised code path.
|
237
47
|
|
238
|
-
|
239
|
-
|
240
|
-
* Ensure `MemoryStore` disables compression by default. Reverts behavior of
|
241
|
-
`MemoryStore` to its prior rails `5.1` behavior.
|
242
|
-
|
243
|
-
*Max Gurewitz*
|
244
|
-
|
245
|
-
* Calling `iso8601` on negative durations retains the negative sign on individual
|
246
|
-
digits instead of prepending it.
|
247
|
-
|
248
|
-
This change is required so we can interoperate with PostgreSQL, which prefers
|
249
|
-
negative signs for each component.
|
250
|
-
|
251
|
-
Compatibility with other iso8601 parsers which support leading negatives as well
|
252
|
-
as negatives per component is still retained.
|
253
|
-
|
254
|
-
Before:
|
255
|
-
|
256
|
-
(-1.year - 1.day).iso8601
|
257
|
-
# => "-P1Y1D"
|
258
|
-
|
259
|
-
After:
|
260
|
-
|
261
|
-
(-1.year - 1.day).iso8601
|
262
|
-
# => "P-1Y-1D"
|
263
|
-
|
264
|
-
*Vipul A M*
|
265
|
-
|
266
|
-
* Remove deprecated `ActiveSupport::Notifications::Instrumenter#end=`.
|
267
|
-
|
268
|
-
*Rafael Mendonça França*
|
269
|
-
|
270
|
-
* Deprecate `ActiveSupport::Multibyte::Unicode.default_normalization_form`.
|
271
|
-
|
272
|
-
*Rafael Mendonça França*
|
273
|
-
|
274
|
-
* Remove deprecated `ActiveSupport::Multibyte::Unicode.pack_graphemes`,
|
275
|
-
`ActiveSupport::Multibyte::Unicode.unpack_graphemes`,
|
276
|
-
`ActiveSupport::Multibyte::Unicode.normalize`,
|
277
|
-
`ActiveSupport::Multibyte::Unicode.downcase`,
|
278
|
-
`ActiveSupport::Multibyte::Unicode.upcase` and `ActiveSupport::Multibyte::Unicode.swapcase`.
|
279
|
-
|
280
|
-
*Rafael Mendonça França*
|
281
|
-
|
282
|
-
* Remove deprecated `ActiveSupport::Multibyte::Chars#consumes?` and `ActiveSupport::Multibyte::Chars#normalize`.
|
283
|
-
|
284
|
-
*Rafael Mendonça França*
|
285
|
-
|
286
|
-
* Remove deprecated file `active_support/core_ext/range/include_range`.
|
287
|
-
|
288
|
-
*Rafael Mendonça França*
|
289
|
-
|
290
|
-
* Remove deprecated file `active_support/core_ext/hash/transform_values`.
|
291
|
-
|
292
|
-
*Rafael Mendonça França*
|
293
|
-
|
294
|
-
* Remove deprecated file `active_support/core_ext/hash/compact`.
|
295
|
-
|
296
|
-
*Rafael Mendonça França*
|
297
|
-
|
298
|
-
* Remove deprecated file `active_support/core_ext/array/prepend_and_append`.
|
299
|
-
|
300
|
-
*Rafael Mendonça França*
|
301
|
-
|
302
|
-
* Remove deprecated file `active_support/core_ext/numeric/inquiry`.
|
303
|
-
|
304
|
-
*Rafael Mendonça França*
|
305
|
-
|
306
|
-
* Remove deprecated file `active_support/core_ext/module/reachable`.
|
307
|
-
|
308
|
-
*Rafael Mendonça França*
|
309
|
-
|
310
|
-
* Remove deprecated `Module#parent_name`, `Module#parent` and `Module#parents`.
|
311
|
-
|
312
|
-
*Rafael Mendonça França*
|
313
|
-
|
314
|
-
* Remove deprecated `ActiveSupport::LoggerThreadSafeLevel#after_initialize`.
|
315
|
-
|
316
|
-
*Rafael Mendonça França*
|
317
|
-
|
318
|
-
* Remove deprecated `LoggerSilence` constant.
|
319
|
-
|
320
|
-
*Rafael Mendonça França*
|
321
|
-
|
322
|
-
* Remove deprecated fallback to `I18n.default_local` when `config.i18n.fallbacks` is empty.
|
323
|
-
|
324
|
-
*Rafael Mendonça França*
|
325
|
-
|
326
|
-
* Remove entries from local cache on `RedisCacheStore#delete_matched`
|
327
|
-
|
328
|
-
Fixes #38627
|
329
|
-
|
330
|
-
*ojab*
|
48
|
+
*Alex Ghiculescu*
|
331
49
|
|
332
|
-
*
|
333
|
-
|
50
|
+
* Faster tests by parallelizing only when overhead is justified by the number
|
51
|
+
of them.
|
334
52
|
|
335
|
-
|
53
|
+
Running tests in parallel adds overhead in terms of database
|
54
|
+
setup and fixture loading. Now, Rails will only parallelize test executions when
|
55
|
+
there are enough tests to make it worth it.
|
336
56
|
|
337
|
-
|
57
|
+
This threshold is 50 by default, and is configurable via config setting in
|
58
|
+
your test.rb:
|
338
59
|
|
339
60
|
```ruby
|
340
|
-
config.
|
341
|
-
|
342
|
-
# is now equivalent to
|
343
|
-
|
344
|
-
config.cache_store = :mem_cache_store, ENV["MEMCACHE_SERVERS"] || "localhost:11211"
|
345
|
-
|
346
|
-
# instead of
|
347
|
-
|
348
|
-
config.cache_store = :mem_cache_store, "localhost:11211" # ignores ENV["MEMCACHE_SERVERS"]
|
61
|
+
config.active_support.test_parallelization_threshold = 100
|
349
62
|
```
|
350
63
|
|
351
|
-
|
352
|
-
|
353
|
-
* `ActiveSupport::Subscriber#attach_to` now accepts an `inherit_all:` argument. When set to true,
|
354
|
-
it allows a subscriber to receive events for methods defined in the subscriber's ancestor class(es).
|
64
|
+
It's also configurable at the test case level:
|
355
65
|
|
356
66
|
```ruby
|
357
|
-
class
|
358
|
-
|
359
|
-
|
360
|
-
def start_processing(event)
|
361
|
-
info "Processing by #{event.payload[:controller]}##{event.payload[:action]} as #{format}"
|
362
|
-
end
|
363
|
-
|
364
|
-
def redirect_to(event)
|
365
|
-
info { "Redirected to #{event.payload[:location]}" }
|
366
|
-
end
|
367
|
-
end
|
368
|
-
|
369
|
-
# We detach ActionControllerSubscriber from the :action_controller namespace so that our CustomActionControllerSubscriber
|
370
|
-
# can provide its own instrumentation for certain events in the namespace
|
371
|
-
ActionControllerSubscriber.detach_from(:action_controller)
|
372
|
-
|
373
|
-
class CustomActionControllerSubscriber < ActionControllerSubscriber
|
374
|
-
attach_to :action_controller, inherit_all: true
|
375
|
-
|
376
|
-
def start_processing(event)
|
377
|
-
info "A custom response to start_processing events"
|
378
|
-
end
|
379
|
-
|
380
|
-
# => CustomActionControllerSubscriber will process events for "start_processing.action_controller" notifications
|
381
|
-
# using its own #start_processing implementation, while retaining ActionControllerSubscriber's instrumentation
|
382
|
-
# for "redirect_to.action_controller" notifications
|
67
|
+
class ActiveSupport::TestCase
|
68
|
+
parallelize threshold: 100
|
383
69
|
end
|
384
70
|
```
|
385
71
|
|
386
|
-
*
|
387
|
-
|
388
|
-
* Allow the digest class used to generate non-sensitive digests to be configured with `config.active_support.hash_digest_class`.
|
72
|
+
*Jorge Manrubia*
|
389
73
|
|
390
|
-
|
74
|
+
* OpenSSL constants are now used for Digest computations.
|
391
75
|
|
392
76
|
*Dirkjan Bussink*
|
393
77
|
|
394
|
-
*
|
395
|
-
|
396
|
-
|
397
|
-
|
398
|
-
* Add `ActiveSupport::Duration` conversion methods
|
399
|
-
|
400
|
-
`in_seconds`, `in_minutes`, `in_hours`, `in_days`, `in_weeks`, `in_months`, and `in_years` return the respective duration covered.
|
401
|
-
|
402
|
-
*Jason York*
|
403
|
-
|
404
|
-
* Fixed issue in `ActiveSupport::Cache::RedisCacheStore` not passing options
|
405
|
-
to `read_multi` causing `fetch_multi` to not work properly
|
406
|
-
|
407
|
-
*Rajesh Sharma*
|
408
|
-
|
409
|
-
* Fixed issue in `ActiveSupport::Cache::MemCacheStore` which caused duplicate compression,
|
410
|
-
and caused the provided `compression_threshold` to not be respected.
|
78
|
+
* `TimeZone.iso8601` now accepts valid ordinal values similar to Ruby's `Date._iso8601` method.
|
79
|
+
A valid ordinal value will be converted to an instance of `TimeWithZone` using the `:year`
|
80
|
+
and `:yday` fragments returned from `Date._iso8601`.
|
411
81
|
|
412
|
-
|
413
|
-
|
414
|
-
|
415
|
-
|
416
|
-
|
417
|
-
*Max Gurewitz*
|
82
|
+
```ruby
|
83
|
+
twz = ActiveSupport::TimeZone["Eastern Time (US & Canada)"].iso8601("21087")
|
84
|
+
twz.to_a[0, 6] == [0, 0, 0, 28, 03, 2021]
|
85
|
+
```
|
418
86
|
|
419
|
-
*
|
420
|
-
`URI::DEFAULT_PARSER` instead.
|
87
|
+
*Steve Laing*
|
421
88
|
|
422
|
-
|
423
|
-
|
424
|
-
|
425
|
-
mode. The method is not deprecated as such (yet), but applications are
|
426
|
-
encouraged to not use it.
|
89
|
+
* `Time#change` and methods that call it (e.g. `Time#advance`) will now
|
90
|
+
return a `Time` with the timezone argument provided, if the caller was
|
91
|
+
initialized with a timezone argument.
|
427
92
|
|
428
|
-
|
429
|
-
defensive with load order. Just refer to classes and modules normally. If
|
430
|
-
the constant name is dynamic, camelize if needed, and constantize.
|
93
|
+
Fixes [#42467](https://github.com/rails/rails/issues/42467).
|
431
94
|
|
432
|
-
*
|
95
|
+
*Alex Ghiculescu*
|
433
96
|
|
434
|
-
*
|
97
|
+
* Allow serializing any module or class to JSON by name.
|
435
98
|
|
436
|
-
|
437
|
-
:foo.starts_with?("f") # => true
|
438
|
-
:foo.ends_with?("o") # => true
|
439
|
-
```
|
99
|
+
*Tyler Rick*, *Zachary Scott*
|
440
100
|
|
441
|
-
|
101
|
+
* Raise `ActiveSupport::EncryptedFile::MissingKeyError` when the
|
102
|
+
`RAILS_MASTER_KEY` environment variable is blank (e.g. `""`).
|
442
103
|
|
443
|
-
*
|
104
|
+
*Sunny Ripert*
|
444
105
|
|
445
|
-
|
446
|
-
where a seemingly innocent change of formatting leads to a change in the code behavior.
|
106
|
+
* The `from:` option is added to `ActiveSupport::TestCase#assert_no_changes`.
|
447
107
|
|
448
|
-
|
449
|
-
```ruby
|
450
|
-
+1.second.class
|
451
|
-
# => ActiveSupport::Duration
|
452
|
-
(+ 1.second).class
|
453
|
-
# => Integer
|
454
|
-
```
|
108
|
+
It permits asserting on the initial value that is expected not to change.
|
455
109
|
|
456
|
-
After:
|
457
110
|
```ruby
|
458
|
-
|
459
|
-
|
460
|
-
|
461
|
-
# => ActiveSupport::Duration
|
111
|
+
assert_no_changes -> { Status.all_good? }, from: true do
|
112
|
+
post :create, params: { status: { ok: true } }
|
113
|
+
end
|
462
114
|
```
|
463
115
|
|
464
|
-
|
465
|
-
|
466
|
-
*Roman Kushnir*
|
116
|
+
*George Claghorn*
|
467
117
|
|
468
|
-
*
|
118
|
+
* Deprecate `ActiveSupport::SafeBuffer`'s incorrect implicit conversion of objects into string.
|
469
119
|
|
470
|
-
|
120
|
+
Except for a few methods like `String#%`, objects must implement `#to_str`
|
121
|
+
to be implicitly converted to a String in string operations. In some
|
122
|
+
circumstances `ActiveSupport::SafeBuffer` was incorrectly calling the
|
123
|
+
explicit conversion method (`#to_s`) on them. This behavior is now
|
124
|
+
deprecated.
|
471
125
|
|
472
|
-
|
473
|
-
# => "Thu, 22 Jun 2017 02:39:00 UTC +00:00"
|
474
|
-
Time.at(1498099140, 123456780, :nsec).in_time_zone.inspect
|
475
|
-
# => "Thu, 22 Jun 2017 02:39:00 UTC +00:00"
|
476
|
-
Time.at(1498099140 + Rational("1/3")).in_time_zone.inspect
|
477
|
-
# => "Thu, 22 Jun 2017 02:39:00 UTC +00:00"
|
478
|
-
|
479
|
-
After:
|
126
|
+
*Jean Boussier*
|
480
127
|
|
481
|
-
|
482
|
-
# => "Thu, 22 Jun 2017 02:39:00.000000000 UTC +00:00"
|
483
|
-
Time.at(1498099140, 123456780, :nsec).in_time_zone.inspect
|
484
|
-
# => "Thu, 22 Jun 2017 02:39:00.123456780 UTC +00:00"
|
485
|
-
Time.at(1498099140 + Rational("1/3")).in_time_zone.inspect
|
486
|
-
# => "Thu, 22 Jun 2017 02:39:00.333333333 UTC +00:00"
|
128
|
+
* Allow nested access to keys on `Rails.application.credentials`.
|
487
129
|
|
488
|
-
|
130
|
+
Previously only top level keys in `credentials.yml.enc` could be accessed with method calls. Now any key can.
|
489
131
|
|
490
|
-
|
132
|
+
For example, given these secrets:
|
491
133
|
|
492
|
-
```
|
493
|
-
|
134
|
+
```yml
|
135
|
+
aws:
|
136
|
+
access_key_id: 123
|
137
|
+
secret_access_key: 345
|
494
138
|
```
|
495
139
|
|
496
|
-
|
497
|
-
|
498
|
-
* Align `Range#cover?` extension behavior with Ruby behavior for backwards ranges.
|
499
|
-
|
500
|
-
`(1..10).cover?(5..3)` now returns `false`, as it does in plain Ruby.
|
140
|
+
`Rails.application.credentials.aws.access_key_id` will now return the same thing as
|
141
|
+
`Rails.application.credentials.aws[:access_key_id]`.
|
501
142
|
|
502
|
-
|
503
|
-
|
504
|
-
*Michael Groeneman*
|
143
|
+
*Alex Ghiculescu*
|
505
144
|
|
506
|
-
*
|
145
|
+
* Added a faster and more compact `ActiveSupport::Cache` serialization format.
|
507
146
|
|
508
|
-
|
509
|
-
|
510
|
-
|
147
|
+
It can be enabled with `config.active_support.cache_format_version = 7.0` or
|
148
|
+
`config.load_defaults 7.0`. Regardless of the configuration Active Support
|
149
|
+
7.0 can read cache entries serialized by Active Support 6.1 which allows to
|
150
|
+
upgrade without invalidating the cache. However Rails 6.1 can't read the
|
151
|
+
new format, so all readers must be upgraded before the new format is enabled.
|
511
152
|
|
512
|
-
|
513
|
-
via the config in config/initializers/new_framework_defaults_6_1.rb
|
153
|
+
*Jean Boussier*
|
514
154
|
|
515
|
-
|
155
|
+
* Add `Enumerable#sole`, per `ActiveRecord::FinderMethods#sole`. Returns the
|
156
|
+
sole item of the enumerable, raising if no items are found, or if more than
|
157
|
+
one is.
|
516
158
|
|
517
|
-
*
|
159
|
+
*Asherah Connor*
|
518
160
|
|
519
|
-
*
|
161
|
+
* Freeze `ActiveSupport::Duration#parts` and remove writer methods.
|
520
162
|
|
521
|
-
|
163
|
+
Durations are meant to be value objects and should not be mutated.
|
522
164
|
|
523
|
-
*
|
165
|
+
*Andrew White*
|
524
166
|
|
525
|
-
*
|
167
|
+
* Fix `ActiveSupport::TimeZone#utc_to_local` with fractional seconds.
|
526
168
|
|
527
|
-
|
169
|
+
When `utc_to_local_returns_utc_offset_times` is false and the time
|
170
|
+
instance had fractional seconds the new UTC time instance was out by
|
171
|
+
a factor of 1,000,000 as the `Time.utc` constructor takes a usec
|
172
|
+
value and not a fractional second value.
|
528
173
|
|
529
|
-
*
|
174
|
+
*Andrew White*
|
530
175
|
|
531
|
-
|
532
|
-
being halted as second argument.
|
533
|
-
This change will allow you to differentiate which callbacks halted the chain
|
534
|
-
and act accordingly.
|
176
|
+
* Add `expires_at` argument to `ActiveSupport::Cache` `write` and `fetch` to set a cache entry TTL as an absolute time.
|
535
177
|
|
536
178
|
```ruby
|
537
|
-
|
538
|
-
before_save { throw(:abort) }
|
539
|
-
before_create { throw(:abort) }
|
540
|
-
|
541
|
-
def halted_callback_hook(filter, callback_name)
|
542
|
-
Rails.logger.info("Book couldn't be #{callback_name}d")
|
543
|
-
end
|
544
|
-
|
545
|
-
Book.create # => "Book couldn't be created"
|
546
|
-
book.save # => "Book couldn't be saved"
|
547
|
-
end
|
179
|
+
Rails.cache.write(key, value, expires_at: Time.now.at_end_of_hour)
|
548
180
|
```
|
549
181
|
|
550
|
-
*
|
551
|
-
|
552
|
-
* Support `prepend` with `ActiveSupport::Concern`.
|
553
|
-
|
554
|
-
Allows a module with `extend ActiveSupport::Concern` to be prepended.
|
555
|
-
|
556
|
-
module Imposter
|
557
|
-
extend ActiveSupport::Concern
|
558
|
-
|
559
|
-
# Same as `included`, except only run when prepended.
|
560
|
-
prepended do
|
561
|
-
end
|
562
|
-
end
|
563
|
-
|
564
|
-
class Person
|
565
|
-
prepend Imposter
|
566
|
-
end
|
567
|
-
|
568
|
-
Class methods are prepended to the base class, concerning is also
|
569
|
-
updated: `concerning :Imposter, prepend: true do`.
|
182
|
+
*Jean Boussier*
|
570
183
|
|
571
|
-
|
184
|
+
* Deprecate `ActiveSupport::TimeWithZone.name` so that from Rails 7.1 it will use the default implementation.
|
572
185
|
|
573
|
-
*
|
574
|
-
in a date time range. It is recommended to use `Range#cover?` method
|
575
|
-
instead of `Range#include?` to check the inclusion of a value
|
576
|
-
in a date time range.
|
186
|
+
*Andrew White*
|
577
187
|
|
578
|
-
|
188
|
+
* Deprecates Rails custom `Enumerable#sum` and `Array#sum` in favor of Ruby's native implementation which
|
189
|
+
is considerably faster.
|
579
190
|
|
580
|
-
|
191
|
+
Ruby requires an initializer for non-numeric type as per examples below:
|
581
192
|
|
582
193
|
```ruby
|
583
|
-
|
584
|
-
|
585
|
-
number_to_rounded(389.32314, precision: 0, round_mode: :ceil) # => "390"
|
586
|
-
number_to_human_size(483989, precision: 2, round_mode: :up) # => "480 KB"
|
587
|
-
number_to_human(489939, precision: 2, round_mode: :floor) # => "480 Thousand"
|
194
|
+
%w[foo bar].sum('')
|
195
|
+
# instead of %w[foo bar].sum
|
588
196
|
|
589
|
-
|
197
|
+
[[1, 2], [3, 4, 5]].sum([])
|
198
|
+
# instead of [[1, 2], [3, 4, 5]].sum
|
590
199
|
```
|
591
200
|
|
592
|
-
*
|
593
|
-
|
594
|
-
* `Array#to_sentence` no longer returns a frozen string.
|
201
|
+
*Alberto Mota*
|
595
202
|
|
596
|
-
|
203
|
+
* Tests parallelization is now disabled when running individual files to prevent the setup overhead.
|
597
204
|
|
598
|
-
|
599
|
-
# => true
|
205
|
+
It can still be enforced if the environment variable `PARALLEL_WORKERS` is present and set to a value greater than 1.
|
600
206
|
|
601
|
-
|
207
|
+
*Ricardo Díaz*
|
602
208
|
|
603
|
-
|
604
|
-
# => false
|
209
|
+
* Fix proxying keyword arguments in `ActiveSupport::CurrentAttributes`.
|
605
210
|
|
606
|
-
*
|
211
|
+
*Marcin Kołodziej*
|
607
212
|
|
608
|
-
*
|
609
|
-
|
213
|
+
* Add `Enumerable#maximum` and `Enumerable#minimum` to easily calculate the maximum or minimum from extracted
|
214
|
+
elements of an enumerable.
|
610
215
|
|
611
216
|
```ruby
|
612
|
-
|
613
|
-
# 1 week, 4 days, 13 hours, 46 minutes, and 40.0 seconds
|
217
|
+
payments = [Payment.new(5), Payment.new(15), Payment.new(10)]
|
614
218
|
|
615
|
-
|
616
|
-
#
|
617
|
-
|
618
|
-
ActiveSupport::Duration.parse(duration_iso)
|
619
|
-
# 11 days, 13 hours, 46 minutes, and 40 seconds
|
620
|
-
|
621
|
-
duration = ActiveSupport::Duration.build(604800)
|
622
|
-
# 1 week
|
623
|
-
|
624
|
-
duration_iso = duration.iso8601
|
625
|
-
# P1W
|
626
|
-
|
627
|
-
ActiveSupport::Duration.parse(duration_iso)
|
628
|
-
# 1 week
|
219
|
+
payments.minimum(:price) # => 5
|
220
|
+
payments.maximum(:price) # => 15
|
629
221
|
```
|
630
222
|
|
631
|
-
|
632
|
-
|
633
|
-
* Add block support to `ActiveSupport::Testing::TimeHelpers#travel_back`.
|
634
|
-
|
635
|
-
*Tim Masliuchenko*
|
636
|
-
|
637
|
-
* Update `ActiveSupport::Messages::Metadata#fresh?` to work for cookies with expiry set when
|
638
|
-
`ActiveSupport.parse_json_times = true`.
|
639
|
-
|
640
|
-
*Christian Gregg*
|
641
|
-
|
642
|
-
* Support symbolic links for `content_path` in `ActiveSupport::EncryptedFile`.
|
643
|
-
|
644
|
-
*Takumi Shotoku*
|
645
|
-
|
646
|
-
* Improve `Range#===`, `Range#include?`, and `Range#cover?` to work with beginless (startless)
|
647
|
-
and endless range targets.
|
648
|
-
|
649
|
-
*Allen Hsu*, *Andrew Hodgkinson*
|
650
|
-
|
651
|
-
* Don't use `Process#clock_gettime(CLOCK_THREAD_CPUTIME_ID)` on Solaris.
|
652
|
-
|
653
|
-
*Iain Beeston*
|
654
|
-
|
655
|
-
* Prevent `ActiveSupport::Duration.build(value)` from creating instances of
|
656
|
-
`ActiveSupport::Duration` unless `value` is of type `Numeric`.
|
657
|
-
|
658
|
-
Addresses the errant set of behaviours described in #37012 where
|
659
|
-
`ActiveSupport::Duration` comparisons would fail confusingly
|
660
|
-
or return unexpected results when comparing durations built from instances of `String`.
|
661
|
-
|
662
|
-
Before:
|
223
|
+
This also allows passing enumerables to `fresh_when` and `stale?` in Action Controller.
|
224
|
+
See PR [#41404](https://github.com/rails/rails/pull/41404) for an example.
|
663
225
|
|
664
|
-
|
665
|
-
large_duration_from_string = ActiveSupport::Duration.build('100000000000000')
|
666
|
-
small_duration_from_int = ActiveSupport::Duration.build(9)
|
226
|
+
*Ayrton De Craene*
|
667
227
|
|
668
|
-
|
669
|
-
# => false
|
670
|
-
|
671
|
-
small_duration_from_string == small_duration_from_int
|
672
|
-
# => false
|
673
|
-
|
674
|
-
small_duration_from_int < large_duration_from_string
|
675
|
-
# => ArgumentError (comparison of ActiveSupport::Duration::Scalar with ActiveSupport::Duration failed)
|
676
|
-
|
677
|
-
large_duration_from_string > small_duration_from_int
|
678
|
-
# => ArgumentError (comparison of String with ActiveSupport::Duration failed)
|
679
|
-
|
680
|
-
After:
|
681
|
-
|
682
|
-
small_duration_from_string = ActiveSupport::Duration.build('9')
|
683
|
-
# => TypeError (can't build an ActiveSupport::Duration from a String)
|
684
|
-
|
685
|
-
*Alexei Emam*
|
686
|
-
|
687
|
-
* Add `ActiveSupport::Cache::Store#delete_multi` method to delete multiple keys from the cache store.
|
688
|
-
|
689
|
-
*Peter Zhu*
|
690
|
-
|
691
|
-
* Support multiple arguments in `HashWithIndifferentAccess` for `merge` and `update` methods, to
|
692
|
-
follow Ruby 2.6 addition.
|
693
|
-
|
694
|
-
*Wojciech Wnętrzak*
|
695
|
-
|
696
|
-
* Allow initializing `thread_mattr_*` attributes via `:default` option.
|
697
|
-
|
698
|
-
class Scraper
|
699
|
-
thread_mattr_reader :client, default: Api::Client.new
|
700
|
-
end
|
701
|
-
|
702
|
-
*Guilherme Mansur*
|
703
|
-
|
704
|
-
* Add `compact_blank` for those times when you want to remove #blank? values from
|
705
|
-
an Enumerable (also `compact_blank!` on Hash, Array, ActionController::Parameters).
|
706
|
-
|
707
|
-
*Dana Sherson*
|
708
|
-
|
709
|
-
* Make ActiveSupport::Logger Fiber-safe.
|
710
|
-
|
711
|
-
Use `Fiber.current.__id__` in `ActiveSupport::Logger#local_level=` in order
|
712
|
-
to make log level local to Ruby Fibers in addition to Threads.
|
713
|
-
|
714
|
-
Example:
|
715
|
-
|
716
|
-
logger = ActiveSupport::Logger.new(STDOUT)
|
717
|
-
logger.level = 1
|
718
|
-
puts "Main is debug? #{logger.debug?}"
|
719
|
-
|
720
|
-
Fiber.new {
|
721
|
-
logger.local_level = 0
|
722
|
-
puts "Thread is debug? #{logger.debug?}"
|
723
|
-
}.resume
|
724
|
-
|
725
|
-
puts "Main is debug? #{logger.debug?}"
|
228
|
+
* `ActiveSupport::Cache::MemCacheStore` now accepts an explicit `nil` for its `addresses` argument.
|
726
229
|
|
727
|
-
|
230
|
+
```ruby
|
231
|
+
config.cache_store = :mem_cache_store, nil
|
728
232
|
|
729
|
-
|
730
|
-
Thread is debug? true
|
731
|
-
Main is debug? true
|
233
|
+
# is now equivalent to
|
732
234
|
|
733
|
-
|
235
|
+
config.cache_store = :mem_cache_store
|
734
236
|
|
735
|
-
|
736
|
-
Thread is debug? true
|
737
|
-
Main is debug? false
|
237
|
+
# and is also equivalent to
|
738
238
|
|
739
|
-
|
239
|
+
config.cache_store = :mem_cache_store, ENV["MEMCACHE_SERVERS"] || "localhost:11211"
|
740
240
|
|
741
|
-
|
241
|
+
# which is the fallback behavior of Dalli
|
242
|
+
```
|
742
243
|
|
743
|
-
|
744
|
-
passed at the constructor level.
|
244
|
+
This helps those migrating from `:dalli_store`, where an explicit `nil` was permitted.
|
745
245
|
|
746
|
-
|
246
|
+
*Michael Overmeyer*
|
747
247
|
|
748
|
-
|
749
|
-
crypt.decrypt_and_verify(encrypted_message, on_rotation: proc { ... })
|
750
|
-
crypt.decrypt_and_verify(another_encrypted_message, on_rotation: proc { ... })
|
248
|
+
* Add `Enumerable#in_order_of` to put an Enumerable in a certain order by a key.
|
751
249
|
|
752
|
-
|
250
|
+
*DHH*
|
753
251
|
|
754
|
-
|
755
|
-
|
756
|
-
crypt.decrypt_and_verify(another_encrypted_message)
|
252
|
+
* `ActiveSupport::Inflector.camelize` behaves expected when provided a symbol `:upper` or `:lower` argument. Matches
|
253
|
+
`String#camelize` behavior.
|
757
254
|
|
758
|
-
*
|
255
|
+
*Alex Ghiculescu*
|
759
256
|
|
760
|
-
* `
|
761
|
-
|
762
|
-
the user to specify they want `nil` returned in this case.
|
257
|
+
* Raises an `ArgumentError` when the first argument of `ActiveSupport::Notification.subscribe` is
|
258
|
+
invalid.
|
763
259
|
|
764
|
-
*
|
260
|
+
*Vipul A M*
|
765
261
|
|
766
|
-
* `
|
767
|
-
and a frozen string if it were long enough to be truncated. Now truncate will
|
768
|
-
consistently return an unfrozen string regardless. This behavior is consistent
|
769
|
-
with `gsub` and `strip`.
|
262
|
+
* `HashWithIndifferentAccess#deep_transform_keys` now returns a `HashWithIndifferentAccess` instead of a `Hash`.
|
770
263
|
|
771
|
-
|
264
|
+
*Nathaniel Woodthorpe*
|
772
265
|
|
773
|
-
|
774
|
-
# => true
|
775
|
-
'foobar'.truncate(6).frozen?
|
776
|
-
# => false
|
266
|
+
* Consume dalli’s `cache_nils` configuration as `ActiveSupport::Cache`'s `skip_nil` when using `MemCacheStore`.
|
777
267
|
|
778
|
-
|
268
|
+
*Ritikesh G*
|
779
269
|
|
780
|
-
|
781
|
-
# => false
|
782
|
-
'foobar'.truncate(6).frozen?
|
783
|
-
# => false
|
270
|
+
* Add `RedisCacheStore#stats` method similar to `MemCacheStore#stats`. Calls `redis#info` internally.
|
784
271
|
|
785
|
-
*
|
272
|
+
*Ritikesh G*
|
786
273
|
|
787
274
|
|
788
|
-
Please check [6-
|
275
|
+
Please check [6-1-stable](https://github.com/rails/rails/blob/6-1-stable/activesupport/CHANGELOG.md) for previous changes.
|