Module: Expedia::HTTPService

Defined in:
lib/expedia/http_service.rb,
lib/expedia/http_service/response.rb

Defined Under Namespace

Classes: Response

Constant Summary collapse

API_SERVER =
'api.eancdn.com'
RESERVATION_SERVER =
'book.api.ean.com'
DEVELOPMENT_SERVER =
'dev.api.ean.com'

Class Method Summary collapse

Class Method Details

.add_timeouts(conn, options) ⇒ Object

Adding open and read timeouts

open timeout - the amount of time you are willing to wait for ‘opening a connection’ (read) timeout - the amount of time you are willing to wait for some data to be received from the connected party.

Parameters:

  • conn
    • Faraday connection object

Returns:

  • the connection obj with the timeouts set if they have been initialized



38
39
40
41
42
43
44
# File 'lib/expedia/http_service.rb', line 38

def add_timeouts(conn, options)
  if !options[:ignore_timeout]
    conn.options.timeout = Expedia.timeout.to_i if Expedia.timeout.present?
    conn.options.open_timeout = Expedia.open_timeout.to_i if Expedia.open_timeout.present?
  end
  conn
end

.common_parametersHash

Common Parameters required for every Call to Expedia Server.

Returns:

  • (Hash)

    of all common parameters.



93
94
95
96
# File 'lib/expedia/http_service.rb', line 93

def common_parameters
  { :cid => Expedia.cid, :sig => signature, :apiKey => Expedia.api_key, :minorRev => Expedia.minor_rev,
    :_type => 'json', :locale => Expedia.locale, :currencyCode => Expedia.currency_code }
end

.make_request(path, args, verb, options = {}) ⇒ Expedia::HTTPService::Response, Expedia::APIError

Note:

You’ll rarely need to call this method directly.

Makes a request directly to Expedia.

Parameters:

  • path

    the server path for this request

  • verb

    the HTTP method to use.

  • options (defaults to: {})

    same options passed to server method.

Returns:

Raises:

  • an appropriate connection error if unable to make the request to Expedia

See Also:

  • API#api


60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
# File 'lib/expedia/http_service.rb', line 60

def make_request(path, args, verb, options = {})
  args = common_parameters.merge(args)
  # figure out our options for this request
  request_options = {:params => (verb == :get ? args : {})}
  # set up our Faraday connection
  conn = Faraday.new(server(options), request_options)
  conn = add_timeouts(conn, options)
  response = conn.send(verb, path, (verb == :post ? args : {}))

  # Log URL and params information
  Expedia::Utils.debug "\nExpedia [#{verb.upcase}] - #{server(options) + path} params: #{args.inspect} : #{response.status}\n"
  response = Expedia::HTTPService::Response.new(response.status.to_i, response.body, response.headers)

  # If there is an exception make a [Expedia::APIError] object to return
  if response.exception?
    Expedia::APIError.new(response.status, response.body)
  else
    response
  end
end

.server(options = {}) ⇒ Object

The address of the appropriate Expedia server.

Parameters:

  • options (defaults to: {})

    various flags to indicate which server to use.

Options Hash (options):

  • :reservation_api (Object)

    use the RESERVATION API instead of the REGULAR API

  • :use_ssl (Object)

    force https, even if not needed

Returns:

  • a complete server address with protocol



21
22
23
24
25
26
27
28
# File 'lib/expedia/http_service.rb', line 21

def server(options = {})
  if Expedia.cid.to_i == 55505 && !options[:reservation_api]
    server = DEVELOPMENT_SERVER
  else
    server = options[:reservation_api] ? RESERVATION_SERVER : API_SERVER
  end
  "#{options[:use_ssl] ? "https" : "http"}://#{server}"
end

.signatureObject

Creates a Signature for Expedia using MD5 Checksum Auth. Shared and Api keys are required for Signature along with the current utc time.



83
84
85
86
87
88
89
# File 'lib/expedia/http_service.rb', line 83

def signature
  if Expedia.cid && Expedia.api_key && Expedia.shared_secret
    Digest::MD5.hexdigest(Expedia.api_key + Expedia.shared_secret + Time.now.utc.to_i.to_s)
  else
    raise Expedia::AuthCredentialsError, "cid, api_key and shared_secret are required for Expedia Authentication."
  end
end