おもしろwebサービス開発日記

Ruby や Rails を中心に、web技術について書いています

Rails 4.1.0 で新しく導入された便利メソッド

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#compactObject#presence_in は結構使えるのでは。あとはあんまり使いどころ無いかもしれないけど、積極的に使っていきたいと思います。

参考

Ruby on Rails 4.1 Release Notes — Ruby on Rails Guides