class Stacktor::Core::Request

Public Class Methods

new(opts) click to toggle source
# File lib/stacktor/core/request.rb, line 9
def initialize(opts)
  @options = opts
end

Public Instance Methods

data() click to toggle source
# File lib/stacktor/core/request.rb, line 26
def data
  @options[:data]
end
do_stream_response?() click to toggle source
# File lib/stacktor/core/request.rb, line 35
def do_stream_response?
  !@options[:response_handler].nil?
end
execute() click to toggle source
# File lib/stacktor/core/request.rb, line 44
def execute
  data = self.data
  uri = URI(self.url)
  conn = connection_for(uri)
  req_kls = Net::HTTP.const_get(self.method.capitalize)
  headers = self.headers
  resp_fn = @options[:response_handler]

  if self.method == "GET"
    uri.query = data.to_query unless data.nil?
    req = req_kls.new(uri.request_uri, headers)
  else
    data_reg = data_stream = nil
    if data.is_a?(Hash)
      data_reg = data.to_json
    elsif data.respond_to?(:read)
      data_stream = data
      headers['Content-Length'] = data.size.to_s
    else
      data_reg = data
    end
    req = req_kls.new(uri.path, headers)
    req.body_stream = data_stream unless data_stream.nil?
    req.body = data_reg unless data_reg.nil?
  end
  if resp_fn.nil?
    @resp = conn.request(req)
  else
    @resp = conn.request(req) do |r|
      r.read_body do |bytes|
        resp_fn.call(bytes)
      end
    end
  end
  return self.to_response_hash
end
headers() click to toggle source
# File lib/stacktor/core/request.rb, line 23
def headers
  @options[:headers]
end
method() click to toggle source
# File lib/stacktor/core/request.rb, line 20
def method
  @options[:method]
end
options() click to toggle source
# File lib/stacktor/core/request.rb, line 13
def options
  @options
end
response() click to toggle source
# File lib/stacktor/core/request.rb, line 32
def response
  @resp
end
response=(resp) click to toggle source
# File lib/stacktor/core/request.rb, line 29
def response=(resp)
  @resp = resp
end
success?() click to toggle source
# File lib/stacktor/core/request.rb, line 39
def success?
  @resp && !@resp.code.match(/^20.$/).nil?
end
to_response_hash() click to toggle source
# File lib/stacktor/core/request.rb, line 81
def to_response_hash
  return nil if @resp.nil?
  success = self.success?
  ret = {success: success, code: @resp.code, request: self, response: @resp}
  if self.do_stream_response? && success
    ret[:body] = nil
  else
    ret[:body] = @resp.body
  end
  return ret
end
url() click to toggle source
# File lib/stacktor/core/request.rb, line 17
def url
  @options[:url]
end

Private Instance Methods

connection_for(uri) click to toggle source
# File lib/stacktor/core/request.rb, line 95
def connection_for(uri)
  host = uri.host
  port = uri.port
  secure = uri.scheme == 'https'

  c = Net::HTTP.new(host, port)
  c.use_ssl = secure
  c.verify_mode = OpenSSL::SSL::VERIFY_NONE
  return c
end