class Hurley::Response

Constants

STATUS_FORCE_GET
STATUS_REDIRECTION
STATUS_TYPES

Attributes

body[RW]
header[R]
request[R]
status_code[RW]
via[W]

Public Class Methods

new(request, status_code = nil, header = nil) { |self| ... } click to toggle source
# File lib/hurley/client.rb, line 243
def initialize(request, status_code = nil, header = nil)
  @request = request
  @status_code = status_code
  @header = header || Header.new
  @body = nil
  @receiver = nil
  @timing = nil
  @started_at = Time.now.to_f
  if block_given?
    yield self
    complete!
  end
end

Public Instance Methods

automatically_redirect?(previous_requests = nil) click to toggle source
# File lib/hurley/client.rb, line 296
def automatically_redirect?(previous_requests = nil)
  return false unless redirection?
  limit = request.options.redirection_limit.to_i
  limit > 0 && Array(previous_requests).size < limit
end
client_error?() click to toggle source
# File lib/hurley/client.rb, line 288
def client_error?
  status_code > 399 && status_code < 500
end
complete!() click to toggle source
# File lib/hurley/client.rb, line 257
def complete!
  @ended_at = Time.now.to_f
  if @receiver.respond_to?(:join)
    @body = @receiver.join
  end
end
inspect() click to toggle source
# File lib/hurley/client.rb, line 321
def inspect
  "#<%s %s %s == %d%s %dms>" % [
    self.class.name,
    @request.verb.to_s.upcase,
    @request.url.to_s,
    @status_code.to_i,
    @body ? " (#{@body.bytesize} bytes)" : nil,
    ms,
  ]
end
location() click to toggle source
# File lib/hurley/client.rb, line 268
def location
  @location ||= begin
    return unless loc = @header[:location]
    verb = STATUS_FORCE_GET.include?(status_code) ? :get : request.verb
    Request.new(verb, request.url.join(Url.parse(loc)), request.header, request.body, request.options, request.ssl_options)
  end
end
ms() click to toggle source
# File lib/hurley/client.rb, line 317
def ms
  @timing ||= ((@ended_at - @started_at) * 1000).to_i
end
receive_body(chunk) click to toggle source
# File lib/hurley/client.rb, line 302
def receive_body(chunk)
  return if chunk.nil?

  if @receiver.nil?
    statuses, receiver = request.send(:body_receiver)
    @receiver = if statuses && !statuses.include?(@status_code)
      BodyReceiver.new
    else
      receiver
    end
  end

  @receiver.call(self, chunk)
end
redirection?() click to toggle source
# File lib/hurley/client.rb, line 280
def redirection?
  STATUS_REDIRECTION.include?(status_code)
end
server_error?() click to toggle source
# File lib/hurley/client.rb, line 292
def server_error?
  status_code > 499 && status_code < 600
end
status_type() click to toggle source
# File lib/hurley/client.rb, line 276
def status_type
  @status_type ||= STATUS_TYPES.detect { |t| send("#{t}?") } || :other
end
success?() click to toggle source
# File lib/hurley/client.rb, line 284
def success?
  status_code > 199 && status_code < 300
end
via() click to toggle source
# File lib/hurley/client.rb, line 264
def via
  @via ||= []
end