lib/firehose/rack.rb
module Firehose
module Rack
autoload :Consumer, 'firehose/rack/consumer'
autoload :Publisher, 'firehose/rack/publisher'
autoload :Ping, 'firehose/rack/ping'
autoload :App, 'firehose/rack/app'
autoload :MetricsAPI, 'firehose/rack/metrics_api'
# Evented web servers recognize the -1 HTTP code as a response deferral, which
# is needed to stream responses via WebSockets or HTTP long polling.
ASYNC_RESPONSE = [-1, {}, []].freeze
# Normally we'd want to use a custom header to reduce the likelihood of some
# HTTP middleware clobbering the value. But Safari seems to ignore our CORS
# header instructions, so we are using 'pragma' because it is always allowed.
LAST_MESSAGE_SEQUENCE_HEADER = 'Pragma'
# Rack wants the header to start with HTTP, so we deal with that here.
RACK_LAST_MESSAGE_SEQUENCE_HEADER = "HTTP_#{LAST_MESSAGE_SEQUENCE_HEADER.upcase.gsub('-', '_')}"
# Disable CORS preflight caches for requests in development mode.
CORS_OPTIONS_MAX_AGE = ENV['RACK_ENV'] == 'development' ? '1' : '1728000'
module Helpers
# Calculates the content of a message body for the response so that HTTP Keep-Alive
# connections work.
def response(status, body='', headers={})
headers = {'Content-Length' => body.bytesize.to_s}.merge(headers)
[status, headers, [body]]
end
end
end
end