aboutsummaryrefslogtreecommitdiffstats
path: root/activesupport/CHANGELOG.md
diff options
context:
space:
mode:
Diffstat (limited to 'activesupport/CHANGELOG.md')
-rw-r--r--activesupport/CHANGELOG.md63
1 files changed, 63 insertions, 0 deletions
diff --git a/activesupport/CHANGELOG.md b/activesupport/CHANGELOG.md
index db9c7e96f3..4c7b134c35 100644
--- a/activesupport/CHANGELOG.md
+++ b/activesupport/CHANGELOG.md
@@ -1,3 +1,66 @@
+* Introduce `ActiveSupport::ActionableError`.
+
+ Actionable errors let's you dispatch actions from Rails' error pages. This
+ can help you save time if you have a clear action for the resolution of
+ common development errors.
+
+ The de-facto example are pending migrations. Every time pending migrations
+ are found, a middleware raises an error. With actionable errors, you can
+ run the migrations right from the error page. Other examples include Rails
+ plugins that need to run a rake task to setup themselves. They can now
+ raise actionable errors to run the setup straight from the error pages.
+
+ Here is how to define an actionable error:
+
+ ```ruby
+ class PendingMigrationError < MigrationError #:nodoc:
+ include ActiveSupport::ActionableError
+
+ action "Run pending migrations" do
+ ActiveRecord::Tasks::DatabaseTasks.migrate
+ end
+ end
+ ```
+
+ To make an error actionable, include the `ActiveSupport::ActionableError`
+ module and invoke the `action` class macro to define the action. An action
+ needs a name and a procedure to execute. The name is shown as the name of a
+ button on the error pages. Once clicked, it will invoke the given
+ procedure.
+
+ *Vipul A M*, *Yao Jie*, *Genadi Samokovarov*
+
+* Preserve `html_safe?` status on `ActiveSupport::SafeBuffer#*`.
+
+ Before:
+
+ ("<br />".html_safe * 2).html_safe? #=> nil
+
+ After:
+
+ ("<br />".html_safe * 2).html_safe? #=> true
+
+ *Ryo Nakamura*
+
+* Calling test methods with `with_info_handler` method to allow minitest-hooks
+ plugin to work.
+
+ *Mauri Mustonen*
+
+* The Zeitwerk compatibility interface for `ActiveSupport::Dependencies` no
+ longer implements `autoloaded_constants` or `autoloaded?` (undocumented,
+ anyway). Experience shows introspection does not have many use cases, and
+ troubleshooting is done by logging. With this design trade-off we are able
+ to use even less memory in all environments.
+
+ *Xavier Noria*
+
+* Depends on Zeitwerk 2, which stores less metadata if reloading is disabled
+ and hence uses less memory when `config.cache_classes` is `true`, a standard
+ setup in production.
+
+ *Xavier Noria*
+
* In `:zeitwerk` mode, eager load directories in engines and applications only
if present in their respective `config.eager_load_paths`.