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