Tuesday, January 27, 2009

script/refactor

script/refactor という rails アプリケーションのリファクタリングを支援するスクリプトを書いてみました。

$ script/plugin install git://github.com/hiroshi/script-refactor.git

インストールすると、 script/refactor が生成されます。

例: user を person に変える。
$ script/refactor resource user person
Renamming files and directories:
git mv app/views/users app/views/people
git mv app/helpers/users_helper.rb app/helpers/people_helper.rb
git mv app/models/user.rb app/models/person.rb
git mv test/unit/user_test.rb test/unit/person_test.rb
git mv test/functional/users_controller_test.rb test/functional/people_controller_test.rb
git mv app/controllers/users_controller.rb app/controllers/people_controller.rb
git mv test/fixtures/users.yml test/fixtures/people.yml

Replacing class and variables:
user -> person
Users -> People
User -> Person
users -> people
pettern: /(\b|_)(user|Users|User|users)(\b|[_A-Z])/

./test/unit/person_test.rb:3: class UserTest < ActiveSupport::TestCase
./test/unit/person_test.rb:7: fixtures :users
./test/unit/person_test.rb:9: def test_should_create_user
./test/unit/person_test.rb:10: assert_difference 'User.count' do
...
./app/controllers/application.rb:18: current_user.group

NOTE: If you want to revert them:
git reset --hard


こんな感じにモデル、コントローラ、ヘルパー、テストのファイル名を変更して、コード中のクラス名、変数名もルールに従っているものは変更します。

適当に書いたスクリプトなので、特に置換する部分が思うような挙動にならない場合もあるかと思います。改善案やパッチをください。

No comments: