class Geocoder::Lookup::Mapbox

def base_query_url(query)

def base_query_url(query)
  "#{protocol}://api.mapbox.com/geocoding/v5/#{dataset}/#{mapbox_search_term(query)}.json?"
end

def dataset

def dataset
  configuration[:dataset] || "mapbox.places"
end

def mapbox_search_term(query)

def mapbox_search_term(query)
  require 'cgi' unless defined?(CGI) && defined?(CGI.escape)
  if query.reverse_geocode?
    lat,lon = query.coordinates
    "#{CGI.escape lon},#{CGI.escape lat}"
  else
    # truncate at first semicolon so Mapbox doesn't go into batch mode
    # (see Github issue #1299)
    CGI.escape query.text.to_s.split(';').first.to_s
  end
end

def name

def name
  "Mapbox"
end

def query_url_params(query)

def query_url_params(query)
  {access_token: configuration.api_key}.merge(super(query))
end

def results(query)

def results(query)
  return [] unless data = fetch_data(query)
  if data['features']
    sort_relevant_feature(data['features'])
  elsif data['message'] =~ /Invalid\sToken/
    raise_error(Geocoder::InvalidApiKey, data['message'])
  else
    []
  end
end

def sort_relevant_feature(features)

def sort_relevant_feature(features)
  # Sort by descending relevance; Favor original order for equal relevance (eg occurs for reverse geocoding)
  features.sort_by do |feature|
    [feature["relevance"],-features.index(feature)]
  end.reverse
end

def supported_protocols

def supported_protocols
  [:https]
end