brew/Library/Homebrew/searchable.rb
Nanda H Krishna 27466b01da
searchable: flatten array before matching
Fix #13203 which occurs when searching cask descriptions.
2022-04-26 18:18:29 -04:00

40 lines
923 B
Ruby

# typed: false
# frozen_string_literal: true
# Helper module for making a class searchable with both regular expressions and strings.
#
# @api private
module Searchable
def search(string_or_regex, &block)
case string_or_regex
when Regexp
search_regex(string_or_regex, &block)
else
search_string(string_or_regex.to_str, &block)
end
end
private
def simplify_string(string)
string.downcase.gsub(/[^a-z\d]/i, "")
end
def search_regex(regex)
select do |*args|
args = yield(*args) if block_given?
args = Array(args).flatten.compact
args.any? { |arg| arg.match?(regex) }
end
end
def search_string(string)
simplified_string = simplify_string(string)
select do |*args|
args = yield(*args) if block_given?
args = Array(args).flatten.compact
args.any? { |arg| simplify_string(arg).include?(simplified_string) }
end
end
end