2

我正在为 Mac 中的 rails 应用程序寻找重构工具。在研究了一整周后,我有点惊讶地发现没有好的工具可以一次性重构命名空间/控制器/模型/视图/路由。我对 Mac 范式有点陌生,所以我可能遗漏了一些东西。

我可以看到为 Rails 开发的几个 gem,它们可以进行一些重命名/替换,但在重构后仍然需要“手动调整”。

为了满足我的要求,这里是标准 Rails 项目

# routes
map.namespace :admin do |admin|
  admin.resources :items
end
match "/admin/items/:id/enable" => "admin/items#enable"

# model
/app/models/items.rb
class item < ActiveRecord::Base

end

# views
/app/views/admin/items/
/app/views/admin/items/index.html.erb
/app/views/admin/items/show.html.erb
/app/views/admin/items/new.html.erb
/app/views/admin/items/edit.html.erb


# controller
/app/controllers/admin/items_controller.rb

class Admin::ItemsController < ApplicationController
  def index
    #
  end

  def show
    #
  end

  def enable
    #
  end
end

我对这个工具的要求非常基本:

重构:“item”到“product”——大小写匹配

  1. 工具应将任何包含“项目”的文件重命名为“产品”
  2. 工具应将任何包含“项目”的文件夹重命名为“产品”
  3. 工具应在当前或子目录中的所有文件中查找并替换“item”和“product”。

具有上述功能:

我可以通过以下方式简单地反应整个项目:

> refactor "item" "product"
> refactor "Item" "Product"
> refactor "admin" "shop"
> refactor "Admin" "Shop"

如果您能帮助我提供任何可以满足我上述要求的 Mac 工具或任何脚本的链接,将不胜感激。

4

2 回答 2

2

好吧,我觉得这听起来很整洁,所以我写了一个工具,它可以缝合你想要的东西,我决定称之为 refato。

这是您的快速自述:

正确用法是:refacto findString changeString <file extensions> <options>

文件扩展名不是可选的。为了重命名或重构任何文件,您必须至少列出一个文件扩展名。默认情况下将重命名文件夹,如果您不想重命名它们,请使用 -nf。

选项:
-a :要求确认重构或重命名每个文件/文件夹。
-nf:不重命名文件夹或子文件夹
-ci:不区分大小写。将更改 findString 的所有版本

在此处获取源代码:https ://github.com/bpo217/refacto

有几点需要注意:

Refato 会更改文件中 findString 的所有实例,而不仅仅是类名或类似名称。

Refato 将触及所有子文件夹和这些子文件夹中的文件。

由于它是编译后的工具,只需将其放入 /usr/local/bin 以及您需要执行的任何其他操作,因此您只需在终端的任何位置键入 refato 即可运行它。它将始终与当前工作目录一起使用。

希望这可以帮助!

于 2012-06-02T09:25:22.707 回答
0

我相信 Rails 并不那么容易重构。

如果您不想经常大规模执行此操作,那么我建议您简单地在文件中查找并在需要的地方替换。是的,这需要时间,但寻找工具并学习它也是如此。如果您想小心的话,可以在之后查看工具的更改;-)

旁注:Netbeans 是我个人对此类工作的偏爱,因为它具有搜索功能。特别是如果您将其与源代码控制集成在一起(良好的提交前审查)。当您需要切换 OS-es(如 Mac)或编程语言时,它对您来说也相当不错。

于 2012-06-01T14:17:37.603 回答