class ThinkingSphinx::Wildcard

Constants

DEFAULT_TOKEN

Attributes

pattern[R]
query[R]

Public Class Methods

call(query, pattern = DEFAULT_TOKEN) click to toggle source
# File lib/thinking_sphinx/wildcard.rb, line 4
def self.call(query, pattern = DEFAULT_TOKEN)
  new(query, pattern).call
end
new(query, pattern = DEFAULT_TOKEN) click to toggle source
# File lib/thinking_sphinx/wildcard.rb, line 8
def initialize(query, pattern = DEFAULT_TOKEN)
  @query   = query || ''
  @pattern = pattern.is_a?(Regexp) ? pattern : DEFAULT_TOKEN
end

Public Instance Methods

call() click to toggle source
# File lib/thinking_sphinx/wildcard.rb, line 13
def call
  query.gsub(/("#{pattern}(.*?#{pattern})?"|(?![!-])#{pattern})/u) do
    pre, proper, post = $`, $&, $'
    # E.g. "@foo", "/2", "~3", but not as part of a token pattern
    is_operator = pre == '@' ||
                  pre.match(%r{([^\]+|\A)[~/]\Z}) ||
                  pre.match(%r{(\W|^)@\([^\)]*$})
    # E.g. "foo bar", with quotes
    is_quote    = proper[/^".*"$/]
    has_star    = post[/\*$/] || pre[/^\*/]
    if is_operator || is_quote || has_star
      proper
    else
      "*#{proper}*"
    end
  end
end