lib/gds_api/finder_schema.rb
class GdsApi::FinderSchema NotFoundError = Class.new(RuntimeError) def initialize(schema_hash) @schema_hash = schema_hash end def user_friendly_values(document_attributes) document_attributes.each_with_object({}) do |(k, v), values| values.store( k.to_s, { label: user_friendly_facet_label(k.to_s), values: user_friendly_facet_value(k.to_s, v), } ) end end attr_reader :schema_hash private :schema_hash private def slug schema_hash.fetch("slug") end def user_friendly_facet_label(facet_key) find_facet(facet_key.to_s).fetch("name") end def user_friendly_facet_value(facet_key, value) Array(value).map { |value| { label: find_schema_allowed_value_label(facet_key, value), slug: value, } } end def find_schema_allowed_value_label(facet_key, value) value_label_pair = allowed_values_for(facet_key) .find { |schema_value| schema_value.fetch("value") == value } if value_label_pair.nil? raise_value_not_found_error(facet_key, value) else value_label_pair.fetch("label") end end def allowed_values_for(facet_key) find_facet(facet_key).fetch("allowed_values") end def find_facet(facet_key) facets.find { |facet| facet.fetch("key") == facet_key } end def facets schema_hash.fetch("facets") end def raise_value_not_found_error(facet_key, value) raise NotFoundError.new("#{facet_key} value '#{value}' not found in #{slug} schema") end end