activesupport 7.0.8.1 → 7.2.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (199) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +143 -429
  3. data/MIT-LICENSE +1 -1
  4. data/README.rdoc +4 -4
  5. data/lib/active_support/actionable_error.rb +3 -1
  6. data/lib/active_support/array_inquirer.rb +3 -1
  7. data/lib/active_support/backtrace_cleaner.rb +39 -7
  8. data/lib/active_support/benchmarkable.rb +1 -0
  9. data/lib/active_support/broadcast_logger.rb +251 -0
  10. data/lib/active_support/builder.rb +1 -1
  11. data/lib/active_support/cache/coder.rb +153 -0
  12. data/lib/active_support/cache/entry.rb +134 -0
  13. data/lib/active_support/cache/file_store.rb +49 -17
  14. data/lib/active_support/cache/mem_cache_store.rb +94 -128
  15. data/lib/active_support/cache/memory_store.rb +80 -25
  16. data/lib/active_support/cache/null_store.rb +6 -0
  17. data/lib/active_support/cache/redis_cache_store.rb +165 -152
  18. data/lib/active_support/cache/serializer_with_fallback.rb +152 -0
  19. data/lib/active_support/cache/strategy/local_cache.rb +29 -14
  20. data/lib/active_support/cache.rb +363 -291
  21. data/lib/active_support/callbacks.rb +118 -134
  22. data/lib/active_support/code_generator.rb +15 -10
  23. data/lib/active_support/concern.rb +4 -2
  24. data/lib/active_support/concurrency/load_interlock_aware_monitor.rb +42 -3
  25. data/lib/active_support/concurrency/null_lock.rb +13 -0
  26. data/lib/active_support/configurable.rb +10 -0
  27. data/lib/active_support/core_ext/array/conversions.rb +1 -2
  28. data/lib/active_support/core_ext/array.rb +0 -1
  29. data/lib/active_support/core_ext/class/subclasses.rb +17 -34
  30. data/lib/active_support/core_ext/date/blank.rb +4 -0
  31. data/lib/active_support/core_ext/date/conversions.rb +1 -2
  32. data/lib/active_support/core_ext/date.rb +0 -1
  33. data/lib/active_support/core_ext/date_and_time/calculations.rb +10 -0
  34. data/lib/active_support/core_ext/date_and_time/compatibility.rb +28 -1
  35. data/lib/active_support/core_ext/date_time/blank.rb +4 -0
  36. data/lib/active_support/core_ext/date_time/conversions.rb +2 -2
  37. data/lib/active_support/core_ext/date_time.rb +0 -1
  38. data/lib/active_support/core_ext/digest/uuid.rb +7 -10
  39. data/lib/active_support/core_ext/enumerable.rb +3 -75
  40. data/lib/active_support/core_ext/erb/util.rb +201 -0
  41. data/lib/active_support/core_ext/hash/conversions.rb +1 -1
  42. data/lib/active_support/core_ext/hash/deep_merge.rb +22 -14
  43. data/lib/active_support/core_ext/hash/keys.rb +4 -4
  44. data/lib/active_support/core_ext/module/attr_internal.rb +17 -6
  45. data/lib/active_support/core_ext/module/attribute_accessors.rb +6 -0
  46. data/lib/active_support/core_ext/module/attribute_accessors_per_thread.rb +34 -16
  47. data/lib/active_support/core_ext/module/concerning.rb +6 -6
  48. data/lib/active_support/core_ext/module/delegation.rb +20 -119
  49. data/lib/active_support/core_ext/module/deprecation.rb +12 -12
  50. data/lib/active_support/core_ext/module/introspection.rb +0 -1
  51. data/lib/active_support/core_ext/numeric/bytes.rb +9 -0
  52. data/lib/active_support/core_ext/numeric/conversions.rb +5 -3
  53. data/lib/active_support/core_ext/numeric.rb +0 -1
  54. data/lib/active_support/core_ext/object/blank.rb +45 -1
  55. data/lib/active_support/core_ext/object/deep_dup.rb +16 -0
  56. data/lib/active_support/core_ext/object/duplicable.rb +24 -15
  57. data/lib/active_support/core_ext/object/inclusion.rb +13 -5
  58. data/lib/active_support/core_ext/object/instance_variables.rb +4 -2
  59. data/lib/active_support/core_ext/object/json.rb +17 -7
  60. data/lib/active_support/core_ext/object/with.rb +46 -0
  61. data/lib/active_support/core_ext/object/with_options.rb +4 -4
  62. data/lib/active_support/core_ext/object.rb +1 -0
  63. data/lib/active_support/core_ext/pathname/blank.rb +20 -0
  64. data/lib/active_support/core_ext/pathname/existence.rb +2 -0
  65. data/lib/active_support/core_ext/pathname.rb +1 -0
  66. data/lib/active_support/core_ext/range/conversions.rb +28 -7
  67. data/lib/active_support/core_ext/range/overlap.rb +40 -0
  68. data/lib/active_support/core_ext/range.rb +1 -2
  69. data/lib/active_support/core_ext/securerandom.rb +1 -5
  70. data/lib/active_support/core_ext/string/conversions.rb +1 -1
  71. data/lib/active_support/core_ext/string/filters.rb +21 -15
  72. data/lib/active_support/core_ext/string/indent.rb +1 -1
  73. data/lib/active_support/core_ext/string/inflections.rb +16 -5
  74. data/lib/active_support/core_ext/string/multibyte.rb +1 -1
  75. data/lib/active_support/core_ext/string/output_safety.rb +34 -177
  76. data/lib/active_support/core_ext/thread/backtrace/location.rb +12 -0
  77. data/lib/active_support/core_ext/time/calculations.rb +36 -30
  78. data/lib/active_support/core_ext/time/compatibility.rb +16 -0
  79. data/lib/active_support/core_ext/time/conversions.rb +1 -3
  80. data/lib/active_support/core_ext/time/zones.rb +4 -4
  81. data/lib/active_support/core_ext/time.rb +0 -1
  82. data/lib/active_support/core_ext.rb +0 -1
  83. data/lib/active_support/current_attributes.rb +53 -46
  84. data/lib/active_support/deep_mergeable.rb +53 -0
  85. data/lib/active_support/delegation.rb +202 -0
  86. data/lib/active_support/dependencies/autoload.rb +9 -16
  87. data/lib/active_support/deprecation/behaviors.rb +65 -42
  88. data/lib/active_support/deprecation/constant_accessor.rb +47 -25
  89. data/lib/active_support/deprecation/deprecators.rb +104 -0
  90. data/lib/active_support/deprecation/disallowed.rb +3 -5
  91. data/lib/active_support/deprecation/method_wrappers.rb +6 -23
  92. data/lib/active_support/deprecation/proxy_wrappers.rb +34 -22
  93. data/lib/active_support/deprecation/reporting.rb +49 -27
  94. data/lib/active_support/deprecation.rb +39 -9
  95. data/lib/active_support/deprecator.rb +7 -0
  96. data/lib/active_support/descendants_tracker.rb +66 -172
  97. data/lib/active_support/duration/iso8601_parser.rb +2 -2
  98. data/lib/active_support/duration/iso8601_serializer.rb +1 -4
  99. data/lib/active_support/duration.rb +13 -7
  100. data/lib/active_support/encrypted_configuration.rb +30 -9
  101. data/lib/active_support/encrypted_file.rb +9 -4
  102. data/lib/active_support/environment_inquirer.rb +22 -2
  103. data/lib/active_support/error_reporter/test_helper.rb +15 -0
  104. data/lib/active_support/error_reporter.rb +160 -36
  105. data/lib/active_support/evented_file_update_checker.rb +0 -1
  106. data/lib/active_support/execution_wrapper.rb +4 -5
  107. data/lib/active_support/file_update_checker.rb +5 -3
  108. data/lib/active_support/fork_tracker.rb +4 -32
  109. data/lib/active_support/gem_version.rb +3 -3
  110. data/lib/active_support/gzip.rb +2 -0
  111. data/lib/active_support/hash_with_indifferent_access.rb +41 -25
  112. data/lib/active_support/html_safe_translation.rb +19 -6
  113. data/lib/active_support/i18n.rb +1 -1
  114. data/lib/active_support/i18n_railtie.rb +20 -13
  115. data/lib/active_support/inflector/inflections.rb +2 -0
  116. data/lib/active_support/inflector/methods.rb +23 -11
  117. data/lib/active_support/inflector/transliterate.rb +3 -1
  118. data/lib/active_support/isolated_execution_state.rb +26 -22
  119. data/lib/active_support/json/decoding.rb +2 -1
  120. data/lib/active_support/json/encoding.rb +25 -43
  121. data/lib/active_support/key_generator.rb +9 -1
  122. data/lib/active_support/lazy_load_hooks.rb +6 -4
  123. data/lib/active_support/locale/en.yml +2 -0
  124. data/lib/active_support/log_subscriber.rb +74 -34
  125. data/lib/active_support/logger.rb +22 -60
  126. data/lib/active_support/logger_thread_safe_level.rb +10 -32
  127. data/lib/active_support/message_encryptor.rb +197 -53
  128. data/lib/active_support/message_encryptors.rb +141 -0
  129. data/lib/active_support/message_pack/cache_serializer.rb +23 -0
  130. data/lib/active_support/message_pack/extensions.rb +305 -0
  131. data/lib/active_support/message_pack/serializer.rb +63 -0
  132. data/lib/active_support/message_pack.rb +50 -0
  133. data/lib/active_support/message_verifier.rb +220 -89
  134. data/lib/active_support/message_verifiers.rb +135 -0
  135. data/lib/active_support/messages/codec.rb +65 -0
  136. data/lib/active_support/messages/metadata.rb +111 -45
  137. data/lib/active_support/messages/rotation_coordinator.rb +93 -0
  138. data/lib/active_support/messages/rotator.rb +34 -32
  139. data/lib/active_support/messages/serializer_with_fallback.rb +158 -0
  140. data/lib/active_support/multibyte/chars.rb +4 -2
  141. data/lib/active_support/multibyte/unicode.rb +9 -37
  142. data/lib/active_support/notifications/fanout.rb +248 -87
  143. data/lib/active_support/notifications/instrumenter.rb +93 -25
  144. data/lib/active_support/notifications.rb +29 -28
  145. data/lib/active_support/number_helper/number_converter.rb +16 -7
  146. data/lib/active_support/number_helper/number_to_currency_converter.rb +6 -6
  147. data/lib/active_support/number_helper/number_to_human_size_converter.rb +3 -3
  148. data/lib/active_support/number_helper/number_to_phone_converter.rb +1 -0
  149. data/lib/active_support/number_helper.rb +379 -318
  150. data/lib/active_support/option_merger.rb +2 -2
  151. data/lib/active_support/ordered_hash.rb +3 -3
  152. data/lib/active_support/ordered_options.rb +67 -15
  153. data/lib/active_support/parameter_filter.rb +84 -69
  154. data/lib/active_support/proxy_object.rb +8 -3
  155. data/lib/active_support/railtie.rb +25 -20
  156. data/lib/active_support/reloader.rb +12 -4
  157. data/lib/active_support/rescuable.rb +2 -0
  158. data/lib/active_support/secure_compare_rotator.rb +16 -9
  159. data/lib/active_support/string_inquirer.rb +4 -2
  160. data/lib/active_support/subscriber.rb +10 -27
  161. data/lib/active_support/syntax_error_proxy.rb +60 -0
  162. data/lib/active_support/tagged_logging.rb +64 -25
  163. data/lib/active_support/test_case.rb +156 -7
  164. data/lib/active_support/testing/assertions.rb +28 -12
  165. data/lib/active_support/testing/autorun.rb +0 -2
  166. data/lib/active_support/testing/constant_stubbing.rb +54 -0
  167. data/lib/active_support/testing/deprecation.rb +20 -27
  168. data/lib/active_support/testing/error_reporter_assertions.rb +107 -0
  169. data/lib/active_support/testing/isolation.rb +21 -9
  170. data/lib/active_support/testing/method_call_assertions.rb +7 -8
  171. data/lib/active_support/testing/parallelization/server.rb +3 -0
  172. data/lib/active_support/testing/parallelize_executor.rb +8 -3
  173. data/lib/active_support/testing/setup_and_teardown.rb +2 -0
  174. data/lib/active_support/testing/stream.rb +1 -1
  175. data/lib/active_support/testing/strict_warnings.rb +43 -0
  176. data/lib/active_support/testing/tests_without_assertions.rb +19 -0
  177. data/lib/active_support/testing/time_helpers.rb +38 -16
  178. data/lib/active_support/time_with_zone.rb +12 -18
  179. data/lib/active_support/values/time_zone.rb +25 -14
  180. data/lib/active_support/version.rb +1 -1
  181. data/lib/active_support/xml_mini/jdom.rb +3 -10
  182. data/lib/active_support/xml_mini/nokogiri.rb +1 -1
  183. data/lib/active_support/xml_mini/nokogirisax.rb +1 -1
  184. data/lib/active_support/xml_mini/rexml.rb +1 -1
  185. data/lib/active_support/xml_mini.rb +12 -3
  186. data/lib/active_support.rb +15 -3
  187. metadata +145 -24
  188. data/lib/active_support/core_ext/array/deprecated_conversions.rb +0 -25
  189. data/lib/active_support/core_ext/date/deprecated_conversions.rb +0 -40
  190. data/lib/active_support/core_ext/date_time/deprecated_conversions.rb +0 -36
  191. data/lib/active_support/core_ext/numeric/deprecated_conversions.rb +0 -60
  192. data/lib/active_support/core_ext/range/deprecated_conversions.rb +0 -36
  193. data/lib/active_support/core_ext/range/include_time_with_zone.rb +0 -5
  194. data/lib/active_support/core_ext/range/overlaps.rb +0 -10
  195. data/lib/active_support/core_ext/time/deprecated_conversions.rb +0 -73
  196. data/lib/active_support/core_ext/uri.rb +0 -5
  197. data/lib/active_support/deprecation/instance_delegator.rb +0 -38
  198. data/lib/active_support/per_thread_registry.rb +0 -65
  199. data/lib/active_support/ruby_features.rb +0 -7
