Module: CoverMyMeds::ApiRequest

Included in:
Client
Defined in:
lib/cover_my_meds/api_request.rb

Constant Summary collapse

DEFAULT_TIMEOUT =

seconds, matches Net::Http’s default which rest-client used

60

Instance Method Summary collapse

Instance Method Details

#parse_response(response) ⇒ Object



46
47
48
49
50
51
# File 'lib/cover_my_meds/api_request.rb', line 46

def parse_response response
  return nil if response.body.empty?
  JSON.parse(response.body)
rescue JSON::ParserError
  response.body
end

#request(http_method, host, path, params = {}, auth_type = :basic, &block) ⇒ Object

Raises:



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/cover_my_meds/api_request.rb', line 17

def request(http_method, host, path, params={}, auth_type = :basic, &block)
  params  = params.symbolize_keys
  headers = params.delete(:headers) || {}

  conn = Faraday.new host do |faraday|
    faraday.request  :multipart
    faraday.request  :url_encoded
    faraday.response :follow_redirects
    faraday.adapter  :typhoeus
  end
  case auth_type
  when :basic
    conn.basic_auth @username, @password
  when :bearer
    conn.authorization :Bearer, "#{@username}+#{params.delete(:token_id)}"
  end

  response = conn.send http_method do |request|
    request.url path
    request.options.timeout = DEFAULT_TIMEOUT
    request.params = params
    request.headers.merge! headers
    request.body = block_given? ? yield : {}
  end
  raise Error::HTTPError.new(response.status, response.body, http_method, url(host, path, params)) unless response.success?

  parse_response response
end

#url(host, path, params) ⇒ Object



53
54
55
56
57
# File 'lib/cover_my_meds/api_request.rb', line 53

def url(host, path, params)
  "#{host}#{path}".tap do |url|
    url << "?#{params.to_query}" if params.present?
  end
end