demarches-normaliennes/app/lib/api_address/address_adapter.rb

47 lines
1.3 KiB
Ruby
Raw Normal View History

2021-02-17 13:52:30 +01:00
require 'json_schemer'
class APIAddress::AddressAdapter
class InvalidSchemaError < ::StandardError
def initialize(errors)
super(errors.map(&:to_json).join("\n"))
end
end
def initialize(search_term)
@search_term = search_term
end
def to_params
result = Geocoder.search(@search_term, limit: 1).first
if result.present? && result.national_address == @search_term
feature = result.data['features'].first
if schemer.valid?(feature)
{
label: result.national_address,
type: result.result_type,
street_address: result.street_address,
street_number: result.street_number,
street_name: result.street_name,
postal_code: result.postal_code.presence || "",
2021-02-17 13:52:30 +01:00
city_name: result.city_name,
city_code: result.city_code,
department_name: result.department_name,
department_code: result.department_code,
region_name: result.region_name,
region_code: result.region_code,
geometry: result.geometry
}
else
errors = schemer.validate(feature).to_a
raise InvalidSchemaError.new(errors)
end
end
end
private
def schemer
@schemer ||= JSONSchemer.schema(Rails.root.join('app/schemas/adresse-ban.json'))
end
end