data/CHANGELOG.md CHANGED
@@ -1,570 +1,284 @@
1
- ## Rails 7.0.8.1 (February 21, 2024) ##
1
+ ## Rails 7.2.2.1 (December 10, 2024) ##
2
2
 
3
3
  * No changes.
4
4
 
5
5
 
6
- ## Rails 7.0.8 (September 09, 2023) ##
6
+ ## Rails 7.2.2 (October 30, 2024) ##
7
7
 
8
- * Fix `TimeWithZone` still using deprecated `#to_s` when `ENV` or `config` to
9
- disable it are set.
8
+ * Include options when instrumenting `ActiveSupport::Cache::Store#delete` and `ActiveSupport::Cache::Store#delete_multi`.
10
9
 
11
- *Hartley McGuire*
12
-
13
- * Fix CacheStore#write_multi when using a distributed Redis cache with a connection pool.
10
+ *Adam Renberg Tamm*
14
11
 
15
- Fixes [#48938](https://github.com/rails/rails/issues/48938).
12
+ * Print test names when running `rails test -v` for parallel tests.
16
13
 
17
- *Jonathan del Strother*
14
+ *John Hawthorn*, *Abeid Ahmed*
18
15
 
19
16
 
20
- ## Rails 7.0.7.2 (August 22, 2023) ##
17
+ ## Rails 7.2.1.2 (October 23, 2024) ##
21
18
 
22
19
  * No changes.
23
20
 
24
21
 
25
- ## Rails 7.0.7.1 (August 22, 2023) ##
26
-
27
- * Use a temporary file for storing unencrypted files while editing
28
-
29
- [CVE-2023-38037]
30
-
31
-
32
- ## Rails 7.0.7 (August 09, 2023) ##
33
-
34
- * Fix `Cache::NullStore` with local caching for repeated reads.
35
-
36
- *fatkodima*
37
-
38
- * Fix `to_s` with no arguments not respecting custom `:default` formats
39
-
40
- *Hartley McGuire*
41
-
42
- * Fix `ActiveSupport::Inflector.humanize(nil)` raising ``NoMethodError: undefined method `end_with?' for nil:NilClass``.
43
-
44
- *James Robinson*
45
-
46
- * Fix `Enumerable#sum` for `Enumerator#lazy`.
47
-
48
- *fatkodima*, *Matthew Draper*, *Jonathan Hefner*
49
-
50
- * Improve error message when EventedFileUpdateChecker is used without a
51
- compatible version of the Listen gem
52
-
53
- *Hartley McGuire*
54
-
55
-
56
- ## Rails 7.0.6 (June 29, 2023) ##
57
-
58
- * Fix `EncryptedConfiguration` returning incorrect values for some `Hash`
59
- methods
60
-
61
- *Hartley McGuire*
62
-
63
- * Fix arguments being destructed `Enumerable#many?` with block.
64
-
65
- *Andrew Novoselac*
66
-
67
- * Fix humanize for strings ending with id.
68
-
69
- *fatkodima*
70
-
71
-
72
- ## Rails 7.0.5.1 (June 26, 2023) ##
22
+ ## Rails 7.2.1.1 (October 15, 2024) ##
73
23
 
74
24
  * No changes.
75
25
 
76
26
 
77
- ## Rails 7.0.5 (May 24, 2023) ##
78
-
79
- * Fixes TimeWithZone ArgumentError.
80
-
81
- *Niklas Häusele*
82
-
83
-
84
- ## Rails 7.0.4.3 (March 13, 2023) ##
85
-
86
- * Implement SafeBuffer#bytesplice
87
-
88
- [CVE-2023-28120]
89
-
90
-
91
- ## Rails 7.0.4.2 (January 24, 2023) ##
27
+ ## Rails 7.2.1 (August 22, 2024) ##
92
28
 
93
29
  * No changes.
94
30
 
95
31
 
96
- ## Rails 7.0.4.1 (January 17, 2023) ##
97
-
98
- * Avoid regex backtracking in Inflector.underscore
99
-
100
- [CVE-2023-22796]
32
+ ## Rails 7.2.0 (August 09, 2024) ##
101
33
 
34
+ * Fix `delegate_missing_to allow_nil: true` when called with implict self
102
35
 
103
- ## Rails 7.0.4 (September 09, 2022) ##
104
-
105
- * Ensure `ActiveSupport::Testing::Isolation::Forking` closes pipes
106
-
107
- Previously, `Forking.run_in_isolation` opened two ends of a pipe. The fork
108
- process closed the read end, wrote to it, and then terminated (which
109
- presumably closed the file descriptors on its end). The parent process
110
- closed the write end, read from it, and returned, never closing the read
111
- end.
36
+ ```ruby
37
+ class Person
38
+ delegate_missing_to :address, allow_nil: true
112
39
 
113
- This resulted in an accumulation of open file descriptors, which could
114
- cause errors if the limit is reached.
40
+ def address
41
+ nil
42
+ end
115
43
 
116
- *Sam Bostock*
44
+ def berliner?
45
+ city == "Berlin"
46
+ end
47
+ end
117
48
 
118
- * Redis cache store is now compatible with redis-rb 5.0.
49
+ Person.new.city # => nil
50
+ Person.new.berliner? # undefined local variable or method `city' for an instance of Person (NameError)
51
+ ```
119
52
 
120
53
  *Jean Boussier*
121
54
 
122
- * Fix `NoMethodError` on custom `ActiveSupport::Deprecation` behavior.
123
-
124
- `ActiveSupport::Deprecation.behavior=` was supposed to accept any object
125
- that responds to `call`, but in fact its internal implementation assumed that
126
- this object could respond to `arity`, so it was restricted to only `Proc` objects.
55
+ * Add `logger` as a dependency since it is a bundled gem candidate for Ruby 3.5
127
56
 
128
- This change removes this `arity` restriction of custom behaviors.
57
+ *Earlopain*
129
58
 
130
- *Ryo Nakamura*
59
+ * Define `Digest::UUID.nil_uuid`, which returns the so-called nil UUID.
131
60
 
61
+ *Xavier Noria*
132
62
 
133
- ## Rails 7.0.3.1 (July 12, 2022) ##
134
-
135
- * No changes.
136
-
137
-
138
- ## Rails 7.0.3 (May 09, 2022) ##
139
-
140
- * No changes.
141
-
142
-
143
- ## Rails 7.0.2.4 (April 26, 2022) ##
144
-
145
- * Fix and add protections for XSS in `ActionView::Helpers` and `ERB::Util`.
146
-
147
- Add the method `ERB::Util.xml_name_escape` to escape dangerous characters
148
- in names of tags and names of attributes, following the specification of XML.
149
-
150
- *Álvaro Martín Fraguas*
151
-
152
- ## Rails 7.0.2.3 (March 08, 2022) ##
153
-
154
- * No changes.
155
-
156
-
157
- ## Rails 7.0.2.2 (February 11, 2022) ##
158
-
159
- * Fix Reloader method signature to work with the new Executor signature
160
-
161
-
162
- ## Rails 7.0.2.1 (February 11, 2022) ##
163
-
164
- * No changes.
165
-
166
-
167
- ## Rails 7.0.2 (February 08, 2022) ##
168
-
169
- * Fix `ActiveSupport::EncryptedConfiguration` to be compatible with Psych 4
170
-
171
- *Stephen Sugden*
172
-
173
- * Improve `File.atomic_write` error handling.
174
-
175
- *Daniel Pepper*
176
-
177
-
178
- ## Rails 7.0.1 (January 06, 2022) ##
179
-
180
- * Fix `Class#descendants` and `DescendantsTracker#descendants` compatibility with Ruby 3.1.
181
-
182
- [The native `Class#descendants` was reverted prior to Ruby 3.1 release](https://bugs.ruby-lang.org/issues/14394#note-33),
183
- but `Class#subclasses` was kept, breaking the feature detection.
184
-
185
- *Jean Boussier*
63
+ * Support `duration` type in `ActiveSupport::XmlMini`.
186
64
 
65
+ *heka1024*
187
66
 
188
- ## Rails 7.0.0 (December 15, 2021) ##
67
+ * Remove deprecated `ActiveSupport::Notifications::Event#children` and `ActiveSupport::Notifications::Event#parent_of?`.
189
68
 
190
- * Fix `ActiveSupport::Duration.build` to support negative values.
69
+ *Rafael Mendonça França*
191
70
 
192
- The algorithm to collect the `parts` of the `ActiveSupport::Duration`
193
- ignored the sign of the `value` and accumulated incorrect part values. This
194
- impacted `ActiveSupport::Duration#sum` (which is dependent on `parts`) but
195
- not `ActiveSupport::Duration#eql?` (which is dependent on `value`).
71
+ * Remove deprecated support to call the following methods without passing a deprecator:
196
72
 
197
- *Caleb Buxton*, *Braden Staudacher*
73
+ - `deprecate`
74
+ - `deprecate_constant`
75
+ - `ActiveSupport::Deprecation::DeprecatedObjectProxy.new`
76
+ - `ActiveSupport::Deprecation::DeprecatedInstanceVariableProxy.new`
77
+ - `ActiveSupport::Deprecation::DeprecatedConstantProxy.new`
78
+ - `assert_deprecated`
79
+ - `assert_not_deprecated`
80
+ - `collect_deprecations`
198
81
 
82
+ *Rafael Mendonça França*
199
83
 
200
- ## Rails 7.0.0.rc3 (December 14, 2021) ##
84
+ * Remove deprecated `ActiveSupport::Deprecation` delegation to instance.
201
85
 
202
- * No changes.
86
+ *Rafael Mendonça França*
203
87
 
88
+ * Remove deprecated `SafeBuffer#clone_empty`.
204
89
 
205
- ## Rails 7.0.0.rc2 (December 14, 2021) ##
90
+ *Rafael Mendonça França*
206
91
 
207
- * No changes.
92
+ * Remove deprecated `#to_default_s` from `Array`, `Date`, `DateTime` and `Time`.
208
93
 
209
- ## Rails 7.0.0.rc1 (December 06, 2021) ##
94
+ *Rafael Mendonça França*
210
95
 
211
- * Deprecate passing a format to `#to_s` in favor of `#to_formatted_s` in `Array`, `Range`, `Date`, `DateTime`, `Time`,
212
- `BigDecimal`, `Float` and, `Integer`.
96
+ * Remove deprecated support to passing `Dalli::Client` instances to `MemCacheStore`.
213
97
 
214
98
  *Rafael Mendonça França*
215
99
 
216
- * Document `ActiveSupport::Testing::Deprecation`.
217
-
218
- *Sam Bostock & Sam Jordan*
100
+ * Remove deprecated `config.active_support.use_rfc4122_namespaced_uuids`.
219
101
 
220
- * Add `Pathname#existence`.
102
+ *Rafael Mendonça França*
221
103
 
222
- ```ruby
223
- Pathname.new("file").existence&.read
224
- ```
104
+ * Remove deprecated `config.active_support.remove_deprecated_time_with_zone_name`.
225
105
 
226
- *Timo Schilling*
106
+ *Rafael Mendonça França*
227
107
 
228
- * Remove deprecate `ActiveSupport::Multibyte::Unicode.default_normalization_form`.
108
+ * Remove deprecated `config.active_support.disable_to_s_conversion`.
229
109
 
230
110
  *Rafael Mendonça França*
231
111
 
232
- * Remove deprecated support to use `Range#include?` to check the inclusion of a value in
233
- a date time range is deprecated.
112
+ * Remove deprecated support to bolding log text with positional boolean in `ActiveSupport::LogSubscriber#color`.
234
113
 
235
114
  *Rafael Mendonça França*
236
115
 
237
- * Remove deprecated `URI.parser`.
116
+ * Remove deprecated constants `ActiveSupport::LogSubscriber::CLEAR` and `ActiveSupport::LogSubscriber::BOLD`.
238
117
 
239
118
  *Rafael Mendonça França*
240
119
 
241
- * Remove deprecated `config.active_support.use_sha1_digests`.
120
+ * Remove deprecated support for `config.active_support.cache_format_version = 6.1`.
242
121
 
243
122
  *Rafael Mendonça França*
244
123
 
245
- * Invoking `Object#with_options` without a `&block` argument returns the
246
- `ActiveSupport::OptionMerger` instance.
124
+ * Remove deprecated `:pool_size` and `:pool_timeout` options for the cache storage.
247
125
 
248
- *Sean Doyle*
249
-
250
- * `Rails.application.executor` hooks can now be called around every test
126
+ *Rafael Mendonça França*
251
127
 
252
- This helps to better simulate request or job local state being reset around tests and prevents state
253
- leaking from one test to another.
128
+ * Warn on tests without assertions.
254
129
 
255
- However it requires the executor hooks executed in the test environment to be re-entrant.
130
+ `ActiveSupport::TestCase` now warns when tests do not run any assertions.
131
+ This is helpful in detecting broken tests that do not perform intended assertions.
256
132
 
257
- To enable this, set `config.active_support.executor_around_test_case = true` (this is the default in Rails 7).
133
+ *fatkodima*
258
134
 
259
- *Jean Boussier*
135
+ * Support `hexBinary` type in `ActiveSupport::XmlMini`.
260
136
 
261
- * `ActiveSupport::DescendantsTracker` now mostly delegate to `Class#descendants` on Ruby 3.1
137
+ *heka1024*
262
138
 
263
- Ruby now provides a fast `Class#descendants` making `ActiveSupport::DescendantsTracker` mostly useless.
139
+ * Deprecate `ActiveSupport::ProxyObject` in favor of Ruby's built-in `BasicObject`.
264
140
 
265
- As a result the following methods are deprecated:
141
+ *Earlopain*
266
142
 
267
- - `ActiveSupport::DescendantsTracker.direct_descendants`
268
- - `ActiveSupport::DescendantsTracker#direct_descendants`
143
+ * `stub_const` now accepts a `exists: false` parameter to allow stubbing missing constants.
269
144
 
270
145
  *Jean Boussier*
271
146
 
272
- * Fix the `Digest::UUID.uuid_from_hash` behavior for namespace IDs that are different from the ones defined on `Digest::UUID`.
273
-
274
- The new behavior will be enabled by setting the
275
- `config.active_support.use_rfc4122_namespaced_uuids` option to `true`
276
- and is the default for new apps.
277
-
278
- The old behavior is the default for upgraded apps and will output a
279
- deprecation warning every time a value that is different than one of
280
- the constants defined on the `Digest::UUID` extension is used as the
281
- namespace ID.
282
-
283
- *Alex Robbin*, *Erich Soares Machado*, *Eugene Kenny*
284
-
285
- * `ActiveSupport::Inflector::Inflections#clear(:acronyms)` is now supported,
286
- and `inflector.clear` / `inflector.clear(:all)` also clears acronyms.
287
-
288
- *Alex Ghiculescu*, *Oliver Peate*
289
-
290
-
291
- ## Rails 7.0.0.alpha2 (September 15, 2021) ##
292
-
293
- * No changes.
294
-
295
-
296
- ## Rails 7.0.0.alpha1 (September 15, 2021) ##
297
-
298
- * `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.
299
-
300
- *Xavier Noria*
301
-
302
- * Private internal classes of `ActiveSupport::Dependencies` have been deleted, like `ActiveSupport::Dependencies::Reference`, `ActiveSupport::Dependencies::Blamable`, and others.
303
-
304
- *Xavier Noria*
305
-
306
- * The private API of `ActiveSupport::Dependencies` has been deleted. That includes methods like `hook!`, `unhook!`, `depend_on`, `require_or_load`, `mechanism`, and many others.
307
-
308
- *Xavier Noria*
147
+ * Make `ActiveSupport::BacktraceCleaner` copy filters and silencers on dup and clone.
309
148
 
310
- * Improves the performance of `ActiveSupport::NumberHelper` formatters by avoiding the use of exceptions as flow control.
149
+ Previously the copy would still share the internal silencers and filters array,
150
+ causing state to leak.
311
151
 
312
- *Mike Dalessio*
313
-
314
- * Removed rescue block from `ActiveSupport::Cache::RedisCacheStore#handle_exception`
315
-
316
- Previously, if you provided a `error_handler` to `redis_cache_store`, any errors thrown by
317
- the error handler would be rescued and logged only. Removed the `rescue` clause from `handle_exception`
318
- to allow these to be thrown.
319
-
320
- *Nicholas A. Stuart*
321
-
322
- * Allow entirely opting out of deprecation warnings.
323
-
324
- Previously if you did `app.config.active_support.deprecation = :silence`, some work would
325
- still be done on each call to `ActiveSupport::Deprecation.warn`. In very hot paths, this could
326
- cause performance issues.
152
+ *Jean Boussier*
327
153
 
328
- Now, you can make `ActiveSupport::Deprecation.warn` a no-op:
154
+ * Updating Astana with Western Kazakhstan TZInfo identifier.
329
155
 
330
- ```ruby
331
- config.active_support.report_deprecations = false
332
- ```
156
+ *Damian Nelson*
333
157
 
334
- This is the default in production for new apps. It is the equivalent to:
158
+ * Add filename support for `ActiveSupport::Logger.logger_outputs_to?`.
335
159
 
336
160
  ```ruby
337
- config.active_support.deprecation = :silence
338
- config.active_support.disallowed_deprecation = :silence
161
+ logger = Logger.new('/var/log/rails.log')
162
+ ActiveSupport::Logger.logger_outputs_to?(logger, '/var/log/rails.log')
339
163
  ```
340
164
 
341
- but will take a more optimised code path.
342
-
343
- *Alex Ghiculescu*
165
+ *Christian Schmidt*
344
166
 
345
- * Faster tests by parallelizing only when overhead is justified by the number
346
- of them.
167
+ * Include `IPAddr#prefix` when serializing an `IPAddr` using the
168
+ `ActiveSupport::MessagePack` serializer.
347
169
 
348
- Running tests in parallel adds overhead in terms of database
349
- setup and fixture loading. Now, Rails will only parallelize test executions when
350
- there are enough tests to make it worth it.
170
+ This change is backward and forward compatible old payloads can
171
+ still be read, and new payloads will be readable by older versions of Rails.
351
172
 
352
- This threshold is 50 by default, and is configurable via config setting in
353
- your test.rb:
354
-
355
- ```ruby
356
- config.active_support.test_parallelization_threshold = 100
357
- ```
173
+ *Taiki Komaba*
358
174
 
359
- It's also configurable at the test case level:
175
+ * Add `default:` support for `ActiveSupport::CurrentAttributes.attribute`.
360
176
 
361
177
  ```ruby
362
- class ActiveSupport::TestCase
363
- parallelize threshold: 100
178
+ class Current < ActiveSupport::CurrentAttributes
179
+ attribute :counter, default: 0
364
180
  end
365
181
  ```
366
182
 
367
- *Jorge Manrubia*
368
-
369
- * OpenSSL constants are now used for Digest computations.
370
-
371
- *Dirkjan Bussink*
183
+ *Sean Doyle*
372
184
 
373
- * `TimeZone.iso8601` now accepts valid ordinal values similar to Ruby's `Date._iso8601` method.
374
- A valid ordinal value will be converted to an instance of `TimeWithZone` using the `:year`
375
- and `:yday` fragments returned from `Date._iso8601`.
185
+ * Yield instance to `Object#with` block.
376
186
 
377
187
  ```ruby
378
- twz = ActiveSupport::TimeZone["Eastern Time (US & Canada)"].iso8601("21087")
379
- twz.to_a[0, 6] == [0, 0, 0, 28, 03, 2021]
188
+ client.with(timeout: 5_000) do |c|
189
+ c.get("/commits")
190
+ end
380
191
  ```
381
192
 
382
- *Steve Laing*
383
-
384
- * `Time#change` and methods that call it (e.g. `Time#advance`) will now
385
- return a `Time` with the timezone argument provided, if the caller was
386
- initialized with a timezone argument.
387
-
388
- Fixes [#42467](https://github.com/rails/rails/issues/42467).
193
+ *Sean Doyle*
389
194
 
390
- *Alex Ghiculescu*
195
+ * Use logical core count instead of physical core count to determine the
196
+ default number of workers when parallelizing tests.
391
197
 
392
- * Allow serializing any module or class to JSON by name.
198
+ *Jonathan Hefner*
393
199
 
394
- *Tyler Rick*, *Zachary Scott*
200
+ * Fix `Time.now/DateTime.now/Date.today` to return results in a system timezone after `#travel_to`.
395
201
 
396
- * Raise `ActiveSupport::EncryptedFile::MissingKeyError` when the
397
- `RAILS_MASTER_KEY` environment variable is blank (e.g. `""`).
202
+ There is a bug in the current implementation of #travel_to:
203
+ it remembers a timezone of its argument, and all stubbed methods start
204
+ returning results in that remembered timezone. However, the expected
205
+ behavior is to return results in a system timezone.
398
206
 
399
- *Sunny Ripert*
207
+ *Aleksei Chernenkov*
400
208
 
401
- * The `from:` option is added to `ActiveSupport::TestCase#assert_no_changes`.
209
+ * Add `ErrorReported#unexpected` to report precondition violations.
402
210
 
403
- It permits asserting on the initial value that is expected not to change.
211
+ For example:
404
212
 
405
213
  ```ruby
406
- assert_no_changes -> { Status.all_good? }, from: true do
407
- post :create, params: { status: { ok: true } }
214
+ def edit
215
+ if published?
216
+ Rails.error.unexpected("[BUG] Attempting to edit a published article, that shouldn't be possible")
217
+ return false
218
+ end
219
+ # ...
408
220
  end
409
221
  ```
410
222
 
411
- *George Claghorn*
412
-
413
- * Deprecate `ActiveSupport::SafeBuffer`'s incorrect implicit conversion of objects into string.
414
-
415
- Except for a few methods like `String#%`, objects must implement `#to_str`
416
- to be implicitly converted to a String in string operations. In some
417
- circumstances `ActiveSupport::SafeBuffer` was incorrectly calling the
418
- explicit conversion method (`#to_s`) on them. This behavior is now
419
- deprecated.
420
-
421
- *Jean Boussier*
422
-
423
- * Allow nested access to keys on `Rails.application.credentials`.
424
-
425
- Previously only top level keys in `credentials.yml.enc` could be accessed with method calls. Now any key can.
426
-
427
- For example, given these secrets:
428
-
429
- ```yml
430
- aws:
431
- access_key_id: 123
432
- secret_access_key: 345
433
- ```
434
-
435
- `Rails.application.credentials.aws.access_key_id` will now return the same thing as
436
- `Rails.application.credentials.aws[:access_key_id]`.
437
-
438
- *Alex Ghiculescu*
439
-
440
- * Added a faster and more compact `ActiveSupport::Cache` serialization format.
441
-
442
- It can be enabled with `config.active_support.cache_format_version = 7.0` or
443
- `config.load_defaults 7.0`. Regardless of the configuration Active Support
444
- 7.0 can read cache entries serialized by Active Support 6.1 which allows to
445
- upgrade without invalidating the cache. However Rails 6.1 can't read the
446
- new format, so all readers must be upgraded before the new format is enabled.
223
+ The above will raise an error in development and test, but only report the error in production.
447
224
 
448
225
  *Jean Boussier*
449
226
 
450
- * Add `Enumerable#sole`, per `ActiveRecord::FinderMethods#sole`. Returns the
451
- sole item of the enumerable, raising if no items are found, or if more than
452
- one is.
453
-
454
- *Asherah Connor*
455
-
456
- * Freeze `ActiveSupport::Duration#parts` and remove writer methods.
457
-
458
- Durations are meant to be value objects and should not be mutated.
227
+ * Make the order of read_multi and write_multi notifications for `Cache::Store#fetch_multi` operations match the order they are executed in.
459
228
 
460
- *Andrew White*
229
+ *Adam Renberg Tamm*
461
230
 
462
- * Fix `ActiveSupport::TimeZone#utc_to_local` with fractional seconds.
231
+ * Make return values of `Cache::Store#write` consistent.
463
232
 
464
- When `utc_to_local_returns_utc_offset_times` is false and the time
465
- instance had fractional seconds the new UTC time instance was out by
466
- a factor of 1,000,000 as the `Time.utc` constructor takes a usec
467
- value and not a fractional second value.
233
+ The return value was not specified before. Now it returns `true` on a successful write,
234
+ `nil` if there was an error talking to the cache backend, and `false` if the write failed
235
+ for another reason (e.g. the key already exists and `unless_exist: true` was passed).
468
236
 
469
- *Andrew White*
237
+ *Sander Verdonschot*
470
238
 
471
- * Add `expires_at` argument to `ActiveSupport::Cache` `write` and `fetch` to set a cache entry TTL as an absolute time.
239
+ * Fix logged cache keys not always matching actual key used by cache action.
472
240
 
473
- ```ruby
474
- Rails.cache.write(key, value, expires_at: Time.now.at_end_of_hour)
475
- ```
476
-
477
- *Jean Boussier*
478
-
479
- * Deprecate `ActiveSupport::TimeWithZone.name` so that from Rails 7.1 it will use the default implementation.
480
-
481
- *Andrew White*
482
-
483
- * Deprecates Rails custom `Enumerable#sum` and `Array#sum` in favor of Ruby's native implementation which
484
- is considerably faster.
485
-
486
- Ruby requires an initializer for non-numeric type as per examples below:
487
-
488
- ```ruby
489
- %w[foo bar].sum('')
490
- # instead of %w[foo bar].sum
491
-
492
- [[1, 2], [3, 4, 5]].sum([])
493
- # instead of [[1, 2], [3, 4, 5]].sum
494
- ```
495
-
496
- *Alberto Mota*
497
-
498
- * Tests parallelization is now disabled when running individual files to prevent the setup overhead.
499
-
500
- It can still be enforced if the environment variable `PARALLEL_WORKERS` is present and set to a value greater than 1.
501
-
502
- *Ricardo Díaz*
503
-
504
- * Fix proxying keyword arguments in `ActiveSupport::CurrentAttributes`.
505
-
506
- *Marcin Kołodziej*
507
-
508
- * Add `Enumerable#maximum` and `Enumerable#minimum` to easily calculate the maximum or minimum from extracted
509
- elements of an enumerable.
510
-
511
- ```ruby
512
- payments = [Payment.new(5), Payment.new(15), Payment.new(10)]
513
-
514
- payments.minimum(:price) # => 5
515
- payments.maximum(:price) # => 15
516
- ```
517
-
518
- This also allows passing enumerables to `fresh_when` and `stale?` in Action Controller.
519
- See PR [#41404](https://github.com/rails/rails/pull/41404) for an example.
520
-
521
- *Ayrton De Craene*
522
-
523
- * `ActiveSupport::Cache::MemCacheStore` now accepts an explicit `nil` for its `addresses` argument.
524
-
525
- ```ruby
526
- config.cache_store = :mem_cache_store, nil
527
-
528
- # is now equivalent to
529
-
530
- config.cache_store = :mem_cache_store
241
+ *Hartley McGuire*
531
242
 
532
- # and is also equivalent to
243
+ * Improve error messages of `assert_changes` and `assert_no_changes`.
533
244
 
534
- config.cache_store = :mem_cache_store, ENV["MEMCACHE_SERVERS"] || "localhost:11211"
245
+ `assert_changes` error messages now display objects with `.inspect` to make it easier
246
+ to differentiate nil from empty strings, strings from symbols, etc.
247
+ `assert_no_changes` error messages now surface the actual value.
535
248
 
536
- # which is the fallback behavior of Dalli
537
- ```
249
+ *pcreux*
538
250
 
539
- This helps those migrating from `:dalli_store`, where an explicit `nil` was permitted.
251
+ * Fix `#to_fs(:human_size)` to correctly work with negative numbers.
540
252
 
541
- *Michael Overmeyer*
253
+ *Earlopain*
542
254
 
543
- * Add `Enumerable#in_order_of` to put an Enumerable in a certain order by a key.
255
+ * Fix `BroadcastLogger#dup` so that it duplicates the logger's `broadcasts`.
544
256
 
545
- *DHH*
257
+ *Andrew Novoselac*
546
258
 
547
- * `ActiveSupport::Inflector.camelize` behaves expected when provided a symbol `:upper` or `:lower` argument. Matches
548
- `String#camelize` behavior.
259
+ * Fix issue where `bootstrap.rb` overwrites the `level` of a `BroadcastLogger`'s `broadcasts`.
549
260
 
550
- *Alex Ghiculescu*
261
+ *Andrew Novoselac*
551
262
 
552
- * Raises an `ArgumentError` when the first argument of `ActiveSupport::Notification.subscribe` is
553
- invalid.
263
+ * Fix compatibility with the `semantic_logger` gem.
554
264
 
555
- *Vipul A M*
265
+ The `semantic_logger` gem doesn't behave exactly like stdlib logger in that
266
+ `SemanticLogger#level` returns a Symbol while stdlib `Logger#level` returns an Integer.
556
267
 
557
- * `HashWithIndifferentAccess#deep_transform_keys` now returns a `HashWithIndifferentAccess` instead of a `Hash`.
268
+ This caused the various `LogSubscriber` classes in Rails to break when assigned a
269
+ `SemanticLogger` instance.
558
270
 
559
- *Nathaniel Woodthorpe*
271
+ *Jean Boussier*, *ojab*
560
272
 
561
- * Consume dalli’s `cache_nils` configuration as `ActiveSupport::Cache`'s `skip_nil` when using `MemCacheStore`.
273
+ * Fix MemoryStore to prevent race conditions when incrementing or decrementing.
562
274
 
563
- *Ritikesh G*
275
+ *Pierre Jambet*
564
276
 
565
- * Add `RedisCacheStore#stats` method similar to `MemCacheStore#stats`. Calls `redis#info` internally.
277
+ * Implement `HashWithIndifferentAccess#to_proc`.
566
278
 
567
- *Ritikesh G*
279
+ Previously, calling `#to_proc` on `HashWithIndifferentAccess` object used inherited `#to_proc`
280
+ method from the `Hash` class, which was not able to access values using indifferent keys.
568
281
 
282
+ *fatkodima*
569
283
 
570
- Please check [6-1-stable](https://github.com/rails/rails/blob/6-1-stable/activesupport/CHANGELOG.md) for previous changes.
284
+ Please check [7-1-stable](https://github.com/rails/rails/blob/7-1-stable/activesupport/CHANGELOG.md) for previous changes.