Rails 4.2.0.alphaのコミットログを眺めてたんだけど、せっかくだし理解を深めるためにもブログという形で書いておくことに。
Railsのmaster branchをインストールする
通常は安定バージョンのRailsをインストールすると思いますが、コードを読んだり試しに実行するのが目的なので、開発中の最新バージョンを入れたいです。
Gemfileに下記を記述してbundle install
すると怒られました。
gem 'rails', github: 'rails/rails'
Could not find gem 'arel (~> 6.0.0) ruby', which is required by gem 'rails (>= 0) ruby', in any of the sources.
arelも最新バージョンを入れればいいっぽい。
# Gemfileに追記
gem 'arel', github: 'rails/arel'
$ bundle install
OKですね。無事2014/7/5時点最新の4.2.0.alphaが入りました。
$ rails -v
Rails 4.2.0.alpha
Hash#transform_valuesを試してみる
下記のコミットログ見てた。
Railsはコマンドライン実行が簡単だから助かる。メソッドのコメント通りに実行してみる。
$ rails c
{ a: 1, b: 2, c: 3 }.transform_values { |x| x * 2 }
#=> {:a=>2, :b=>4, :c=>6}
なるほど、全ての値に式を評価してその結果値を元の値と置き換えるわけか。実装もシンプルだった。見ればすぐわかる。
def transform_values(&block)
result = self.class.new
each do |key, value|
result[key] = yield(value)
end
result
end
文字列の結合もイケる。
original = { a: 'a', b: 'b' }
original.transform_values { |v| v + '!' }
#=> {:a=>"a!", :b=>"b!"}
以前からあったHash#transform_keys
の値版ということですね。
original.transform_keys { |k| k.upcase }
#=> {:A=>"a", :B=>"b"}
これってどんな時に使うんだろうか。便利だとは思うけど。
active_supportのcore_extensionsを見てると知らなかったのとかちょいちょいあって楽しいよ!
http://guides.rubyonrails.org/active_support_core_extensions.html#extensions-to-hash