railsのpresenceメソッドって
hoge = nil
fuga = hoge.presence || "empty"
って感じで||
がつくオプショナルな形なんだから
presence_or { value_in_blank }
みたいに||もラップしたメソッド化されていれば嬉しいな
実際は
hoge = nil
fuga = hoge || "empty"
の書き方でもやってること同じだけど、hogeがnullableな場合を考慮してpresence
の記法が生まれたと思っている(hoge.present? ? hoge : "empty"
が冗長だから)。
だったらnilの対処時に多くの場合で||
でデフォルト値を入れるんだから、考慮してほしかったな。
一応例外があるけど
hoge = ""
fuga = hoge.presence || "empty" # "empty"
fuga = hoge || "empty" # ""
どういう経緯で今の形式になっているかも知らないし調べるのも面倒だからPRなんて投げないけど
追記
presence_or
をデフォルト値が引数になる形で関数化した場合、引数が評価されてしまうとコメントいただきました。
確かにそのとおりで、デフォルト値セットが必要ないときにデフォルト値が評価されてしまいます。デフォルト値が関数の返り値でその関数に副作用があったら、意図せず副作用が発生するので、遅延評価されるブロックの形に修正しました
def hoge_something
# userがあろうとなかろうと、login_and_return_userは実行され、userがある場合に不要な副作用が発生する
login_user = user.presence_or(login_and_return_user)
...
end
def hoge_something
# userがある場合後者は評価されず関数も実行されない
login_user = user.presence || login_and_return_user
...
end
def login_and_return_user
user = login
login_count_increment # 副作用がある操作
user
end