class Solargraph::Pin::Search

def do_query

Returns:
  • (::Array) -
def do_query
  return @pins if @query.nil? || @query.empty?
  @pins.map do |pin|
    match = [fuzzy_string_match(pin.path, @query), fuzzy_string_match(pin.name, @query)].max
    Result.new(match, pin) if match > 0.7
  end
    .compact
    .sort { |a, b| b.match <=> a.match }
    .map(&:pin)
end

def fuzzy_string_match str1, str2

Returns:
  • (Float) -

Parameters:
  • str2 (String) --
  • str1 (String) --
def fuzzy_string_match str1, str2
  return (1.0 + (str2.length.to_f / str1.length.to_f)) if str1.downcase.include?(str2.downcase)
  JaroWinkler.similarity(str1, str2, ignore_case: true)
end

def initialize pins, query

Parameters:
  • query (String) --
  • pins (::Array) --
def initialize pins, query
  @pins = pins
  @query = query
end

def results

Returns:
  • (::Array) -
def results
  @results ||= do_query
end