class Iterable::Request
@!visibility private
Constants
- DEFAULT_HEADERS
- DEFAULT_OPTIONS
Public Class Methods
new(config, path, params = {})
click to toggle source
# File lib/iterable/request.rb, line 18 def initialize(config, path, params = {}) @config = config @uri = build_uri(path, params) @net = net_http setup_http(@net) end
Public Instance Methods
delete(body = {}, headers = {})
click to toggle source
# File lib/iterable/request.rb, line 41 def delete(body = {}, headers = {}) execute :delete, body, headers end
get(headers = {})
click to toggle source
# File lib/iterable/request.rb, line 25 def get(headers = {}) execute :get, {}, headers end
patch(body = {}, headers = {})
click to toggle source
# File lib/iterable/request.rb, line 37 def patch(body = {}, headers = {}) execute :patch, body, headers end
post(body = {}, headers = {})
click to toggle source
# File lib/iterable/request.rb, line 29 def post(body = {}, headers = {}) execute :post, body, headers end
put(body = {}, headers = {})
click to toggle source
# File lib/iterable/request.rb, line 33 def put(body = {}, headers = {}) execute :put, body, headers end
Private Instance Methods
build_uri(path, params = {})
click to toggle source
# File lib/iterable/request.rb, line 67 def build_uri(path, params = {}) uri = @config.uri uri.path += path params['api_key'] = @config.token uri.query = URI.encode_www_form(params) uri end
connection(verb, body = {}, headers = {})
click to toggle source
# File lib/iterable/request.rb, line 53 def connection(verb, body = {}, headers = {}) conn_headers = DEFAULT_HEADERS.merge(headers) req = Net::HTTP.const_get(verb.to_s.capitalize, false).new(@uri, conn_headers) req.body = JSON.dump(body) req end
execute(verb, body = {}, headers = {})
click to toggle source
# File lib/iterable/request.rb, line 47 def execute(verb, body = {}, headers = {}) http = connection(verb, body, headers) setup_http(http) transmit http end
handle_response(response)
click to toggle source
# File lib/iterable/request.rb, line 87 def handle_response(response) redirected = response.is_a?(Net::HTTPRedirection) || response.code == '303' if redirected && response['location'] Response.new Net::HTTP.get_response(uri_for_redirect(response)) else Response.new response end end
net_http()
click to toggle source
# File lib/iterable/request.rb, line 75 def net_http Net::HTTP.new(@uri.hostname, @uri.port, nil, nil, nil, nil) end
setup_http(http)
click to toggle source
# File lib/iterable/request.rb, line 60 def setup_http(http) DEFAULT_OPTIONS.dup.each do |option, value| setter = "#{option.to_sym}=" http.send(setter, value) if http.respond_to?(setter) end end
transmit(req)
click to toggle source
# File lib/iterable/request.rb, line 79 def transmit(req) response = nil @net.start do |http| response = http.request(req, nil, &:read_body) end handle_response response end
uri_for_redirect(response)
click to toggle source
# File lib/iterable/request.rb, line 96 def uri_for_redirect(response) uri = @config.uri redirect_uri = URI(response['location']) uri.path = redirect_uri.path uri.query = redirect_uri.query uri end