class Dadata::Suggestion

Suggestion API

Constants

BASE_URL

Public Class Methods

new(config) click to toggle source
# File lib/dadata/suggestion.rb, line 11
def initialize(config)
  @config = config
end

Public Instance Methods

address_by_fias_id(fias_id: nil) click to toggle source
# File lib/dadata/suggestion.rb, line 19
def address_by_fias_id(fias_id: nil)
  call_method('findById/address', query: fias_id)
end
address_by_str(query: nil) click to toggle source
# File lib/dadata/suggestion.rb, line 23
def address_by_str(query: nil)
  call_method('suggest/address', query: query)
end
organization(query: nil) click to toggle source
# File lib/dadata/suggestion.rb, line 15
def organization(query: nil)
  call_method('suggest/party', query: query)
end

Private Instance Methods

call_method(method, **query_data) click to toggle source
# File lib/dadata/suggestion.rb, line 29
def call_method(method, **query_data)
  url = URI(URI.join(BASE_URL, method))

  req = Net::HTTP::Post.new(url)

  req['Content-Type'] = 'application/json'
  req['Accept'] = 'application/json'
  req['Authorization'] = "Token #{@config[:api_key]}"

  req.body = query_data.to_json

  resp = perform_request(url, req)
  if resp.is_a?(Net::HTTPResponse)
    if resp.code == '200'
      [true, JSON.parse(resp.body, symbolize_names: true)[:suggestions]]
    else
      [false, { code: resp.code.to_i, message: resp.body }]
    end
  else
    [false, { message: resp }]
  end
end
perform_request(url, request) click to toggle source
# File lib/dadata/suggestion.rb, line 52
def perform_request(url, request)
  http = Net::HTTP.new(url.host, url.port)
  http.use_ssl = true
  http.request(request)
rescue StandardError => e
  e
end