Class: Awsnap::Request

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

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(url, verb = :get, params) ⇒ Request

Returns a new instance of Request.



6
7
8
9
10
11
12
13
# File 'lib/awsnap/request.rb', line 6

def initialize(url, verb = :get, params)
  @verb   = verb
  @url = URI.parse(url)
  @access_key_id = params.delete(:access_key_id)
  @secret_access_key = params.delete(:secret_access_key)
  @expires = params.delete(:expires) || params.delete("Expires")
  @params = params.stringify_keys
end

Instance Attribute Details

#access_key_idObject (readonly)

Returns the value of attribute access_key_id.



4
5
6
# File 'lib/awsnap/request.rb', line 4

def access_key_id
  @access_key_id
end

#paramsObject (readonly)

Returns the value of attribute params.



4
5
6
# File 'lib/awsnap/request.rb', line 4

def params
  @params
end

#secret_access_keyObject (readonly)

Returns the value of attribute secret_access_key.



4
5
6
# File 'lib/awsnap/request.rb', line 4

def secret_access_key
  @secret_access_key
end

#verbObject (readonly)

Returns the value of attribute verb.



4
5
6
# File 'lib/awsnap/request.rb', line 4

def verb
  @verb
end

Instance Method Details

#canonicalized_paramsObject



15
16
17
# File 'lib/awsnap/request.rb', line 15

def canonicalized_params
  normalized_params.sort.inject([]) {|params, pair| params.push(pair.map {|i| URI.encode(i, reserved_characters)}); params}
end

#hmac_signatureObject



27
28
29
# File 'lib/awsnap/request.rb', line 27

def hmac_signature
  HMAC::SHA256.digest(secret_access_key, string_to_sign)
end

#params_stringObject



19
20
21
# File 'lib/awsnap/request.rb', line 19

def params_string
  canonicalized_params.map{|pair| "#{pair[0]}=#{pair[1]}" }.join("&")
end

#signatureObject



31
32
33
# File 'lib/awsnap/request.rb', line 31

def signature
  URI.encode(Base64.encode64(hmac_signature).strip, reserved_characters)
end

#string_to_signObject



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

def string_to_sign
  "#{verb.to_s.upcase}\n#{@url.host}\n#{@url.path}\n#{params_with_access_key}"
end

#to_sObject



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

def to_s
  "https://#{@url.host}#{@url.path}?#{params_with_access_key}&Signature=#{signature}"
end