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