>From a5c72844e8195df7a8eabd5ea592507599de72cb Mon Sep 17 00:00:00 2001 From: Edward Z. Yang <edwardzy...@thewritingpot.com> Date: Wed, 10 Jun 2009 01:42:50 -0400 Subject: [PATCH] Add before-search hook, for shortcuts for custom search queries. Signed-off-by: Edward Z. Yang <edwardzy...@thewritingpot.com>
--- lib/sup/hook.rb | 4 ++++ lib/sup/index.rb | 12 +++++++++++- 2 files changed, 15 insertions(+), 1 deletions(-) diff --git a/lib/sup/hook.rb b/lib/sup/hook.rb index 0a0a2f6..d446aa3 100644 --- a/lib/sup/hook.rb +++ b/lib/sup/hook.rb @@ -19,6 +19,10 @@ 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. Stick + ## to mutation, kiddos! def method_missing m, *a case @__locals[m] when Proc diff --git a/lib/sup/index.rb b/lib/sup/index.rb index e403570..19556f0 100644 --- a/lib/sup/index.rb +++ b/lib/sup/index.rb @@ -25,6 +25,13 @@ class Index include Singleton + HookManager.register "before-search", <<EOS +Executes before a string search is applied to the index. +Variables: + subs: The string being searched, use gsub! to change the + search (you must use mutation!) +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 @@ -508,7 +515,10 @@ protected def parse_user_query_string s extraopts = {} - subs = s.gsub(/\b(to|from):(\S+)\b/) do + subs = String.new s + HookManager.run("before-search", :subs => subs) + + subs = subs.gsub(/\b(to|from):(\S+)\b/) do field, name = $1, $2 if(p = ContactManager.contact_for(name)) [field, p.email] -- 1.6.0.4 _______________________________________________ sup-talk mailing list sup-talk@rubyforge.org http://rubyforge.org/mailman/listinfo/sup-talk