From 03bfb92e02c31cf6cc956d3d46e53dbf2ec9062e Mon Sep 17 00:00:00 2001 From: Nick Budak Date: Mon, 27 Feb 2023 13:50:26 -0800 Subject: [PATCH] Infer geometry type if subjects include a geometry type Closes #35 --- lib/geo_combine/geoblacklight.rb | 12 ++++++++++++ spec/lib/geo_combine/geoblacklight_spec.rb | 6 ++++++ 2 files changed, 18 insertions(+) diff --git a/lib/geo_combine/geoblacklight.rb b/lib/geo_combine/geoblacklight.rb index b254f58..4ca15e1 100644 --- a/lib/geo_combine/geoblacklight.rb +++ b/lib/geo_combine/geoblacklight.rb @@ -42,6 +42,7 @@ def enhance_metadata metadata.each do |key, value| translate_formats(key, value) enhance_subjects(key, value) + infer_geometry_type_from_subject(key, value) format_proper_date(key, value) fields_should_be_array(key, value) translate_geometry_type(key, value) @@ -106,6 +107,17 @@ def translate_geometry_type(key, value) metadata[key] = geometry_types[value] end + ## + # Enhances empty 'layer_geom_type_s' field by populating from related subject + def infer_geometry_type_from_subject(key, value) + return unless key == 'layer_geom_type_s' && value.blank? + + # If any subjects match a known geometry type, use the first that does as the geometry type + metadata['dc_subject_sm'].find { |subject| geometry_types.value?(subject.capitalize) }&.tap do |subject| + metadata[key] = subject.capitalize + end + end + ## # Enhances the 'dc_subject_sm' field by translating subjects to ISO topic # categories diff --git a/spec/lib/geo_combine/geoblacklight_spec.rb b/spec/lib/geo_combine/geoblacklight_spec.rb index 4193a5e..3265bee 100644 --- a/spec/lib/geo_combine/geoblacklight_spec.rb +++ b/spec/lib/geo_combine/geoblacklight_spec.rb @@ -60,6 +60,12 @@ it 'formats the geometry type field' do expect(enhanced_geobl.metadata['layer_geom_type_s']).to eq 'Polygon' end + + it 'populates the geometry type field from the subject field if not set' do + enhanced_from_subject_geobl = described_class.new(basic_geoblacklight, 'dc_subject_sm' => ['polygon']) + enhanced_from_subject_geobl.enhance_metadata + expect(enhanced_from_subject_geobl.metadata['layer_geom_type_s']).to eq 'Polygon' + end end describe '#valid?' do