lib/expedia/http_service.rb in expedia-0.0.3 vs lib/expedia/http_service.rb in expedia-0.0.4
- old
+ new
@@ -25,10 +25,26 @@
server = options[:reservation_api] ? RESERVATION_SERVER : API_SERVER
end
"#{options[:use_ssl] ? "https" : "http"}://#{server}"
end
+
+ # 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.
+ # @param conn - Faraday connection object
+ #
+ # @return the connection obj with the timeouts set if they have been initialized
+ 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
+
# Makes a request directly to Expedia.
# @note You'll rarely need to call this method directly.
#
# @see Expedia::API#api
#
@@ -45,10 +61,11 @@
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)
@@ -59,39 +76,21 @@
else
response
end
end
- # Encodes a given hash into a query string.
- #
- # @param params_hash a hash of values to CGI-encode and appropriately join
- #
- # @example
- # Expedia.http_service.encode_params({:a => 2, :b => "My String"})
- # => "a=2&b=My+String"
- #
- # @return the appropriately-encoded string
- # Method currently not in use.
- def encode_params(param_hash)
- ((param_hash || {}).sort_by{|k, v| k.to_s}.collect do |key_and_value|
- key_and_value[1] = MultiJson.dump(key_and_value[1]) unless key_and_value[1].is_a? String
- "#{key_and_value[0].to_s}=#{CGI.escape key_and_value[1]}"
- end).join("&")
- end
-
-
# Creates a Signature for Expedia using MD5 Checksum Auth.
# Shared and Api keys are required for Signature along with the current utc time.
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)
+ 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
# Common Parameters required for every Call to Expedia Server.
- #
+ # @return [Hash] of all common parameters.
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