Useful Ruby (and Rails) Hash Methods

Been pretty busy this past year (so much for trying to make an effort to post more :-/). Thought I make a quick post about some useful hash methods that I've been using lately.

For this post, I'll be calling methods against the following hash structure.

my_hash = { test: 'Test', this: 'This', out: 'Out' }

Hash#fetch

I've been using fetch to provide default values for keys that are not provided in hash. It can be really useful for parameters passed in to methods. I mostly provide a default value, but if you don't provide one a KeyError exception will be thrown, which could be useful.

my_hash.fetch(:test, 'Default') # => 'Test'
my_hash.fetch(:other, 'Other Default') # => 'Other Default'
my_hash.fetch(:something') # => throws KeyError

This is also useful for values that should be boolean. For instance:

my_hash[:conditional] # => nil
my_hash.fetch(:conditional, false) # => produces false not nil
my_hash[:conditional] = true
my_hash.fetch(:conditional, false) # => true

Hash#values_at

values_at is useful to select a subset of the values from the hash given a list of keys.

my_hash.values_at(:test, :this) # => ['Test', 'This']

Rails Hash Methods

I'd also like to point out a few Hash methods that I've been using quite a bit on the Rails end, slice and except.

slice

slice returns a new Hash containing only the keys passed in as the arguments.

my_hash.slice(:test) # => { test: 'Test' }

except

except is the inverse of slice. except returns a new Hash that contains all of the key pairs except for the keys passed in as the argument.

my_hash.except(:test) # => { this: 'This', out: 'Out' }

I've been utilizing these methods when working on building up a filter set for queries.

As I mentioned, these are just some methods that I've been using a lot recently. If anyone has any other methods they find useful feel free to drop a comment.