2012-05-22 2 views
2

Я ищу инструмент для рефакторинга для приложений с рельсами в Mac. После исследования на целую неделю я удивлен, что нет хорошего инструмента для ретрансляции пространства имен/контроллера/модели/просмотра/маршрутов за один раз. Я немного новичок в парадигме Mac, так что, возможно, я чего-то не хватает.Инструмент рефакторинга рельсов для Mac

Я вижу несколько пару драгоценных камней, разработанных для Rails, которые могут выполнять переименование/замену, но при этом после рефакторинга требуется «ручная настройка».

Чтобы обеспечить мое требование, здесь стандартный 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 

Моим требование для этого инструмента очень просто:

Рефакторинг: «Пункт» в «продукт» - с футляром матчем

  1. Инструмент должен переименовать любой файл, содержащий «элемент» в «продукт»
  2. Инструмент должен переименовать любую папку, содержащую «элемент» для «производства ct "
  3. Инструмент должен найти и заменить" item "и" product "во всех файлах в текущей или подкаталоге.

С выше особенностью:

Я просто реакторной весь проект по:

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

Значительно признателен, если вы можете помочь мне, чтобы обеспечить связь любого инструмента Mac или любой скрипт, который может выполнить мой выше требование.

+0

Возможно, вы захотите дать рубине мою попытку (не использовать ее самостоятельно, но она требует поддержки таких вещей, как рефакторинг) –

+0

Спасибо Фредерик. Я пробовал RubyMine и да, вы можете реорганизовать класс или имена методов с RubyMine, но до сих пор не хватает обработки переименования имен папок и маршрутов карт (мое рефакторинг № 1 и № 2). –

ответ

2

Ну, я решил, что это звучало аккуратно, поэтому я написал инструмент, который швы снимает то, что вы хотите, и я решил назвать его рефакто.

Вот ваш быстрые чтения мне:

Правильное использование является: refacto findString changeString <file extensions> <options>

Расширение файлов не является дополнительным. Для того, чтобы любые файлы были переименованы или реорганизованы, вы должны указать хотя бы одно расширение файла. Папки будут переименованы по умолчанию, если вы не хотите их переименовывать, используйте -nf.

Опции:
-a: Запросить подтверждение для рефакторинга или переименовать каждый файл/папку.
-nf: не переименовывать папки или подпапки
-ci: Case Indenitive. Изменится все версии FindString

Получить исходный код здесь: https://github.com/bpo217/refacto

пару вещей отметить:

Refacto изменяет все экземпляры FindString в файле, а не только имя класса или что-нибудь подобное что.

Refacto коснется всех подпапок и файлов в этих подпапках.

Поскольку это инструмент после его компиляции, он просто помещает его в/usr/local/bin и все, что вам нужно для этого, вы можете просто ввести refacto в любом месте терминала, чтобы запустить его. Он всегда будет работать с текущим рабочим каталогом.

Надеюсь, это поможет!

+0

Blah Я просто понял, что вы не можете просто заставить его работать так легко. Завтра вы получите исходный код. – Ben

+0

Вау! Вы - спасатель жизни. Я не запускал ваш скомпилированный код, но это именно то, что я ищу. Пожалуйста, дайте мне знать, если вы отпустите этот инструмент на github. –

+0

Вот адрес github: https://github.com/bpo217/refacto. Дайте мне знать, если это поможет! Я отредактирую свой главный пост. – Ben

0

Рельсы не так-то просто рефакторинг, я считаю.

Если вы не хотите делать это очень часто ни в больших масштабах, то я бы рекомендовал простой Найти в файлах и заменить при необходимости. Да, это требует времени, но и поиск инструмента и его изучение. И затем просмотрите изменения инструмента, если вы хотите быть осторожными ;-)

Sidenote: Netbeans - это мое личное предпочтение для такой работы из-за возможностей поиска. Особенно, если вы интегрированы с вашим источником управления (хороший обзор перед фиксацией). Это также довольно приятно для вас, когда вам нужно переключать OS-es (например, Mac) или языки программирования.

Смежные вопросы