class BELParser::Completion::WildcardMatchParameterCompleter
Constants
- L
Public Instance Methods
complete(string_literal, caret_position, options = {})
click to toggle source
# File lib/bel_parser/completion.rb, line 806 def complete(string_literal, caret_position, options = {}) return [] if string_literal.length < 3 query = case when caret_position == string_literal.length "#{string_literal}*" when caret_position == 0 "*#{string_literal}" else ante = string_literal.slice(0...caret_position) post = string_literal.slice(caret_position..-1) "#{ante}*#{post}" end # find namespace URI if prefix was provided prefix = options[:prefix] if prefix specified_prefix = prefix.to_s.upcase matched_namespace = @namespaces[specified_prefix] uri = matched_namespace ? matched_namespace.uri : nil else uri = nil end @search .search(query, :namespace_concept, uri, nil, size: 100) .sort { |match1, match2| L.distance(string_literal.downcase, match1.pref_label.downcase) <=> L.distance(string_literal.downcase, match2.pref_label.downcase) } .map { |match| match_namespace = @namespaces.values.find { |ns| ns.uri == match.scheme_uri } if match_namespace [match_namespace.keyword, match.pref_label] else nil end } .compact .take(20) .sort_by { |(_, v)| v } .uniq .map { |(ns, v)| ns_value, value_ast = map_value(ns, v) [ ns_value, argument( parameter( prefix( identifier( ns)), value_ast)) ] } end