lib/gds_api/places_manager.rb



require_relative "base"

class GdsApi::PlacesManager < GdsApi::Base
  def api_url(type, params)
    vals = %i[limit lat lng postcode local_authority_slug].select { |p| params.include? p }
    querystring = URI.encode_www_form(vals.map { |p| [p, params[p]] })
    "#{@endpoint}/places/#{type}.json?#{querystring}"
  end

  def places(type, lat, lon, limit = 5)
    url = api_url(type, lat:, lng: lon, limit:)
    get_json(url)
  end

  def places_for_postcode(type, postcode, limit = 5, local_authority_slug = nil)
    options = { postcode:, limit: }
    options.merge!(local_authority_slug:) if local_authority_slug
    url = api_url(type, options)
    get_json(url) || []
  end

  def places_kml(type)
    get_raw("#{@endpoint}/places/#{type}.kml").body
  end
end