def all(query)
return to_enum(:all, query) unless block_given?
if @hash.include? query
yield @hash[query]
return
end
case query
when String
optimize_if_necessary!
@regexes.each do |regex|
match = regex.match(query)
next unless match
@regex_counts[regex] += 1
value = @hash[regex]
if value.respond_to? :call
yield value.call(match)
else
yield value
end
end
when Numeric
@ranges.each do |range|
yield @hash[range] if range.cover? query
end
when Regexp
@hash.each do |key, val|
yield val if key.is_a?(String) && query =~ key
end
end
end