123456789_123456789_123456789_123456789_123456789_

Class: TestPuma::Response

Relationships & Source Files
Super Chains via Extension / Inclusion / Inheritance
Class Chain:
self, String
Instance Chain:
self, String
Inherits: String
Defined in: test/helpers/test_puma/response.rb

Overview

A subclass of String, allows processing the response returned by PumaSocket#send_http_read_response and the read_response method added to native socket instances (created with PumaSocket#new_socket and PumaSocket#send_http.

Instance Attribute Summary

Instance Method Summary

Instance Attribute Details

#times (rw)

[ GitHub ]

  
# File 'test/helpers/test_puma/response.rb', line 10

attr_accessor :times

Instance Method Details

#body

[ GitHub ]

  
# File 'test/helpers/test_puma/response.rb', line 33

def body
  self.split(RESP_SPLIT, 2).last
end

#decode_bodyString

Decodes a chunked body

Returns:

  • (String)

    the decoded body

[ GitHub ]

  
# File 'test/helpers/test_puma/response.rb', line 39

def decode_body
  decoded = String.new  # rubocop: disable Performance/UnfreezeString

  body = self.split(RESP_SPLIT, 2).last
  body = body.byteslice 0, body.bytesize - 5 # remove terminating bytes

  loop do
    size, body = body.split LINE_SPLIT, 2
    size = size.to_i 16

    decoded << body.byteslice(0, size)
    body = body.byteslice (size+2)..-1       # remove segment ending "\r\n"
    break if body.empty? || body.nil?
  end
  decoded
end

#headersArray<String>

Returns response headers as an array of lines

[ GitHub ]

  
# File 'test/helpers/test_puma/response.rb', line 14

def headers
  @headers ||= begin
    ary = self.split(RESP_SPLIT, 2).first.split LINE_SPLIT
    @status = ary.shift
    ary
  end
end

#headers_hashHash

Returns response headers as a hash. All keys and values are strings.

[ GitHub ]

  
# File 'test/helpers/test_puma/response.rb', line 24

def headers_hash
  @headers_hash ||= headers.map { |hdr| hdr.split ': ', 2 }.to_h
end

#status

[ GitHub ]

  
# File 'test/helpers/test_puma/response.rb', line 28

def status
  headers
  @status
end