require 'json_schemer' class APIEducation::AnnuaireEducationAdapter class InvalidSchemaError < ::StandardError def initialize(errors) super(errors.map(&:to_json).join("\n")) end end def initialize(id) @id = id end def to_params record = data_source[:records].first if record.present? properties = record[:fields].merge({ geometry: record[:geometry] }).deep_stringify_keys if schemer.valid?(properties) properties else errors = schemer.validate(properties).to_a raise InvalidSchemaError.new(errors) end end end private def data_source @data_source ||= JSON.parse(APIEducation::API.get_annuaire_education(@id), symbolize_names: true) end def schemer @schemer ||= JSONSchemer.schema(Rails.root.join('app/schemas/etablissement-annuaire-education.json')) end end