Project

General

Profile

Actions

Feature #13563

closed

Implement Hash#choice method.

Added by babanba-n (matzbara masanao) about 5 years ago. Updated over 4 years ago.

Status:
Closed
Priority:
Normal
Assignee:
-
Target version:
-
[ruby-dev:50114]

Description

Hi,

I propose Hash#choice method.

It pick up key and value pairs in Hash like a below code.

{ :a => 1, 2 => "2", "c" => true }.choice(:a, 2) # => { :a => 1, 2 => "2" }
{ :a => 1, 2 => "2", "c" => true }.choice("c", 10000) # => { "c" => true, 10000 => nil }

This method is useful when Hash have many keys, but programer need few key's.

For instance, it pick up personal data in ActiveRecord model's data, and migrate to new device.

feature_phone_user = User.find(params[:src_user_id])
profile = feature_phone_user.attributes.choice(*%i[nickname email sex birthday prefecture])
smart_phone_user   = User.new
smart_phone_user.attributes = profile

In other case, it pick up latest log from http request parameter.

condition = params.to_h.choice("user_id", "service_id")
latest_payment_log = PaymentLog.find_by(condition).last

If this method exist, I guess that many cases change to comfortable just a little.

Please consider about it.

And I write it.
https://github.com/baban/ruby/commit/4014ebe2ae261881669bef8369eb08aaecef2034


Related issues 2 (0 open2 closed)

Related to Ruby master - Feature #8499: Importing Hash#slice, Hash#slice!, Hash#except, and Hash#except! from ActiveSupportClosedmatz (Yukihiro Matsumoto)Actions
Related to Ruby master - Feature #15822: Add Hash#exceptClosedActions
Actions

Also available in: Atom PDF