Sha256: 93b0e7f6226b6bafbdbda8423642f567a8f7aa478bc0cd90ea07e774f386a012
Contents?: true
Size: 1.71 KB
Versions: 3
Compression:
Stored size: 1.71 KB
Contents
require 'em-eventsource' module Goliath module TestHelper class SSEHelper attr_reader :connection def initialize(url) @message_queue = EM::Queue.new @named_queues = {} @connection = EM::EventSource.new(url) end def listen @connection.message do |message| @message_queue.push(message) end end def listen_to(name) queue = (@named_queues[name] ||= []) @connection.on(name) do |message| queue.push(message) end end def receive pop_queue(@message_queue) end def receive_on(name) queue = @named_queues.fetch(name) do raise ArgumentError, "You have to call listen_to('#{name}') first" end pop_queue(queue) end def with_async_http klass = EM::HttpConnection if klass.instance_methods.include?(:aget) begin klass.send(:class_eval) do alias :sget :get alias :get :aget end yield if block_given? ensure klass.send(:class_eval) do alias :get :sget remove_method :sget end end else yield if block_given? end end protected def pop_queue(queue) fiber = Fiber.current queue.pop { |m| fiber.resume(m) } Fiber.yield end end def sse_client_connect(path,&blk) url = "http://localhost:#{@test_server_port}#{path}" client = SSEHelper.new(url) client.with_async_http { client.connection.start } client.listen Fiber.new { blk.call(client) }.resume if blk stop end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
goliath-1.0.7 | lib/goliath/test_helper_sse.rb |
goliath-1.0.6 | lib/goliath/test_helper_sse.rb |
goliath-1.0.5 | lib/goliath/test_helper_sse.rb |