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