Class: Stacktor::Core::Request

Inherits:
Object
  • Object
show all
Defined in:
lib/stacktor/core/request.rb

Instance Method Summary collapse

Constructor Details

#initialize(opts) ⇒ Request

Returns a new instance of Request.



9
10
11
# File 'lib/stacktor/core/request.rb', line 9

def initialize(opts)
  @options = opts
end

Instance Method Details

#dataObject



26
27
28
# File 'lib/stacktor/core/request.rb', line 26

def data
  @options[:data]
end

#do_stream_response?Boolean

Returns:



35
36
37
# File 'lib/stacktor/core/request.rb', line 35

def do_stream_response?
  !@options[:response_handler].nil?
end

#executeObject



44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
# 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

#headersObject



23
24
25
# File 'lib/stacktor/core/request.rb', line 23

def headers
  @options[:headers]
end

#methodObject



20
21
22
# File 'lib/stacktor/core/request.rb', line 20

def method
  @options[:method]
end

#optionsObject



13
14
15
# File 'lib/stacktor/core/request.rb', line 13

def options
  @options
end

#responseObject



32
33
34
# File 'lib/stacktor/core/request.rb', line 32

def response
  @resp
end

#response=(resp) ⇒ Object



29
30
31
# File 'lib/stacktor/core/request.rb', line 29

def response=(resp)
  @resp = resp
end

#success?Boolean

Returns:



39
40
41
# File 'lib/stacktor/core/request.rb', line 39

def success?
  @resp && !@resp.code.match(/^20.$/).nil?
end

#to_response_hashObject



81
82
83
84
85
86
87
88
89
90
91
# 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

#urlObject



17
18
19
# File 'lib/stacktor/core/request.rb', line 17

def url
  @options[:url]
end