Rails(ActiveSupport) は標準クラスを拡張した便利メソッド群を提供してくれています。時々これは使わないなー…という微妙なやつもありますが、僕はけっこう好きです。
Rails 4.1.0 で新しく入ったそんなメソッドをまとめます。
Numeric#in_milliseconds
数値をミリ秒の単位に合わせて返す。
1.hour.in_milliseconds #=> 3600000
実装は単に1000倍しているだけ。
def in_milliseconds
self * 1000
end
すごくたまに使うかもしれない。
Date#middle_of_day, DateTime#middle_of_day, Time#middle_of_day
昼の12時を返す。
date = Date.today
date.middle_of_day => Sat, 19 Apr 2014 12:00:00 UTC +00:00
date.middle_of_day.class #=> ActiveSupport::TimeWithZone
# 以下同名のメソッド
date.midday
date.noon
date.at_midday
date.at_midday
Date#all_week/month/quarter/year
Time.all_day
というメソッドの兄弟分。時々使いそう。
date.all_week #=> Mon, 14 Apr 2014..Sun, 20 Apr 2014
date.all_month #=> Tue, 01 Apr 2014..Wed, 30 Apr 2014
date.all_quarter #=> Tue, 01 Apr 2014..Mon, 30 Jun 2014
date.all_year #=> Wed, 01 Jan 2014..Wed, 31 Dec 2014
Time.zone.yesterday, Time.zone.tomorrow
説明不要ですね。
Time.zone.today #=> Sat, 19 Apr 2014
Time.zone.yesterday #=> Fri, 18 Apr 2014
Time.zone.tomorrow #=> Sun, 20 Apr 2014
String#remove(pattern)
String#gsub(pattern,'')
と同じ。
'Ruby Rails Sinatra Rails Padrino'.remove('Rails') #=> "Ruby Sinatra Padrino"
Hash#compact, Hash#compact!
ハッシュのバリューが nil なものを削除する
{foo: 'foo', bar: nil, hoge: 'hoge', fuga: nil}.compact #=> {:foo=>"foo", :hoge=>"hoge"}
Object#presence_in
CHANGELOGの説明から引用。次の二行は同じ意味。
params[:bucket_type].in?(%w( project calendar )) ? params[:bucket_type] : nil
params[:bucket_type].presence_in %w( project calendar )
要するにホワイトリスト的な事ができる。
'hoge'.presence_in %w(hoge foo) #=> "hoge"
'hoge'.presence_in %w(fuga foo) #=> nil
まとめ
Hash#compact
や Object#presence_in
は結構使えるのでは。あとはあんまり使いどころ無いかもしれないけど、積極的に使っていきたいと思います。