1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
|
require 'rspec'
require 'rspec/mocks'
require 'twitter/json_stream'
def fixture_path(path)
File.join(File.dirname(__FILE__), '..', 'fixtures', path)
end
def read_fixture(path)
File.read(fixture_path(path))
end
def connect_stream(opts={}, &blk)
EM.run {
opts.merge!(:host => Host, :port => Port)
stop_in = opts.delete(:stop_in) || 0.5
unless opts[:start_server] == false
EM.start_server Host, Port, JSONServer
end
@stream = JSONStream.connect(opts)
blk.call if blk
EM.add_timer(stop_in){ EM.stop }
}
end
def http_response(status_code, status_text, headers, body)
res = "HTTP/1.1 #{status_code} #{status_text}\r\n"
headers = {
"Content-Type"=>"application/json",
"Transfer-Encoding"=>"chunked"
}.merge(headers)
headers.each do |key,value|
res << "#{key}: #{value}\r\n"
end
res << "\r\n"
if headers["Transfer-Encoding"] == "chunked" && body.kind_of?(Array)
body.each do |data|
res << http_chunk(data)
end
else
res << body
end
res
end
def http_chunk(data)
# See http://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.6.1
"#{data.length.to_s(16)}\r\n#{data}\r\n"
end
|