なにこのエラー
Assignment Branch Condition size for search is too high. [<10, 21, 5> 23.79/20]
コミットをする前にこんなエラーが出た。
調べてみると、なげーよ、幅取りすぎだろみたいなエラーらしい。
RuboCopとは。簡単に
RuboCopのGithub
https://github.com/rubocop-hq/rubocop/tree/v0.28.0
このRubCopはコードを検査してくれるものらしくて、コードが長いとか、インデントが変だとかいろんなことを教えてくれる。勝手に直してくれる(不自然なインデントを修正)ときもあれば、警告文だけだして、自分でどうにかしてくれみたいな時もある。ただ、このRuboCopからの指摘も全てが正しい訳ではないっぽい。
今回のエラーに関して
Assignment Branch Condition size for search is too high. [<10, 21, 5> 23.79/20]
最初に述べたように、なげーよ的な意味らしい。
実際に指摘を受けたコード
def search
if params[:city_id]
pagy, offices = pagy Office.where(city_id: params[:city_id])
pagy_headers_merge(pagy)
elsif params[:keyword]
keywords = params[:keyword].split(/[[:blank:]]+/).select(&:present?)
pagy, offices = pagy_array([])
pagy_headers_merge(pagy)
keywords.each do |keyword|
offices += Office.where('name LIKE (?) OR
address LIKE (?) OR
near_station LIKE (?) OR
introduction LIKE (?) OR
company LIKE (?)',
"%#{keyword}%",
"%#{keyword}%",
"%#{keyword}%",
"%#{keyword}%",
"%#{keyword}%")
end
else
pagy, offices = pagy(Office.all)
pagy_headers_merge(pagy)
end
render json: offices, each_serializer: OfficeIndexSerializer, include: '**'
end
自分でも書いていて、長いなと思った。縦に長い。ただ、今の知識ではどうやってコードをより簡潔なものにすればいいか思いつかなかった。だれか教えてください。
それで結局どうしたか・・・
.rubocop.yml
RuboCopの設定を変更した。
エラー文を見てみると、、、、
Assignment Branch Condition size for search is too high. [<10, 21, 5> 23.79/20]
[<10, 21, 5> 23.79/20]
この部分が、点数を表しているっぽい。これでみると、これだと『MAXスコアが20なのにお前のは23.79だよ』ってことらしく、これをどうにかするしかないと思った。
それで、.rubocop.yml内にある設定を変更した。
どう変更したかというと、、、
Metrics/AbcSize:
# The ABC size is a calculated magnitude, so this number can be a Fixnum or
# a Float.
Max: 15
このMaxの部分を 25に設定を変更した。そしてコミットすると、RubCopからの指摘を受けずにすんだ。
おわりに
設定変えられるのかー程度に、この記事では感じていただければ、幸いです。