class What3Words::API

Document the responsibility of the class

Constants

BASE_URL
ENDPOINTS
REGEX_3_WORD_ADDRESS
REGEX_STRICT

Attributes

key[R]

Public Class Methods

new(params) click to toggle source
# File lib/what3words/api.rb, line 29
def initialize(params)
  @key = params.fetch(:key)
end

Public Instance Methods

autosuggest(addr, lang, focus = {}, clip = {}, params = {}) click to toggle source
# File lib/what3words/api.rb, line 60
def autosuggest(addr, lang, focus = {}, clip = {}, params = {})
  request_params = assemble_autosuggest_request_params(addr, lang, focus,
                                                       clip, params)
  response = request! :autosuggest, request_params
  response
end
autosuggest_ml(addr, lang, focus = {}, clip = {}, params = {}) click to toggle source
# File lib/what3words/api.rb, line 67
def autosuggest_ml(addr, lang, focus = {}, clip = {}, params = {})
  request_params = assemble_autosuggest_request_params(addr, lang, focus,
                                                       clip, params)
  response = request! :autosuggest_ml, request_params
  response
end
deep_symbolize_keys(i) click to toggle source
# File lib/what3words/api.rb, line 170
def deep_symbolize_keys(i)
  if i.is_a? Hash
    ni = {}
    # rubocop:disable Metrics/LineLength
    i.each { |k, v| ni[k.respond_to?(:to_sym) ? k.to_sym : k] = deep_symbolize_keys(v) }
    # rubocop:enable Metrics/LineLength
  elsif i.is_a? Array
    ni = i.map(&method(:deep_symbolize_keys))
  else
    ni = i
  end

  ni
end
endpoint(name) click to toggle source
# File lib/what3words/api.rb, line 190
def endpoint(name)
  base_url + ENDPOINTS.fetch(name)
end
forward(words, params = {}) click to toggle source
# File lib/what3words/api.rb, line 35
def forward(words, params = {})
  words_string = get_words_string words
  request_params = assemble_forward_request_params(words_string, params)
  response = request! :forward, request_params
  response
end
grid(bbox, params = {}) click to toggle source
# File lib/what3words/api.rb, line 48
def grid(bbox, params = {})
  request_params = assemble_grid_request_params(bbox, params)
  response = request! :grid, request_params
  response
end
languages() click to toggle source
# File lib/what3words/api.rb, line 54
def languages
  request_params = assemble_common_request_params({})
  response = request! :languages, request_params
  response
end
reverse(position, params = {}) click to toggle source
# File lib/what3words/api.rb, line 42
def reverse(position, params = {})
  request_params = assemble_reverse_request_params(position, params)
  response = request! :reverse, request_params
  response
end
standardblend(addr, lang, focus = {}, params = {}) click to toggle source
# File lib/what3words/api.rb, line 74
def standardblend(addr, lang, focus = {}, params = {})
  request_params = assemble_standardblend_request_params(addr, lang, focus,
                                                         params)
  response = request! :standardblend, request_params
  response
end
standardblend_ml(addr, lang, focus = {}, params = {}) click to toggle source
# File lib/what3words/api.rb, line 81
def standardblend_ml(addr, lang, focus = {}, params = {})
  request_params = assemble_standardblend_request_params(addr, lang, focus,
                                                         params)
  response = request! :standardblend_ml, request_params
  response
end

Private Instance Methods

assemble_autosuggest_request_params(addr, lang, focus, clip, params) click to toggle source
# File lib/what3words/api.rb, line 115
def assemble_autosuggest_request_params(addr, lang, focus, clip, params)
  h = { addr: addr }
  h[:lang] = lang
  h[:focus] = focus.join(',') if focus.respond_to? :join
  h[:clip] = clip if clip.respond_to? :to_str
  h.merge(assemble_common_request_params(params))
end
assemble_common_request_params(params) click to toggle source
# File lib/what3words/api.rb, line 88
def assemble_common_request_params(params)
  h = { key: key }
  h[:lang] = params[:lang] if params[:lang]
  h[:format] = params[:format] if params[:format]
  h[:display] = params[:display] if params[:display]
  h
end
assemble_forward_request_params(words_string, params) click to toggle source
# File lib/what3words/api.rb, line 97
def assemble_forward_request_params(words_string, params)
  h = { addr: words_string }
  h.merge(assemble_common_request_params(params))
end
assemble_grid_request_params(bbox, params) click to toggle source
# File lib/what3words/api.rb, line 103
def assemble_grid_request_params(bbox, params)
  h = { bbox: bbox }
  h.merge(assemble_common_request_params(params))
end
assemble_reverse_request_params(position, params) click to toggle source
# File lib/what3words/api.rb, line 109
def assemble_reverse_request_params(position, params)
  h = { coords: position.join(',') }
  h.merge(assemble_common_request_params(params))
end
assemble_standardblend_request_params(addr, lang, focus, params) click to toggle source
# File lib/what3words/api.rb, line 124
def assemble_standardblend_request_params(addr, lang, focus, params)
  h = { addr: addr }
  h[:lang] = lang
  h[:focus] = focus.join(',') if focus.respond_to? :join
  h.merge(assemble_common_request_params(params))
end
base_url() click to toggle source
# File lib/what3words/api.rb, line 185
def base_url
  BASE_URL
end
check_words(words) click to toggle source
# File lib/what3words/api.rb, line 162
def check_words(words)
  unless REGEX_3_WORD_ADDRESS.match(words)
    raise WordError, "#{words} is not a valid 3 word address"
  end
  words
end
get_words_string(words) click to toggle source
# File lib/what3words/api.rb, line 150
def get_words_string(words)
  if words.respond_to? :to_str
    w = words
  elsif words.respond_to? :join
    w = words.join('.')
  else
    raise Error, "Cannot get words string for #{words.inspect}"
  end
  check_words w
end
request!(endpoint_name, params) click to toggle source
# File lib/what3words/api.rb, line 132
def request!(endpoint_name, params)
  # puts endpoint_name.inspect
  # puts params.inspect
  begin
    response = RestClient.get endpoint(endpoint_name), params: params
  rescue => e
    response = e.response
  end
  # puts '#{response.to_str}'
  # puts 'Response status: #{response.code}'
  response = JSON.parse(response.body)
  if response['code'].to_s.strip != ''
    raise ResponseError, "#{response['code']}: #{response['message']}"
  end
  deep_symbolize_keys(response)
end