sup

A curses threads-with-tags style email client

sup.git

git clone https://supmua.dev/git/sup/
commit 6c964c2a261871dcf9978233901f6c48be7ed75f
parent bc309d8cc770f2a94ab3f14f0554e8f0a163aebd
Author: Rich Lane <rlane@club.cc.cmu.edu>
Date:   Sat,  5 Jun 2010 21:17:21 -0700

pass index object to server

Diffstat:
M bin/sup-server | 3 ++-
M lib/sup/server.rb | 25 +++++++++++++++----------
M test/test_server.rb | 5 ++++-
3 files changed, 21 insertions(+), 12 deletions(-)
diff --git a/bin/sup-server b/bin/sup-server
@@ -34,7 +34,8 @@ begin
   Index.load
 
   EM.run do
-    EM.start_server global_opts[:host], global_opts[:port], Redwood::Server
+    EM.start_server global_opts[:host], global_opts[:port],
+                    Redwood::Server, Index.instance
     EM.next_tick { puts "ready" }
   end
 
diff --git a/lib/sup/server.rb b/lib/sup/server.rb
@@ -3,6 +3,11 @@ require 'sup/protocol'
 module Redwood
 
 class Server < EM::P::RedwoodServer
+  def initialize index
+    super
+    @index = index
+  end
+
   def receive_message type, tag, params
     if respond_to? :"request_#{type}"
       send :"request_#{type}", tag, params
@@ -12,7 +17,7 @@ class Server < EM::P::RedwoodServer
   end
 
   def request_query tag, a
-    q = Redwood::Index.parse_query a['query']
+    q = @index.parse_query a['query']
     query q, a['offset'], a['limit'], a['raw'] do |r|
       send_message 'message', tag, r
     end
@@ -20,13 +25,13 @@ class Server < EM::P::RedwoodServer
   end
 
   def request_count tag, a
-    q = Redwood::Index.parse_query a['query']
+    q = @index.parse_query a['query']
     c = count q
     send_message 'count', tag, 'count' => c
   end
 
   def request_label tag, a
-    q = Redwood::Index.parse_query a['query']
+    q = @index.parse_query a['query']
     label q, a['add'], a['remove']
     send_message 'done', tag
   end
@@ -66,7 +71,7 @@ private
 
   def query query, offset, limit, raw
     c = 0
-    Index.each_message query do |m|
+    @index.each_message query do |m|
       next if c < offset
       break if c >= offset + limit if limit
       yield result_from_message(m, raw)
@@ -76,14 +81,14 @@ private
   end
 
   def count query
-    Index.num_results_for query
+    @index.num_results_for query
   end
 
   def label query, remove_labels, add_labels
-    Index.each_message query do |m|
+    @index.each_message query do |m|
       remove_labels.each { |l| m.remove_label l }
       add_labels.each { |l| m.add_label l }
-      Index.update_message_state m
+      @index.update_message_state m
     end
     nil
   end
@@ -98,13 +103,13 @@ private
       m2 = m
     end
     m2.labels = Set.new(labels.map(&:to_sym))
-    Index.update_message_state m2
+    @index.update_message_state m2
     nil
   end
 
   def thread msg_id, raw
-    msg = Index.build_message msg_id
-    Index.each_message_in_thread_for msg do |id, builder|
+    msg = @index.build_message msg_id
+    @index.each_message_in_thread_for msg do |id, builder|
       m = builder.call
       yield result_from_message(m, raw)
     end
diff --git a/test/test_server.rb b/test/test_server.rb
@@ -64,7 +64,9 @@ class TestServer < Test::Unit::TestCase
     EM.spawn_reactor_thread
     @path = Dir.mktmpdir
     socket_path = File.join(@path, 'socket')
-    @server = EM.start_server socket_path, Redwood::Server
+    Redwood::Index.init File.join(@path, 'index')
+    @server = EM.start_server socket_path,
+              Redwood::Server, Redwood::Index.instance
     @client = EM.connect socket_path, QueueingClient
     @client.wait_until_ready
   end
@@ -72,6 +74,7 @@ class TestServer < Test::Unit::TestCase
   def teardown
     FileUtils.rm_r @path if passed?
     puts "not cleaning up #{@path}" unless passed?
+    Redwood::Index.deinstantiate!
     EM.kill_reactor_thread
   end