ruby - 如何使用 Rubocop 禁止特定的函数调用?
问题描述
我有一个 Rails 项目,我们正在迁移到使用图像代理来提供我们的 ActiveStorage 图像。作为此迁移的一部分,我们需要更改 to 的所有现有url_for()
用法ix_image_url()
。
url_for
将继续存在,但为了防止其他开发人员将来意外使用错误的功能并意外提供未经代理的图像,我想url_for
在我们的项目中“禁止”使用。
这可能吗?
解决方案
只是方法调用的 Grep
虽然您当然可以编写自己的 cop,但您定义的用例似乎更适合在持续集成服务器上完成的简单 grep。例如:
if egrep -Rn '\burl_for' '/path/to/source/tree'; then
echo 'error: use ix_image_url instead of url_for' >&2
exit 1
fi
可以作为 CI 管道中的构建或测试步骤运行。它将打印有问题的行以及文件名和行号,并将您的“如何修复它”自定义消息发送到标准错误以报告构建失败。
请注意,像这样的 shell 命令可以在大多数 CI 实现中运行,但如果这对您更有效,您当然可以将其体现在 cop 中或将其内联到您的管道中(例如 Jenkins 作业的 Groovy 代码)。但是,KISS 原则主张使实现尽可能简单,因此我会避免使用 AST 或自定义警察的维护开销,除非您获得比描述的用例更多的收益在你原来的问题中。
推荐阅读
- nlp - Dialogflow 知识(测试版功能)
- apache-flink - 有没有办法将批处理数据移动到数据流中?
- reactjs - 反应式搜索、ES 和 CORS
- mysql - 从 JOIN with IF 语句中获取行结果
- javascript - 为什么邮件没有发送到电子邮件ID作为提及?
- sql - 在 PostgreSQL 中使用 INNER JOIN 时出错?
- node.js - 使用 npm 安装时重命名包
- javascript - 有节点 API + Heroku 部署问题
- javascript - 如何检查我的节点应用程序与节点版本的向后兼容性
- angular - 尝试代理 Angular 4 rpoject 时发生错误,URL 配置为 HTTPS