2023年3月31日,星期五

2023年3月31日版 🌸

作者:zzak

大家好,我是zzak,来自日本青森,这里是伟大的Jonan Scheffler的家乡。
2023年已正式过去25%,是时候享受🌸并探索本周Rails代码库的更新了。

将 debug gem 添加回 Gemfile 模板
随着 Ruby v3.2.2 的发布(今天发布),我们可以安全地将“debug”gem 添加回生成的 Rails 应用的 Gemfile 模板中。

当 `inverse_of` 存在时,推断 `foreign_key`
此 PR 使 `has_one` 和 `has_many` 关联在 `inverse_of` 选项存在时,自动推断 `foreign_key` 选项。

Action Cable: `assert_broadcasts` 返回广播的消息
此 PR 使 Action Cable 的 `assert_broadcasts` 返回已广播的消息。

这样您可以更轻松地测试它们,例如

messages = assert_broadcasts("test", 2) do
  ActionCable.server.broadcast "test", { message: "one" }
  ActionCable.server.broadcast "test", { message: "two" }
end
assert_equal 2, messages.length
assert_equal({ "message" => "one" }, messages.first)
assert_equal({ "message" => "two" }, messages.last)

如果您期望广播大量消息,或者只想匹配数据中的某个元素,这将非常有用;在这两种情况下,`assert_broadcast_on` 都无法很好地工作。

Active Storage: 在 js 库或框架中进行直接上传是安全的
此 PR 允许在从客户端进行直接上传时支持额外的标头,以支持各种类型的身份验证,例如 Bearer token、API 密钥、Basic auth、OAuth 1.0、Digest auth 等。

在 `number_to_human_size` 中添加 zettabyte
Zettabytes (ZB) 已添加到 Active Support。

ActiveSupport::NumberHelper.number_to_human_size(1.kilobyte**7)
#=> "1 ZB"

在 Content-Type 响应标头中设置 charset (OWASP)
此 PR 确保 charset 被包含在 Rails 发出的所有 Content-Type 标头中。

OWASP 建议每个 HTTP 响应都包含一个具有安全字符集的 Content-Type 标头。

Active Storage: 弃用 `mini_mime` 使用 `marcel`
又少了一个需要担心的依赖项升级!

修复 Rails 生成的索引名称过长问题
自动生成的索引名称现在限制为 62 字节,这符合 MySQL、Postgres 和 SQLite 的默认索引名称长度限制。

在 ActiveRecord::Base 上实现 `marshal_dump` 和 `marshal_load`
已引入更稳定、更优化的 Active Record 模型 Marshal 序列化器。

您可以通过 `config.active_record.marshalling_format_version = 7.1` 进行选择加入。

为 `ActionText::EncryptedRichText` 添加 ActiveSupport 加载钩子
以前 `ActionText::Record` 和 `ActionText::RichText` 有专用的加载钩子。
此 PR 为 `ActionText::EncryptedRichText` 添加了一个额外的钩子,以便外部库可以以同样简单的方式在子类加载后运行代码。

为 Backburner 作业实现 `provider_job_id`
此 PR 为 Beanstalk ActiveJob QueueAdapter 实现 `provider_job_id`。
例如,如果您希望能够取消作业

Beaneater::Job.new(
  Backburner::Connection.new(Backburner.configuration.beanstalk_url),
  {id: job.provider_job_id}
).delete

为命令建议仅加载一次 Rake 任务
在此 PR 之后,`bin/rails --help` 命令现在将仅列出框架和插件命令。 `lib/tasks/*.rake` 文件中定义的 Rake 任务将不再包含在内。
有关这些任务的列表,请使用 `rake -T`。

在 API 文档的主框架页面中包含 README
此 PR 教 RDoc 将 Rails API 文档包含每个相关库的顶级常量 README。
以前,这些库模块中的许多在 API 文档中都有空描述,现在它们包含了所有相关信息,这是一个很好的改进!

将 ActionController::Parameters 的 except 别名为 without
此 PR 添加了对 `without` 作为 `except` 在 StrongParameters 上的别名的支持。

例如,您现在可以这样做

@params[:person].without(:name)

这与以下相同

@params[:person].except(:name)

Rubocop markdown 片段
此 PR 添加了 rubocop-md 用于 linting 所有 markdown 文件。
确保指南中的任何代码片段也遵循 Rails 编码约定,而无需手动审查每次提交的更改。

将 markdownlint 添加到指南
作为上一个 PR 的后续,现在指南中的所有 markdown 内容都使用 markdownlint 进行 linting。

允许销毁 active storage 变体
创建 active storage 变体时,会插入 `ActiveStorage::VariantRecord`,然后上传文件。
如果上传失败,即使数据库中存在 `ActiveStorage::VariantRecord`,文件也可能丢失。
在这种情况下,我们现在可以通过此 API 删除单个变体的相应记录

attachable.variant(resize_to_limit: [100, 100]).destroy

允许 Attachables 在附件丢失时覆盖默认模板
渲染 ActionText 附件时,如果底层 attachable 已被移除,Rails 目前会为所有 attachable 类型渲染 `action_text/attachables/missing_attachable` 部分。消耗应用程序可以覆盖此部分,但它对于所有 attachable 模型都是全局的。

现在,您可以在必要时渲染特定于模型的局部视图,例如,您可以为文件附件渲染一个占位符图像,或为 User 附件渲染文本“已删除用户”。

您可以在 这里 查看所有更改的列表。
上周我们有 34 位贡献者 对 Rails 代码库做出了贡献!

下次再见!

订阅以通过邮件获取这些更新。