diff --git a/config/traject/ead2_config.rb b/config/traject/ead2_config.rb index ea6b16f..89331c1 100644 --- a/config/traject/ead2_config.rb +++ b/config/traject/ead2_config.rb @@ -1,5 +1,9 @@ # frozen_string_literal: true +def remove_to_field_def(field_name) + instance_variable_get(:@index_steps).reject! { |f| f.instance_variable_get(:@field_name) == field_name } +end + # Load the arclight gem's default EAD2 traject configuration first. # All additions and modifications below are kept separate from the upstream defaults. load_config_file Arclight::Engine.root.join("lib/arclight/traject/ead2_config.rb").to_s @@ -8,3 +12,24 @@ # Boxrunner-specific additions / overrides # ========================================== +# Utilize genreform for Formats facet + +remove_to_field_def "access_subjects_ssim" +remove_to_field_def "access_subjects_ssm" + +to_field "access_subjects_ssim", extract_xpath("/ead/archdesc/controlaccess", to_text: false) do |_record, accumulator| + accumulator.map! do |element| + %w[subject function occupation].map do |selector| + element.xpath(".//#{selector}").map(&:text) + end + end.flatten! +end + +to_field "access_subjects_ssm" do |_record, accumulator, context| + accumulator.concat Array.wrap(context.output_hash["access_subjects_ssim"]) +end + +to_field "formats_ssim", extract_xpath("/ead/archdesc/controlaccess/genreform|/ead/archdesc/controlaccess/controlaccess/genreform") +to_field "formats_ssm" do |_record, accumulator, context| + accumulator.concat Array.wrap(context.output_hash["formats_ssim"]) +end diff --git a/spec/config/traject/ead2_config_spec.rb b/spec/config/traject/ead2_config_spec.rb index 02e39c3..8cf3564 100644 --- a/spec/config/traject/ead2_config_spec.rb +++ b/spec/config/traject/ead2_config_spec.rb @@ -133,14 +133,21 @@ it "maps access_subjects_ssim from controlaccess subjects" do expect(result["access_subjects_ssim"]).to include "Women in science." expect(result["access_subjects_ssim"]).to include "Women engineers." + expect(result["access_subjects_ssim"]).to_not include "Digital file formats." end it "maps access_subjects_ssm from access_subjects_ssim" do expect(result["access_subjects_ssm"]).to eq result["access_subjects_ssim"] end + end + + describe "formats" do + it "maps genreform to formats_ssim" do + expect(result["formats_ssim"]).to include "Digital file formats." + end - it "maps genreform_ssim from controlaccess" do - expect(result["genreform_ssim"]).to include "Photographs." + it "maps formats_ssim to formats_ssm" do + expect(result["formats_ssim"]).to eq result["formats_ssm"] end end