Rails のコードリーディング、久しぶりにしてみようと思いどこから読もうか眺めていたらたまたま見たことないモジュールが見つかったので読んだ。
ActiveRecord::Base#slice
と ActiveRecord::Base#values_at
を ActiveModel に移植したもの。non-Active Record なモデルで利用したかったからという理由。
テストを回して挙動を確認した
irb(#<AccessTest:0x00007f095f9d5bb0>):008> @point => #<AccessTest::Point:0x00007f095f504398 @vector=[123, 456, 789]> irb(#<AccessTest:0x00007f095f9d5bb0>):009> @point.x => 123 irb(#<AccessTest:0x00007f095f9d5bb0>):010> @point.y => 456 irb(#<AccessTest:0x00007f095f9d5bb0>):011> @point.z => 789 irb(#<AccessTest:0x00007f095f9d5bb0>):012> @point.slice(:x, :y, :z) => {"x"=>123, "y"=>456, "z"=>789} irb(#<AccessTest:0x00007f095f9d5bb0>):013>