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