<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -16,10 +16,10 @@ class Uppercut
       # any captures in the pattern Regexp. (Does not apply to String 
       # patterns).
       def command(pattern,&amp;block)
-        define_method(gensym) do |msg|
-          return :no_match unless captures = matches?(pattern,msg.body)
-          block[Conversation.new(msg.from,self),*captures]
-        end
+        @@patterns ||= []
+        g = gensym
+        @@patterns &lt;&lt; [pattern,g]
+        define_method(g, &amp;block)
       end
 
       # Define a callback for specific presence events.
@@ -39,7 +39,7 @@ class Uppercut
       private
 
       def gensym
-        '__uc' + (self.instance_methods.grep(/^__uc/).size).to_s.rjust(8,'0')
+        ('__uc' + (self.instance_methods.grep(/^__uc/).size).to_s.rjust(8,'0')).intern
       end
     end
 
@@ -182,7 +182,12 @@ class Uppercut
       block = @redirects[bare_from].respond_to?(:shift) &amp;&amp; @redirects[bare_from].shift
       return block[msg.body] if block
 
-      self.methods.grep(/^__uc/).sort.detect { |m| send(m,msg) != :no_match }
+      captures = nil
+      pair = @@patterns.detect { |pattern,method| captures = matches?(pattern,msg.body) }
+      if pair
+        pattern, method = pair if pair
+        send method, Conversation.new(msg.from,self), captures
+      end
     end
 
     def dispatch_presence(type, presence)</diff>
      <filename>lib/uppercut/agent.rb</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>a57818cda8e77cd774cb5631ff641bba461fbed8</id>
    </parent>
  </parents>
  <author>
    <name>Tyler McMullen</name>
    <email>tbmcmullen@gmail.com</email>
  </author>
  <url>http://github.com/tyler/uppercut/commit/8d6160c3f05e2fb656e9add5c744f9d9fef01d0f</url>
  <id>8d6160c3f05e2fb656e9add5c744f9d9fef01d0f</id>
  <committed-date>2008-12-27T04:10:32-08:00</committed-date>
  <authored-date>2008-12-27T04:10:32-08:00</authored-date>
  <message>Less retarded dispatch system.  Instance methods can now be used from within commands and callbacks.</message>
  <tree>c08292a0ac975404937cda6bc5f2f1634368d03e</tree>
  <committer>
    <name>Tyler McMullen</name>
    <email>tbmcmullen@gmail.com</email>
  </committer>
</commit>
