Switch Range#=== to use cover? instead of include?
Range#=== is an alias of
#include?, which works by
#each-ing all the values and comparing them to the checked value. It may lead to fascinating inefficiencies, when working with strings or other similar classes (for example, IP class for allowing/disallowing IP ranges). Moreover, it is not consistent with behavior of numerical ranges (which is kinda special case, I guess):
(1...3) === 2.5 # true - though (1..3).to_a.include?(2.5) is false ('a'...'z') === 'foo' # false - because ('a'..'z').to_a.include?('foo') is false
=== is heavily used in
grep, and there is no option to replace it manually with
cover? there, maybe it would be reasonable to change the behavior?
To be honest, I could imagine no real cases when
include? is preferable for identity check.