.find_by_admin
よりも.find_by(type: :admin)
の方が自然な書き方だった
開発中にこんな風に気づいてコードを直したくなった、
しかし .find_by_admin
とすでに色々なファイルに書いてしまっている、という時は sed
で一括置換するのが簡単です1。
$ git ls-files | xargs -n 1 sed -i 's|find_by_admin|find_by(type: :admin)|g'
これは大変よく行う作業なので2、専用のコマンドにしてみました。
使い方
$ git sed 's|find_by_admin|find_by(type: :admin)|g'
また、特定のディレクトリのファイルのみを置換したいことがあります(例えば、テストコードのみを変更したい場合)。ファイルを検索するディレクトリ名を後ろに指定できます。
$ git sed 's|find_by_admin|find_by(type: :admin)|g' spec/ test/
ソースコード
以下のファイルを ~/bin/git-sed
などに保存してください。
# !/bin/bash
set -euC
if [ "$#" -eq 0 ]; then
echo 'git sed COMMAND [PATH [PATH[...]]]' >&2
exit 1
fi
if which gsed > /dev/null; then
SED=gsed # for macOS
else
SED=sed
fi
CMD=(-e "$1")
shift
apply_sed() {
f="$1"
}
while read -r f; do
[ -f "$f" ] && [ ! -L "$f" ] && "$SED" -i "${CMD[@]}" "$f"
done < <(git ls-files -- "$@")