class Amazon::Awis
Constants
- AWIS_DOMAIN
- NAMESPACE
Public Class Methods
camel_case(str)
click to toggle source
# File lib/awis-wrapper.rb, line 70 def self.camel_case(str) return str if str !~ /_/ && str =~ /[A-Z]+.*/ str.split('_').map{|e| e.capitalize}.join # str.split('_').each_with_index.map { |v,i| v.capitalize }.join end
configure() { |options| ... }
click to toggle source
# File lib/awis-wrapper.rb, line 76 def self.configure(&proc) raise ArgumentError, "Block is required." unless block_given? yield @@options end
debug()
click to toggle source
Get debug flag.
# File lib/awis-wrapper.rb, line 61 def self.debug @@debug end
debug=(dbg)
click to toggle source
Set debug flag to true or false.
# File lib/awis-wrapper.rb, line 66 def self.debug=(dbg) @@debug = dbg end
get_batch_info(domains)
click to toggle source
# File lib/awis-wrapper.rb, line 92 def self.get_batch_info(domains) url = self.batch_urls(domains) log "Request URL: #{url}" res = Net::HTTP.get_response(url) unless res.kind_of? Net::HTTPSuccess raise Amazon::RequestError, "HTTP Response: #{res.code} #{res.message} #{res.body}" end log "Response text: #{res.body}" Response.new(res.body) end
get_info(domain)
click to toggle source
# File lib/awis-wrapper.rb, line 81 def self.get_info(domain) url = self.prepare_url(domain) log "Request URL: #{url}" res = Net::HTTP.get_response(url) unless res.kind_of? Net::HTTPSuccess raise Amazon::RequestError, "HTTP Response: #{res.code} #{res.message} #{res.body}" end log "Response text: #{res.body}" Response.new(res.body) end
options()
click to toggle source
Default service options
# File lib/awis-wrapper.rb, line 51 def self.options @@options end
options=(opts)
click to toggle source
Set default service options
# File lib/awis-wrapper.rb, line 56 def self.options=(opts) @@options = opts end
Protected Class Methods
log(s)
click to toggle source
# File lib/awis-wrapper.rb, line 186 def self.log(s) return unless self.debug if defined? RAILS_DEFAULT_LOGGER RAILS_DEFAULT_LOGGER.error(s) elsif defined? LOGGER LOGGER.error(s) else puts s end end
Private Class Methods
batch_urls(urls)
click to toggle source
# File lib/awis-wrapper.rb, line 223 def self.batch_urls(urls) raise Amazon::RequestError, "Awis batch request cannot be > 5" unless urls.length < 6 # timestamp = ( Time::now ).utc.strftime("%Y-%m-%dT%H:%M:%S.000Z") awis_domain = Amazon::Awis::AWIS_DOMAIN batch_query = { "Action" => self.options[:action], "AWSAccessKeyId" => self.options[:aws_access_key_id], "Timestamp" => Time.now.utc.iso8601, "#{self.options[:action]}.Shared.ResponseGroup" => self.options[:responsegroup], "SignatureVersion" => 2, "SignatureMethod" => "HmacSHA1" } urls.each_with_index do |url,i| batch_query["#{self.options[:action]}.#{i+1}.Url"] = url end signature = Base64.encode64( OpenSSL::HMAC.digest( OpenSSL::Digest.new( "sha1" ), self.options[:aws_secret_key], "GET\n#{awis_domain}\n/\n" + escape_query(batch_query))).strip query_str = batch_query.merge({'Signature' => signature}) url = "https://#{awis_domain}/?#{escape_query(query_str)}" URI.parse url end
escape_query(query)
click to toggle source
Converts a hash into a query string (e.g. {a => 1, b => 2} becomes “a=1&b=2”)
# File lib/awis-wrapper.rb, line 200 def self.escape_query(query) query.sort.map{|k,v| k + "=" + URI.escape(v.to_s, /[^A-Za-z0-9\-_.~]/)}.join('&') end
prepare_url(domain)
click to toggle source
# File lib/awis-wrapper.rb, line 204 def self.prepare_url(domain) query = { 'AWSAccessKeyId' => self.options[:aws_access_key_id], 'Action' => self.options[:action], 'ResponseGroup' => self.options[:responsegroup], 'SignatureMethod' => 'HmacSHA1', 'SignatureVersion' => 2, 'Timestamp' => Time.now.utc.iso8601, 'Url' => domain } awis_domain = Amazon::Awis::AWIS_DOMAIN URI.parse("https://#{awis_domain}/?" + escape_query(query.merge({ 'Signature' => Base64.encode64( OpenSSL::HMAC.digest( 'sha1', self.options[:aws_secret_key], "GET\n#{awis_domain}\n/\n" + escape_query(query).strip)).chomp }))) end