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