lib/dusen/parser.rb in dusen-0.4.10 vs lib/dusen/parser.rb in dusen-0.4.11
- old
+ new
@@ -2,11 +2,11 @@
module Dusen
class Parser
WESTERNISH_WORD_CHARACTER = '\\w\\-\\.;@_ÄÖÜäöüß' # this is wrong on so many levels
- TEXT_QUERY = /(?:"([^"]+)"|([#{WESTERNISH_WORD_CHARACTER}]+))/
+ TEXT_QUERY = /(?:(\-)?"([^"]+)"|(\-)?([#{WESTERNISH_WORD_CHARACTER}]+))/
FIELD_QUERY = /(\w+)\:#{TEXT_QUERY}/
def self.parse(query_string)
query_string = query_string.dup # we are going to delete substrings in-place
query = Query.new
@@ -15,19 +15,23 @@
query
end
def self.extract_text_query_tokens(query_string, query)
while query_string.sub!(TEXT_QUERY, '')
- value = "#{$1}#{$2}"
- query << Token.new(value)
+ value = "#{$2}#{$4}"
+ exclude = "#{$1}#{$3}" == "-"
+ options = { :field => 'text', :value => value, :exclude => exclude }
+ query << Token.new(options)
end
end
def self.extract_field_query_tokens(query_string, query)
while query_string.sub!(FIELD_QUERY, '')
field = $1
- value = "#{$2}#{$3}"
- query << Token.new(field, value)
+ value = "#{$3}#{$5}"
+ exclude = "#{$2}#{$4}" == "-"
+ options = { :field => field, :value => value, :exclude => exclude }
+ query << Token.new(options)
end
end
end
end