Sha256: a9f05320e92feb1a048fbb33dec9a27385c0670359ece2e66cc25d6bc0f547c0

Contents?: true

Size: 1.21 KB

Versions: 6

Compression:

Stored size: 1.21 KB

Contents

require 'rubygems'
require 'rspec'
require 'pp'
require 'stringio'

require 'rack/websocket'

Rspec.configure do |c|
  c.mock_with :rspec
end

def format_request(r)
  data = {}
  data['REQUEST_METHOD'] = r[:method] if r[:method]
  data['PATH_INFO'] = r[:path] if r[:path]
  data['SERVER_PORT'] = r[:port] if r[:port] && r[:port] != 80
  r[:headers].each do |key, value|
    data['HTTP_' + key.upcase.gsub('-','_')] = value
  end
  data['rack.input'] = StringIO.new(r[:body]) if r[:body]
  # data = "#{r[:method]} #{r[:path]} HTTP/1.1\r\n"
  # header_lines = r[:headers].map { |k,v| "#{k}: #{v}" }
  # data << [header_lines, '', r[:body]].join("\r\n")
  data
end

def format_response(r)
  data = "HTTP/1.1 101 WebSocket Protocol Handshake\r\n"
  header_lines = r[:headers].map { |k,v| "#{k}: #{v}" }
  data << [header_lines, '', r[:body]].join("\r\n")
  data
end

def handler(request, secure = false)
  connection = Object.new
  secure_hash = secure ? {'rack.url_scheme' => 'https'} : {}
  Rack::WebSocket::HandlerFactory.build(connection, format_request(request).merge(secure_hash))
end

RSpec::Matchers.define :send_handshake do |response|
  match do |actual|
    actual.handshake.lines.sort == format_response(response).lines.sort
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
websocket-rack-0.1.4 spec/helper.rb
websocket-rack-0.1.3.1 spec/helper.rb
websocket-rack-0.1.3 spec/helper.rb
websocket-rack-0.1.2 spec/helper.rb
websocket-rack-0.1.1 spec/helper.rb
websocket-rack-0.1.0 spec/helper.rb