module TravelPayouts::Api::Request
Public Instance Methods
convert_to_mash(hash)
click to toggle source
# File lib/travelpayouts_api/request.rb, line 93 def convert_to_mash(hash) return Hashie::Mash.new hash if hash.is_a? Hash return hash unless hash.is_a? Array hash.each{ |_,v| convert_to_mash v } end
param_values(params)
click to toggle source
# File lib/travelpayouts_api/request.rb, line 52 def param_values(params) return params unless params.is_a?(Hash) || params.is_a?(Array) return params.values.map{|v| param_values(v)}.flatten if params.is_a?(Hash) params.map{|p| param_values(p)}.flatten end
request(url, params, skip_parse: false)
click to toggle source
# File lib/travelpayouts_api/request.rb, line 7 def request(url, params, skip_parse: false) params[:currency] ||= config.currency params[:locale] ||= config.locale params.delete_if{ |_, v| v == nil } data = RestClient.get url, request_headers.merge(params: params) skip_parse ? data : respond(data) rescue RestClient::Exception => e err = Error.new(e.response, e.http_code) err.message = e.message raise err end
request_headers(include_content_type = false)
click to toggle source
# File lib/travelpayouts_api/request.rb, line 64 def request_headers(include_content_type = false) { x_access_token: config.token, accept_encoding: 'gzip, deflate', accept: :json }.tap do |headers| headers[:content_type] = 'application/json' if include_content_type end end
respond(resp)
click to toggle source
# File lib/travelpayouts_api/request.rb, line 74 def respond(resp) begin hash = JSON.parse(resp) rescue => _ return resp end convert_to_mash hash end
run_request(url, params, headers, method)
click to toggle source
# File lib/travelpayouts_api/request.rb, line 84 def run_request(url, params, headers, method) return respond RestClient.post url, params.to_json, headers if method == :post respond RestClient.get url, headers.merge(params: params) rescue RestClient::Exception => e err = Error.new(e.response, e.http_code) err.message = e.message raise err end
signature(params, marker=nil)
click to toggle source
# File lib/travelpayouts_api/request.rb, line 58 def signature(params, marker=nil) sign = marker ? [config.token, marker] : [config.token] values = sign + param_values(sort_params(params)) Digest::MD5.hexdigest values.join(':') end
signed_flight_request(method, url, params)
click to toggle source
# File lib/travelpayouts_api/request.rb, line 21 def signed_flight_request(method, url, params) params[:marker] = config.marker.to_s params[:host] = config.host params[:currency] ||= config.currency params[:locale] ||= config.locale if params.has_key?(:locale) params.delete_if{ |_, v| v == nil } params[:signature] = signature(params) run_request(url, params, request_headers(true), method) end
signed_hotel_request(method, url, params)
click to toggle source
# File lib/travelpayouts_api/request.rb, line 34 def signed_hotel_request(method, url, params) params[:marker] = config.marker.to_s params[:currency] ||= config.currency params[:lang] ||= config.locale if params.has_key?(:lang) params.delete_if{ |_, v| v == nil } params[:signature] = signature(params, config.marker) run_request(url, params, request_headers(true), method) end
sort_params(params)
click to toggle source
# File lib/travelpayouts_api/request.rb, line 46 def sort_params(params) return params unless params.is_a?(Hash) || params.is_a?(Array) return Hash[params.sort.map{ |k,v| [k, sort_params(v)] }] if params.is_a?(Hash) params.map{|p| sort_params(p)} end