Class: Awis::Connection

Inherits:
Object
  • Object
show all
Defined in:
lib/awis/connection.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeConnection

Returns a new instance of Connection.

Raises:



13
14
15
16
17
18
# File 'lib/awis/connection.rb', line 13

def initialize
  raise CertificateError.new("Amazon access certificate is missing!") if Awis.config.access_key_id.nil? || Awis.config.secret_access_key.nil?

  @debug = Awis.config.debug || false
  @protocol = Awis.config.protocol || 'https'
end

Instance Attribute Details

#debugObject

Returns the value of attribute debug.



10
11
12
# File 'lib/awis/connection.rb', line 10

def debug
  @debug
end

#paramsObject



20
21
22
# File 'lib/awis/connection.rb', line 20

def params
  @params ||= {}
end

#protocolObject

Returns the value of attribute protocol.



10
11
12
# File 'lib/awis/connection.rb', line 10

def protocol
  @protocol
end

Instance Method Details

#default_paramsObject



73
74
75
76
77
78
79
80
81
# File 'lib/awis/connection.rb', line 73

def default_params
  {
    "AWSAccessKeyId"   => Awis.config.access_key_id,
    "SignatureMethod"  => "HmacSHA256",
    "SignatureVersion" => Awis::API_SIGNATURE_VERSION,
    "Timestamp"        => timestamp,
    "Version"          => Awis::API_VERSION
  }
end

#get(params = {}) ⇒ Object



28
29
30
31
32
# File 'lib/awis/connection.rb', line 28

def get(params = {})
  setup_params(params)

  handle_response(request).body.force_encoding(Encoding::UTF_8)
end

#handle_response(response) ⇒ Object



34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/awis/connection.rb', line 34

def handle_response(response)
  case response.status.to_i
  when 200...300
    response
  when 300...600
    if response.body.nil?
      raise ResponseError.new(nil, response)
    else
      xml = MultiXml.parse(response.body)
      message = xml["Response"]["Errors"]["Error"]["Message"]
      raise ResponseError.new(message, response)
    end
  else
    raise ResponseError.new("Unknown code: #{respnse.code}", response)
  end
end

#query_paramsObject



87
88
89
# File 'lib/awis/connection.rb', line 87

def query_params
  default_params.merge(params).map { |key, value| "#{key}=#{CGI::escape(value.to_s)}" }.sort.join("&")
end

#requestObject



51
52
53
54
55
# File 'lib/awis/connection.rb', line 51

def request
  showing_request_uri

  Faraday.get(uri)
end

#setup_params(params) ⇒ Object



24
25
26
# File 'lib/awis/connection.rb', line 24

def setup_params(params)
  self.params = params
end

#showing_request_uriObject



57
58
59
# File 'lib/awis/connection.rb', line 57

def showing_request_uri
  puts "[DEBUG] -> #{uri}" if debug
end

#signObject



83
84
85
# File 'lib/awis/connection.rb', line 83

def sign
  "GET\n" + Awis::API_HOST + "\n/\n" + query_params
end

#signatureObject



65
66
67
# File 'lib/awis/connection.rb', line 65

def signature
  Base64.encode64(OpenSSL::HMAC.digest(OpenSSL::Digest.new("sha256"), Awis.config.secret_access_key, sign)).strip
end

#timestampObject



61
62
63
# File 'lib/awis/connection.rb', line 61

def timestamp
  @timestamp ||= Time::now.utc.strftime("%Y-%m-%dT%H:%M:%S.000Z")
end

#uriObject



69
70
71
# File 'lib/awis/connection.rb', line 69

def uri
  URI.parse("#{protocol}://#{Awis::API_HOST}/?" + query_params + "&Signature=" + CGI::escape(signature))
end