Ruby 2.3 new features

Ruby 2.3.0 has been around since end of 2015. It brings some pretty nice new features! Make sure to read the linked post with its many examples!

Hash#fetch_values

Similar to Hash#fetch, but for multiple values. Raises KeyError when a key is missing.

attrs = User.last.attributes
attrs.fetch_values :name, :email

Hash#to_proc

Turns a Hash into a Proc that returns the corresponding value when called with a key. May be useful with enumerators like #map:

attrs.to_proc.call(:name)
attrs.keys.grep(/name/).map &attrs

Hash comparison

Hashes can now be compared like numbers: <, >, <=, >=, which checks for (proper) subsets.

{a: 1} >= {a: 1} # => true
{a: 1} > {a: 1} # => false

Numeric predicates

Numeric#positive? and Numeric#negative? allow for easy filtering:

[1, -4, 2, -100].select &:positive? # => [1, 2]

Negative grep

Enumerable#grep_v excludes from the result set. It's similar to Rails' #reject:

['foo', 1, 'bar', {}].grep String # => ['foo', 'bar']
['foo', 1, 'bar', {}].grep_v String # => [1, {}]

Further, a safe navigation operator and Array#dig and Hash#dig!.

Dominik Schöler Almost 8 years ago