用于修复ActionController :: TestCase HTTP弃用警告的正则表达式

时间:2016-12-12 06:31:03

标签: regex ruby-on-rails-5

我正在将应用从rails 4升级到rails 5.我正在获取ActionController::TestCase HTTP deprecation warning。我知道如何解决它。例如,get :show, id: 1, email: o@o.com变为get :show, params: { id: 1, email: o@o.com },但应用程序的日期为rails 2,并且在50多个控制器规范中有许多警告实例。我正在尝试开发一个适用于Sublime Text的正则表达式,它将修复大多数警告。我的第一次尝试是

Find: (get :[\w]*,)([^\n]*)
Replace : \1 params: { \2 }

这在许多情况下有效,但在以下方面失败

  • 如果get超过一行,则无效。如果确实超过一行,则前一行以,\n结尾。
    • 它不适用于putcreate和其他http动词
    • 如果有其他类型的输入,则无效headers

最后一个案例对我来说并不重要,因为我的这些案例相对较少,所以可以手动修复这些案例。有人可以建议使用find regex和Replace指令修复大多数弃用案例吗?

2 个答案:

答案 0 :(得分:1)

我遇到了同样的问题,但我没有使用正则表达式,而是使用了Rubocop的Autofix功能:

http://rubocop.readthedocs.io/en/latest/cops_rails/#railshttppositionalarguments

> bundle exec rubocop --rails --only HttpPositionalArguments --auto-correct

修复了大量这些弃用警告,但没有造成任何语法错误。 请务必设置TargetRailsVersion: 5.0或更高,以启用该警察。

答案 1 :(得分:0)

我提出了以下适用于多行和不同http动词的过程。它不适用于更复杂的情况,例如使用header信息。这是一个两步过程:

Find: (get|post|put|patch|delete)( :\w+)((?:,\n?[^\n,]+)+)
Replace: \1\2, params: { \3 }

然后

Find: params: { ,
then
params: { 

这解决了95%的弃用警告。