commit 8a9f8761acc318f2bfb852480d6076dabb131825
parent 9988356aa6fd50d09ffdaf64c9d4ad27f7d48612
Author: Edward Z. Yang <ezyang@MIT.EDU>
Date: Fri, 26 Jun 2009 13:10:01 -0400
add custom-search hook, for shortcuts for custom search queries
Signed-off-by: Edward Z. Yang
Diffstat:
2 files changed, 18 insertions(+), 1 deletion(-)
diff --git a/lib/sup/hook.rb b/lib/sup/hook.rb
@@ -19,6 +19,11 @@ class HookManager
attr_writer :__locals
+ ## an annoying gotcha here is that if you try something
+ ## like var = var.foo(), var will magically get allocated
+ ## to Nil and method_missing will never get called. You
+ ## can work around this by calling self.var or simply
+ ## not assigning it to itself.
def method_missing m, *a
case @__locals[m]
when Proc
diff --git a/lib/sup/index.rb b/lib/sup/index.rb
@@ -24,6 +24,16 @@ class Index
include Singleton
+ HookManager.register "custom-search", <<EOS
+Executes before a string search is applied to the index,
+returning a new search string.
+Variables:
+ subs: The string being searched. Be careful about shadowing:
+ this variable is actually a method, so use a temporary variable
+ or explicitly call self.subs; the substitutions in index.rb
+ don't actually work.
+EOS
+
## these two accessors should ONLY be used by single-threaded programs.
## otherwise you will have a naughty ferret on your hands.
attr_reader :index
@@ -507,7 +517,9 @@ protected
def parse_user_query_string s
extraopts = {}
- subs = s.gsub(/\b(to|from):(\S+)\b/) do
+ subs = HookManager.run("custom-search", :subs => s) || s
+
+ subs = subs.gsub(/\b(to|from):(\S+)\b/) do
field, name = $1, $2
if(p = ContactManager.contact_for(name))
[field, p.email]