This blog is part of our Ruby 2.5 series.

Ruby 2.5.0 was recently released.

Ruby has sequence predicates such as all? , none? , one? and any? which take a block and evaluate that by passing every element of the sequence to it.

if queries . any? { | sql | /LEFT OUTER JOIN/i =~ sql } logger . log "Left outer join detected" end

Ruby 2.5 allows using a shorthand for this by passing a pattern argument. Internally case equality operator(===) is used against every element of the sequence and the pattern argument.

if queries . any? ( /LEFT OUTER JOIN/i ) logger . log "Left outer join detected" end # Translates to: queries . any? { | sql | /LEFT OUTER JOIN/i === sql }

This allows us to write concise and shorthand expressions where block is only used for comparisons. This feature is applicable to all? , none? , one? and any? methods.

Similarities with Enumerable#grep

This feature is based on how Enumerable#grep works. grep returns an array of every element in the sequence for which the case equality operator(===) returns true by applying the pattern. In this case, the all? and friends return true or false.