class Minidusen::Parser

Constants

FIELD_QUERY
TEXT_QUERY

Public Class Methods

parse(object) click to toggle source
# File lib/minidusen/parser.rb, line 11
def parse(object)
  case object
  when Query
    object
  when String
    parse_string(object)
  when Array
    parse_array(object)
  else
    raise CannotParse, "Cannot parse #{object.inspect}"
  end
end

Private Class Methods

extract_field_query_tokens(query_string, query) click to toggle source
# File lib/minidusen/parser.rb, line 52
def extract_field_query_tokens(query_string, query)
  while query_string.sub!(FIELD_QUERY, '')
    field = $2
    value = "#{$4}#{$6}"
    exclude = "#{$1}" == "-"
    options = { :field => field, :value => value, :exclude => exclude }
    query << Token.new(options)
  end
end
extract_text_query_tokens(query_string, query) click to toggle source
# File lib/minidusen/parser.rb, line 43
def extract_text_query_tokens(query_string, query)
  while query_string.sub!(TEXT_QUERY, '')
    value = "#{$2}#{$4}"
    exclude = "#{$1}#{$3}" == "-"
    options = { :field => 'text', :value => value, :exclude => exclude }
    query << Token.new(options)
  end
end
parse_array(array) click to toggle source
# File lib/minidusen/parser.rb, line 35
def parse_array(array)
  tokens = array.map { |string|
    string.is_a?(String) or raise CannotParse, "Cannot parse an array of #{string.class}"
    Token.new(:field => 'text', :value => string)
  }
  Query.new(tokens)
end
parse_string(string) click to toggle source
# File lib/minidusen/parser.rb, line 26
def parse_string(string)
  string = string.dup # we are going to delete substrings in-place
  string = string.encode('UTF-8', invalid: :replace, undef: :replace, replace: '')
  query = Query.new
  extract_field_query_tokens(string, query)
  extract_text_query_tokens(string, query)
  query
end