class AkamaiRSpec::Request

Attributes

debug_headers[RW]
network[RW]
prod_domain[RW]
stg_domain[RW]

Public Class Methods

add_debug_header(key, value) click to toggle source
# File lib/akamai_rspec/request.rb, line 26
def self.add_debug_header(key, value)
  self.debug_headers["#{key}"]  = value
end
get(url, headers={}) click to toggle source
# File lib/akamai_rspec/request.rb, line 30
def self.get(url, headers={})
  new.get(url, headers.merge(debug_headers))
end
get_cache_miss(url) click to toggle source
# File lib/akamai_rspec/request.rb, line 38
def self.get_cache_miss(url)
  url += url.include?('?') ? '&' : '?'
  url += SecureRandom.hex
  get(url)
end
get_decode(url) click to toggle source
# File lib/akamai_rspec/request.rb, line 44
def self.get_decode(url)
  response = new.get(url, debug_headers.merge({'Accept-Encoding' => 'gzip'}))
  RestClient::Request.decode(response.headers[:content_encoding], response.body)
  response
end
get_without_debug_headers(url, headers={}) click to toggle source
# File lib/akamai_rspec/request.rb, line 34
def self.get_without_debug_headers(url, headers={})
  new.get(url, headers)
end
new() click to toggle source
# File lib/akamai_rspec/request.rb, line 50
def initialize
  @domain = case self.class.network.downcase
  when 'staging'
    self.class.stg_domain or raise ArgumentError.new(
      "You must set the staging domain: AkamaiRSpec::Request.stg_domain = 'www.example.com.edgesuite.net'"
    )
  else
    self.class.prod_domain or raise ArgumentError.new(
      "You must set the prod domain: AkamaiRSpec::Request.prod_domain = 'www.example.com.edgesuite.net'"
    )
  end

  @rest_client = RestClient::Request.new(
    method: :get,
    url: 'fakeurl.com',
    verify_ssl: false
  )
end

Public Instance Methods

build_request(uri, headers) click to toggle source
# File lib/akamai_rspec/request.rb, line 99
def build_request(uri, headers)
  req = Net::HTTP::Get.new(uri)
  headers.each { |key, value| req[key] = value }
  req
end
get(url, headers = {}) click to toggle source
# File lib/akamai_rspec/request.rb, line 71
def get(url, headers = {})
  # DO NOT USE url.is_a? here - some versions of
  # the JSON gem monkey patch String which causes it to match.

  if url.class.ancestors.include? RestClient::Response
    return AkamaiRSpec::Response.new(url)
  end

  if url.class.ancestors.include? AkamaiRSpec::Response
    return url
  end

  uri = parse_url_with_auth(url)
  req = build_request(uri, stringify_headers(headers))

  req['Host'] = uri.hostname
  uri.hostname = @domain

  net = Net::HTTP.new(uri.hostname, uri.port)
  if uri.scheme == 'https'
    net.use_ssl = true
    net.verify_mode = OpenSSL::SSL::VERIFY_NONE
  end
  response = net.request(req, nil)

  AkamaiRSpec::Response.new(response)
end