class Alexa::Connection

Constants

HEADERS

Attributes

access_key_id[R]
params[R]
secret_access_key[R]

Public Class Methods

new(credentials = {}) click to toggle source
# File lib/alexa/connection.rb, line 15
def initialize(credentials = {})
  @secret_access_key = credentials.fetch(:secret_access_key)
  @access_key_id     = credentials.fetch(:access_key_id)
end

Public Instance Methods

get(params = {}) click to toggle source
# File lib/alexa/connection.rb, line 20
def get(params = {})
  @params = params
  handle_response(request).body.force_encoding(Encoding::UTF_8)
end

Private Instance Methods

auth_headers() click to toggle source
# File lib/alexa/connection.rb, line 54
def auth_headers
  signer.sign_request(
    http_method: "GET",
    headers: HEADERS,
    url: uri.to_s
  ).headers
end
handle_response(response) click to toggle source
# File lib/alexa/connection.rb, line 27
def handle_response(response)
  case response
  when Net::HTTPSuccess
    response
  else
    raise ResponseError.new(response.body, response)
  end
end
headers() click to toggle source
# File lib/alexa/connection.rb, line 50
def headers
  HEADERS.merge(auth_headers)
end
query() click to toggle source
# File lib/alexa/connection.rb, line 71
def query
  params.map do |key, value|
    "#{key}=#{CGI.escape(value.to_s)}"
  end.sort!.join("&")
end
request() click to toggle source
# File lib/alexa/connection.rb, line 36
def request
  req = Net::HTTP::Get.new(uri)
  headers.each do |key, value|
    req[key] = value
  end
  Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) do |http|
    http.request(req)
  end
end
signer() click to toggle source
# File lib/alexa/connection.rb, line 62
def signer
  Aws::Sigv4::Signer.new(
    service: "awis",
    region: Alexa::API_REGION,
    access_key_id: access_key_id,
    secret_access_key: secret_access_key
  )
end
uri() click to toggle source
# File lib/alexa/connection.rb, line 46
def uri
  @uri ||= URI.parse("#{Alexa::API_HOST}/api?" << query)
end