lib/sup/index.rb in sup-0.13.0 vs lib/sup/index.rb in sup-0.13.1

- old
+ new

@@ -2,19 +2,17 @@ require 'xapian' require 'set' require 'fileutils' require 'monitor' +require 'chronic' -begin - require 'chronic' - $have_chronic = true -rescue LoadError => e - debug "No 'chronic' gem detected. Install it for date/time query restrictions." - $have_chronic = false -end +require "sup/interactive_lock" +require "sup/hook" +require "sup/logger/singleton" + if ([Xapian.major_version, Xapian.minor_version, Xapian.revision] <=> [1,2,1]) < 0 fail "Xapian version 1.2.1 or higher required" end module Redwood @@ -259,10 +257,15 @@ each_id query do |id| yield build_message(id) end end + # Search messages. Returns an Enumerator. + def find_messages query_expr + enum_for :each_message, parse_query(query_expr) + end + # wrap all future changes inside a transaction so they're done atomically def begin_transaction synchronize { @xapian.begin_transaction } end @@ -386,30 +389,28 @@ debug "filetype: translated #{field}:#{name} to attachment_extension:#{name.downcase}" "attachment_extension:#{name.downcase}" end end - if $have_chronic - lastdate = 2<<32 - 1 - firstdate = 0 - subs = subs.gsub(/\b(before|on|in|during|after):(\((.+?)\)\B|(\S+)\b)/) do - field, datestr = $1, ($3 || $4) - realdate = Chronic.parse datestr, :guess => false, :context => :past - if realdate - case field - when "after" - debug "chronic: translated #{field}:#{datestr} to #{realdate.end}" - "date:#{realdate.end.to_i}..#{lastdate}" - when "before" - debug "chronic: translated #{field}:#{datestr} to #{realdate.begin}" - "date:#{firstdate}..#{realdate.end.to_i}" - else - debug "chronic: translated #{field}:#{datestr} to #{realdate}" - "date:#{realdate.begin.to_i}..#{realdate.end.to_i}" - end + lastdate = 2<<32 - 1 + firstdate = 0 + subs = subs.gsub(/\b(before|on|in|during|after):(\((.+?)\)\B|(\S+)\b)/) do + field, datestr = $1, ($3 || $4) + realdate = Chronic.parse datestr, :guess => false, :context => :past + if realdate + case field + when "after" + debug "chronic: translated #{field}:#{datestr} to #{realdate.end}" + "date:#{realdate.end.to_i}..#{lastdate}" + when "before" + debug "chronic: translated #{field}:#{datestr} to #{realdate.begin}" + "date:#{firstdate}..#{realdate.end.to_i}" else - raise ParseError, "can't understand date #{datestr.inspect}" + debug "chronic: translated #{field}:#{datestr} to #{realdate}" + "date:#{realdate.begin.to_i}..#{realdate.end.to_i}" end + else + raise ParseError, "can't understand date #{datestr.inspect}" end end ## limit:42 restrict the search to 42 results subs = subs.gsub(/\blimit:(\S+)\b/) do