class Dadatas::ApiCall

Call API DADATA

Attributes

config[R]
params[R]
url[R]

Public Class Methods

new(url, config, params) click to toggle source
# File lib/dadatas/api_call.rb, line 11
def initialize(url, config, params)
  @url = url
  @config = config
  @params = params
end

Public Instance Methods

call() click to toggle source
# File lib/dadatas/api_call.rb, line 17
def call
  response = perform_request(url, params)

  return response_handler(response) if response.status.eql?(200)

  error_response(response, response.body)
end
error_response(response, response_body) click to toggle source
# File lib/dadatas/api_call.rb, line 35
def error_response(response, response_body)
  [false, { code: response.status, message: response_body }]
end
header() click to toggle source
# File lib/dadatas/api_call.rb, line 48
def header
  {
    'Content-Type' => 'application/json',
    'Accept' => 'application/json',
    'Authorization' => "Token #{@config[:api_key]}",
    'X-Secret' => @config[:secret_key].to_s
  }
end
perform_request(url, params) click to toggle source
# File lib/dadatas/api_call.rb, line 57
def perform_request(url, params)
  Faraday.post(url, params.to_json, header)
rescue StandardError => e
  e
end
response_handler(response) click to toggle source
# File lib/dadatas/api_call.rb, line 25
def response_handler(response)
  response_body = JSON.parse(response.body, symbolize_names: true)

  return success(response_body) if response_body.is_a?(Array)

  return success(response_body[:suggestions]) if response_body.key?(:suggestions)

  error_response(response, response_body)
end
success(response) click to toggle source
# File lib/dadatas/api_call.rb, line 39
def success(response)
  new_response = response.map do |result|
    result[:data].merge!(req_value: result[:value]) if result.key?(:data)
    result
  end

  [response.any?, new_response]
end