From f7ed47f46049232d7de362eef945be5f6d3e16d8 Mon Sep 17 00:00:00 2001 From: Michael Holloway Date: Thu, 16 Jan 2025 20:38:46 -0500 Subject: [PATCH] Reconsolidate some claim transformers --- lib/digital_scriptorium/transformers.rb | 92 ++++++---- .../acknowledgements_claim_transformer.rb | 6 +- .../transformers/date_claim_transformer.rb | 6 - .../transformers/dated_claim_transformer.rb | 6 +- .../iiif_manifest_claim_transformer.rb | 6 - .../institution_claim_transformer.rb | 15 -- .../institutional_record_claim_transformer.rb | 12 -- .../language_claim_transformer.rb | 15 -- .../transformers/link_claim_transformer.rb | 4 + .../material_claim_transformer.rb | 15 -- .../transformers/name_claim_transformer.rb | 6 +- .../transformers/note_claim_transformer.rb | 6 +- .../physical_description_claim_transformer.rb | 6 +- .../transformers/place_claim_transformer.rb | 15 -- .../shelfmark_claim_transformer.rb | 6 +- .../transformers/term_claim_transformer.rb | 15 -- .../transformers/title_claim_transformer.rb | 15 -- .../uniform_title_claim_transformer.rb | 6 +- ...acknowledgements_claim_transformer_spec.rb | 5 +- .../date_claim_transformer_spec.rb | 12 +- .../dated_claim_transformer_spec.rb | 5 +- .../iiif_manifest_claim_transformer_spec.rb | 5 +- .../institution_claim_transformer_spec.rb | 38 ----- .../language_claim_transformer_spec.rb | 37 ----- ...spec.rb => link_claim_transformer_spec.rb} | 7 +- .../material_claim_transformer_spec.rb | 37 ----- .../name_claim_transformer_spec.rb | 15 +- .../note_claim_transformer_spec.rb | 5 +- ...ical_description_claim_transformer_spec.rb | 5 +- .../place_claim_transformer_spec.rb | 40 ----- .../qualified_claim_transformer_spec.rb | 157 ++++++++++++++++++ ...im_transformer_with_facet_fallback_spec.rb | 144 ++++++++++++++++ .../shelfmark_claim_transformer_spec.rb | 5 +- .../term_claim_transformer_spec.rb | 72 -------- .../title_claim_transformer_spec.rb | 56 ------- .../uniform_title_claim_transformer_spec.rb | 5 +- 36 files changed, 438 insertions(+), 464 deletions(-) delete mode 100644 lib/digital_scriptorium/transformers/institution_claim_transformer.rb delete mode 100644 lib/digital_scriptorium/transformers/institutional_record_claim_transformer.rb delete mode 100644 lib/digital_scriptorium/transformers/language_claim_transformer.rb delete mode 100644 lib/digital_scriptorium/transformers/material_claim_transformer.rb delete mode 100644 lib/digital_scriptorium/transformers/place_claim_transformer.rb delete mode 100644 lib/digital_scriptorium/transformers/term_claim_transformer.rb delete mode 100644 lib/digital_scriptorium/transformers/title_claim_transformer.rb delete mode 100644 spec/digital_scriptorium/institution_claim_transformer_spec.rb delete mode 100644 spec/digital_scriptorium/language_claim_transformer_spec.rb rename spec/digital_scriptorium/{institutional_record_claim_transformer_spec.rb => link_claim_transformer_spec.rb} (75%) delete mode 100644 spec/digital_scriptorium/material_claim_transformer_spec.rb delete mode 100644 spec/digital_scriptorium/place_claim_transformer_spec.rb create mode 100644 spec/digital_scriptorium/qualified_claim_transformer_spec.rb create mode 100644 spec/digital_scriptorium/qualified_claim_transformer_with_facet_fallback_spec.rb delete mode 100644 spec/digital_scriptorium/term_claim_transformer_spec.rb delete mode 100644 spec/digital_scriptorium/title_claim_transformer_spec.rb diff --git a/lib/digital_scriptorium/transformers.rb b/lib/digital_scriptorium/transformers.rb index 91a98f8..1434603 100644 --- a/lib/digital_scriptorium/transformers.rb +++ b/lib/digital_scriptorium/transformers.rb @@ -9,52 +9,88 @@ require_relative 'transformers/date_claim_transformer' require_relative 'transformers/dated_claim_transformer' require_relative 'transformers/iiif_manifest_claim_transformer' -require_relative 'transformers/institution_claim_transformer' -require_relative 'transformers/institutional_record_claim_transformer' -require_relative 'transformers/language_claim_transformer' -require_relative 'transformers/material_claim_transformer' require_relative 'transformers/name_claim_transformer' require_relative 'transformers/note_claim_transformer' require_relative 'transformers/physical_description_claim_transformer' -require_relative 'transformers/place_claim_transformer' require_relative 'transformers/shelfmark_claim_transformer' -require_relative 'transformers/term_claim_transformer' -require_relative 'transformers/title_claim_transformer' require_relative 'transformers/uniform_title_claim_transformer' module DigitalScriptorium # Factory for creating claim transformers - class Transformers + module Transformers include PropertyId TRANSFORMERS = { - HOLDING_INSTITUTION_AS_RECORDED => InstitutionClaimTransformer, - SHELFMARK => ShelfmarkClaimTransformer, - LINK_TO_INSTITUTIONAL_RECORD => InstitutionalRecordClaimTransformer, - TITLE_AS_RECORDED => TitleClaimTransformer, - UNIFORM_TITLE_AS_RECORDED => UniformTitleClaimTransformer, - ASSOCIATED_NAME_AS_RECORDED => NameClaimTransformer, - GENRE_AS_RECORDED => TermClaimTransformer, - SUBJECT_AS_RECORDED => TermClaimTransformer, - LANGUAGE_AS_RECORDED => LanguageClaimTransformer, - PRODUCTION_DATE_AS_RECORDED => DateClaimTransformer, - DATED => DatedClaimTransformer, - PRODUCTION_PLACE_AS_RECORDED => PlaceClaimTransformer, - PHYSICAL_DESCRIPTION => PhysicalDescriptionClaimTransformer, - MATERIAL_AS_RECORDED => MaterialClaimTransformer, - NOTE => NoteClaimTransformer, - ACKNOWLEDGEMENTS => AcknowledgementsClaimTransformer, - IIIF_MANIFEST => IiifManifestClaimTransformer + HOLDING_INSTITUTION_AS_RECORDED => QualifiedClaimTransformer, + SHELFMARK => ShelfmarkClaimTransformer, + LINK_TO_INSTITUTIONAL_RECORD => LinkClaimTransformer, + TITLE_AS_RECORDED => QualifiedClaimTransformerWithFacetFallback, + UNIFORM_TITLE_AS_RECORDED => UniformTitleClaimTransformer, + ASSOCIATED_NAME_AS_RECORDED => NameClaimTransformer, + GENRE_AS_RECORDED => QualifiedClaimTransformerWithFacetFallback, + SUBJECT_AS_RECORDED => QualifiedClaimTransformerWithFacetFallback, + LANGUAGE_AS_RECORDED => QualifiedClaimTransformer, + PRODUCTION_DATE_AS_RECORDED => DateClaimTransformer, + DATED => DatedClaimTransformer, + PRODUCTION_PLACE_AS_RECORDED => QualifiedClaimTransformer, + PHYSICAL_DESCRIPTION => PhysicalDescriptionClaimTransformer, + MATERIAL_AS_RECORDED => QualifiedClaimTransformer, + NOTE => NoteClaimTransformer, + ACKNOWLEDGEMENTS => AcknowledgementsClaimTransformer, + IIIF_MANIFEST => IiifManifestClaimTransformer }.freeze - def self.defined?(property_id) + AUTHORITY_IDS = { + HOLDING_INSTITUTION_AS_RECORDED => HOLDING_INSTITUTION_IN_AUTHORITY_FILE, + TITLE_AS_RECORDED => STANDARD_TITLE, + ASSOCIATED_NAME_AS_RECORDED => NAME_IN_AUTHORITY_FILE, + GENRE_AS_RECORDED => TERM_IN_AUTHORITY_FILE, + SUBJECT_AS_RECORDED => TERM_IN_AUTHORITY_FILE, + LANGUAGE_AS_RECORDED => LANGUAGE_IN_AUTHORITY_FILE, + PRODUCTION_DATE_AS_RECORDED => PRODUCTION_CENTURY_IN_AUTHORITY_FILE, + PRODUCTION_PLACE_AS_RECORDED => PLACE_IN_AUTHORITY_FILE, + MATERIAL_AS_RECORDED => MATERIAL_IN_AUTHORITY_FILE + }.freeze + + PREFIXES = { + HOLDING_INSTITUTION_AS_RECORDED => 'institution', + SHELFMARK => 'shelfmark', + LINK_TO_INSTITUTIONAL_RECORD => 'institutional_record', + TITLE_AS_RECORDED => 'title', + UNIFORM_TITLE_AS_RECORDED => 'uniform_title', + ASSOCIATED_NAME_AS_RECORDED => 'name', + GENRE_AS_RECORDED => 'term', + SUBJECT_AS_RECORDED => 'term', + LANGUAGE_AS_RECORDED => 'language', + PRODUCTION_DATE_AS_RECORDED => 'date', + DATED => 'dated', + PRODUCTION_PLACE_AS_RECORDED => 'place', + PHYSICAL_DESCRIPTION => 'physical_description', + MATERIAL_AS_RECORDED => 'material', + NOTE => 'note', + ACKNOWLEDGEMENTS => 'acknowledgements', + IIIF_MANIFEST => 'iiif_manifest' + }.freeze + + def self.transformer(property_id) TRANSFORMERS[property_id] end + def self.authority_id(property_id) + AUTHORITY_IDS[property_id] + end + + def self.prefix(property_id) + PREFIXES[property_id] + end + def self.create(property_id, claim, export_hash) - return unless self.defined?(property_id) + transformer_class = TRANSFORMERS[property_id] + authority_id = AUTHORITY_IDS[property_id] + prefix = PREFIXES[property_id] + return unless transformer && prefix - TRANSFORMERS[property_id].new(claim, export_hash) + transformer_class.new(claim, export_hash, prefix: prefix, authority_id: authority_id) end end end diff --git a/lib/digital_scriptorium/transformers/acknowledgements_claim_transformer.rb b/lib/digital_scriptorium/transformers/acknowledgements_claim_transformer.rb index 900a5bd..9f09bb8 100644 --- a/lib/digital_scriptorium/transformers/acknowledgements_claim_transformer.rb +++ b/lib/digital_scriptorium/transformers/acknowledgements_claim_transformer.rb @@ -3,10 +3,8 @@ module DigitalScriptorium # Transformer for acknowledgements (P33) claims. class AcknowledgementsClaimTransformer < BaseClaimTransformer - PREFIX = 'acknowledgements' - - def initialize(claim, _) - super(claim, prefix: PREFIX) + def initialize(claim, _, **kwargs) + super(claim, **kwargs) end def display_values diff --git a/lib/digital_scriptorium/transformers/date_claim_transformer.rb b/lib/digital_scriptorium/transformers/date_claim_transformer.rb index eb91d4f..5b8ddc0 100644 --- a/lib/digital_scriptorium/transformers/date_claim_transformer.rb +++ b/lib/digital_scriptorium/transformers/date_claim_transformer.rb @@ -7,14 +7,8 @@ module DigitalScriptorium class DateClaimTransformer < QualifiedClaimTransformer include PropertyId - PREFIX = 'date' - AUTHORITY_ID = PRODUCTION_CENTURY_IN_AUTHORITY_FILE CENTURY_ALIAS_PATTERN = /^\d{1,2}(st|nd|rd|th) century$/ - def initialize(claim, export_hash) - super(claim, export_hash, prefix: PREFIX, authority_id: AUTHORITY_ID) - end - def search_values super + [canonical_century_label].compact end diff --git a/lib/digital_scriptorium/transformers/dated_claim_transformer.rb b/lib/digital_scriptorium/transformers/dated_claim_transformer.rb index 80cb020..94c012e 100644 --- a/lib/digital_scriptorium/transformers/dated_claim_transformer.rb +++ b/lib/digital_scriptorium/transformers/dated_claim_transformer.rb @@ -3,12 +3,10 @@ module DigitalScriptorium # Transformer for dated? (P26) claims. class DatedClaimTransformer < BaseClaimTransformer - PREFIX = 'dated' - attr_reader :export_hash - def initialize(claim, export_hash) - super(claim, prefix: PREFIX) + def initialize(claim, export_hash, **kwargs) + super(claim, **kwargs) @export_hash = export_hash end diff --git a/lib/digital_scriptorium/transformers/iiif_manifest_claim_transformer.rb b/lib/digital_scriptorium/transformers/iiif_manifest_claim_transformer.rb index 3e6232e..a5e5c71 100644 --- a/lib/digital_scriptorium/transformers/iiif_manifest_claim_transformer.rb +++ b/lib/digital_scriptorium/transformers/iiif_manifest_claim_transformer.rb @@ -3,12 +3,6 @@ module DigitalScriptorium # Transformer for IIIF Manifest (P41) claims. class IiifManifestClaimTransformer < LinkClaimTransformer - PREFIX = 'iiif_manifest' - - def initialize(claim, _) - super(claim, prefix: PREFIX) - end - def solr_props super.merge({ 'images_facet' => ['Yes'] }) end diff --git a/lib/digital_scriptorium/transformers/institution_claim_transformer.rb b/lib/digital_scriptorium/transformers/institution_claim_transformer.rb deleted file mode 100644 index de5bba6..0000000 --- a/lib/digital_scriptorium/transformers/institution_claim_transformer.rb +++ /dev/null @@ -1,15 +0,0 @@ -# frozen_string_literal: true - -module DigitalScriptorium - # Transformer for holding institution (P5) claims. - class InstitutionClaimTransformer < QualifiedClaimTransformer - include PropertyId - - PREFIX = 'institution' - AUTHORITY_ID = HOLDING_INSTITUTION_IN_AUTHORITY_FILE - - def initialize(claim, export_hash) - super(claim, export_hash, prefix: PREFIX, authority_id: AUTHORITY_ID) - end - end -end diff --git a/lib/digital_scriptorium/transformers/institutional_record_claim_transformer.rb b/lib/digital_scriptorium/transformers/institutional_record_claim_transformer.rb deleted file mode 100644 index a0e0f21..0000000 --- a/lib/digital_scriptorium/transformers/institutional_record_claim_transformer.rb +++ /dev/null @@ -1,12 +0,0 @@ -# frozen_string_literal: true - -module DigitalScriptorium - # Transformer for institutional record (P9) claims. - class InstitutionalRecordClaimTransformer < LinkClaimTransformer - PREFIX = 'institutional_record' - - def initialize(claim, _) - super(claim, prefix: PREFIX) - end - end -end diff --git a/lib/digital_scriptorium/transformers/language_claim_transformer.rb b/lib/digital_scriptorium/transformers/language_claim_transformer.rb deleted file mode 100644 index 7882970..0000000 --- a/lib/digital_scriptorium/transformers/language_claim_transformer.rb +++ /dev/null @@ -1,15 +0,0 @@ -# frozen_string_literal: true - -module DigitalScriptorium - # Transformer for language (P21) claims. - class LanguageClaimTransformer < QualifiedClaimTransformer - include PropertyId - - PREFIX = 'language' - AUTHORITY_ID = LANGUAGE_IN_AUTHORITY_FILE - - def initialize(claim, export_hash) - super(claim, export_hash, prefix: PREFIX, authority_id: AUTHORITY_ID) - end - end -end diff --git a/lib/digital_scriptorium/transformers/link_claim_transformer.rb b/lib/digital_scriptorium/transformers/link_claim_transformer.rb index 66a53e4..03777e4 100644 --- a/lib/digital_scriptorium/transformers/link_claim_transformer.rb +++ b/lib/digital_scriptorium/transformers/link_claim_transformer.rb @@ -3,6 +3,10 @@ module DigitalScriptorium # Transformer for extracting links from relevant Digital Scriptorium claims. class LinkClaimTransformer < BaseClaimTransformer + def initialize(claim, _, **kwargs) + super(claim, **kwargs) + end + def solr_props super.merge({ "#{prefix}_link" => [claim.data_value] }) end diff --git a/lib/digital_scriptorium/transformers/material_claim_transformer.rb b/lib/digital_scriptorium/transformers/material_claim_transformer.rb deleted file mode 100644 index 8400168..0000000 --- a/lib/digital_scriptorium/transformers/material_claim_transformer.rb +++ /dev/null @@ -1,15 +0,0 @@ -# frozen_string_literal: true - -module DigitalScriptorium - # Transformer for material (P30) claims. - class MaterialClaimTransformer < QualifiedClaimTransformer - include PropertyId - - PREFIX = 'material' - AUTHORITY_ID = MATERIAL_IN_AUTHORITY_FILE - - def initialize(claim, export_hash) - super(claim, export_hash, prefix: PREFIX, authority_id: AUTHORITY_ID) - end - end -end diff --git a/lib/digital_scriptorium/transformers/name_claim_transformer.rb b/lib/digital_scriptorium/transformers/name_claim_transformer.rb index 9bf24f2..0a8f489 100644 --- a/lib/digital_scriptorium/transformers/name_claim_transformer.rb +++ b/lib/digital_scriptorium/transformers/name_claim_transformer.rb @@ -7,10 +7,8 @@ module DigitalScriptorium class NameClaimTransformer < QualifiedClaimTransformerWithFacetFallback include PropertyId - AUTHORITY_ID = NAME_IN_AUTHORITY_FILE - - def initialize(claim, export_hash) - super(claim, export_hash, prefix: role_prefix(claim, export_hash), authority_id: AUTHORITY_ID) + def initialize(claim, export_hash, **kwargs) + super(claim, export_hash, prefix: role_prefix(claim, export_hash), authority_id: kwargs[:authority_id]) end def role_prefix(claim, export_hash) diff --git a/lib/digital_scriptorium/transformers/note_claim_transformer.rb b/lib/digital_scriptorium/transformers/note_claim_transformer.rb index 5e502d3..e42fca7 100644 --- a/lib/digital_scriptorium/transformers/note_claim_transformer.rb +++ b/lib/digital_scriptorium/transformers/note_claim_transformer.rb @@ -3,10 +3,8 @@ module DigitalScriptorium # Transformer for acknowledgements (P32) claims. class NoteClaimTransformer < BaseClaimTransformer - PREFIX = 'note' - - def initialize(claim, _) - super(claim, prefix: PREFIX) + def initialize(claim, _, **kwargs) + super(claim, **kwargs) end def display_values diff --git a/lib/digital_scriptorium/transformers/physical_description_claim_transformer.rb b/lib/digital_scriptorium/transformers/physical_description_claim_transformer.rb index 8c7c15e..25535f9 100644 --- a/lib/digital_scriptorium/transformers/physical_description_claim_transformer.rb +++ b/lib/digital_scriptorium/transformers/physical_description_claim_transformer.rb @@ -3,10 +3,8 @@ module DigitalScriptorium # Transformer for physical description (P29) claims. class PhysicalDescriptionClaimTransformer < BaseClaimTransformer - PREFIX = 'physical_description' - - def initialize(claim, _) - super(claim, prefix: PREFIX) + def initialize(claim, _, **kwargs) + super(claim, **kwargs) end def display_values diff --git a/lib/digital_scriptorium/transformers/place_claim_transformer.rb b/lib/digital_scriptorium/transformers/place_claim_transformer.rb deleted file mode 100644 index a157a7d..0000000 --- a/lib/digital_scriptorium/transformers/place_claim_transformer.rb +++ /dev/null @@ -1,15 +0,0 @@ -# frozen_string_literal: true - -module DigitalScriptorium - # Transformer for place (P28) claims. - class PlaceClaimTransformer < QualifiedClaimTransformer - include PropertyId - - PREFIX = 'place' - AUTHORITY_ID = PLACE_IN_AUTHORITY_FILE - - def initialize(claim, export_hash) - super(claim, export_hash, prefix: PREFIX, authority_id: AUTHORITY_ID) - end - end -end diff --git a/lib/digital_scriptorium/transformers/shelfmark_claim_transformer.rb b/lib/digital_scriptorium/transformers/shelfmark_claim_transformer.rb index 85065ef..40c1d8f 100644 --- a/lib/digital_scriptorium/transformers/shelfmark_claim_transformer.rb +++ b/lib/digital_scriptorium/transformers/shelfmark_claim_transformer.rb @@ -3,10 +3,8 @@ module DigitalScriptorium # Transformer for shelfmark (P8) claims. class ShelfmarkClaimTransformer < BaseClaimTransformer - PREFIX = 'shelfmark' - - def initialize(claim, _) - super(claim, prefix: PREFIX) + def initialize(claim, _, **kwargs) + super(claim, **kwargs) end def display_values diff --git a/lib/digital_scriptorium/transformers/term_claim_transformer.rb b/lib/digital_scriptorium/transformers/term_claim_transformer.rb deleted file mode 100644 index 6fc4ec2..0000000 --- a/lib/digital_scriptorium/transformers/term_claim_transformer.rb +++ /dev/null @@ -1,15 +0,0 @@ -# frozen_string_literal: true - -module DigitalScriptorium - # Transformer for genre (P18) and subject (P19) claims. - class TermClaimTransformer < QualifiedClaimTransformerWithFacetFallback - include PropertyId - - PREFIX = 'term' - AUTHORITY_ID = TERM_IN_AUTHORITY_FILE - - def initialize(claim, export_hash) - super(claim, export_hash, prefix: PREFIX, authority_id: AUTHORITY_ID) - end - end -end diff --git a/lib/digital_scriptorium/transformers/title_claim_transformer.rb b/lib/digital_scriptorium/transformers/title_claim_transformer.rb deleted file mode 100644 index b4ee8db..0000000 --- a/lib/digital_scriptorium/transformers/title_claim_transformer.rb +++ /dev/null @@ -1,15 +0,0 @@ -# frozen_string_literal: true - -module DigitalScriptorium - # Transformer for title (P10) claims. - class TitleClaimTransformer < QualifiedClaimTransformerWithFacetFallback - include PropertyId - - PREFIX = 'title' - AUTHORITY_ID = STANDARD_TITLE - - def initialize(claim, export_hash) - super(claim, export_hash, prefix: PREFIX, authority_id: AUTHORITY_ID) - end - end -end diff --git a/lib/digital_scriptorium/transformers/uniform_title_claim_transformer.rb b/lib/digital_scriptorium/transformers/uniform_title_claim_transformer.rb index 15ad061..1683338 100644 --- a/lib/digital_scriptorium/transformers/uniform_title_claim_transformer.rb +++ b/lib/digital_scriptorium/transformers/uniform_title_claim_transformer.rb @@ -3,10 +3,8 @@ module DigitalScriptorium # Transformer for uniform title (P12) claims. class UniformTitleClaimTransformer < BaseClaimTransformer - PREFIX = 'uniform_title' - - def initialize(claim, _) - super(claim, prefix: PREFIX) + def initialize(claim, _, **kwargs) + super(claim, **kwargs) end def search_values diff --git a/spec/digital_scriptorium/acknowledgements_claim_transformer_spec.rb b/spec/digital_scriptorium/acknowledgements_claim_transformer_spec.rb index 0a17181..31e7957 100644 --- a/spec/digital_scriptorium/acknowledgements_claim_transformer_spec.rb +++ b/spec/digital_scriptorium/acknowledgements_claim_transformer_spec.rb @@ -1,9 +1,12 @@ # frozen_string_literal: true module DigitalScriptorium + include PropertyId + RSpec.describe AcknowledgementsClaimTransformer do context 'with an acknowledgements (P33) claim' do json = read_fixture('claims/P33_acknowledgements.json') + prefix = Transformers.prefix(ACKNOWLEDGEMENTS) expected = { 'acknowledgements_display' => [ '{"recorded_value":"We thank Michael W. Heil for his work in making this description available."}' @@ -11,7 +14,7 @@ module DigitalScriptorium } it 'provides the acknowledgements in the display field only' do - solr_props = described_class.new(build_claim(json), export_hash).solr_props + solr_props = described_class.new(build_claim(json), export_hash, prefix: prefix).solr_props expect(solr_props).to eq(expected) end end diff --git a/spec/digital_scriptorium/date_claim_transformer_spec.rb b/spec/digital_scriptorium/date_claim_transformer_spec.rb index e0170ef..ae3c0fd 100644 --- a/spec/digital_scriptorium/date_claim_transformer_spec.rb +++ b/spec/digital_scriptorium/date_claim_transformer_spec.rb @@ -3,9 +3,13 @@ require 'json' module DigitalScriptorium + include PropertyId + RSpec.describe DateClaimTransformer do context 'with a qualified date (P23) claim' do json = read_fixture('claims/P23_date_qualified.json') + prefix = Transformers.prefix(PRODUCTION_DATE_AS_RECORDED) + authority_id = Transformers.authority_id(PRODUCTION_DATE_AS_RECORDED) expected = { 'date_meta' => ['1358.'], 'date_display' => [{ @@ -20,13 +24,16 @@ module DigitalScriptorium } it 'extracts display, search, facet and extra date fields' do - solr_props = described_class.new(build_claim(json), export_hash).solr_props + solr_props = described_class.new(build_claim(json), export_hash, prefix: prefix, + authority_id: authority_id).solr_props expect(solr_props).to eq(expected) end end context 'with an unqualified date (P23) claim' do json = read_fixture('claims/P23_date_unqualified.json') + prefix = Transformers.prefix(PRODUCTION_DATE_AS_RECORDED) + authority_id = Transformers.authority_id(PRODUCTION_DATE_AS_RECORDED) expected = { 'date_meta' => ['1358.'], 'date_display' => [{ 'recorded_value' => '1358.' }.to_json], @@ -34,7 +41,8 @@ module DigitalScriptorium } it 'provides the recorded value only in the display, search, and meta fields' do - solr_props = described_class.new(build_claim(json), export_hash).solr_props + solr_props = described_class.new(build_claim(json), export_hash, prefix: prefix, + authority_id: authority_id).solr_props expect(solr_props).to eq(expected) end end diff --git a/spec/digital_scriptorium/dated_claim_transformer_spec.rb b/spec/digital_scriptorium/dated_claim_transformer_spec.rb index ed69130..25a7e0b 100644 --- a/spec/digital_scriptorium/dated_claim_transformer_spec.rb +++ b/spec/digital_scriptorium/dated_claim_transformer_spec.rb @@ -1,13 +1,16 @@ # frozen_string_literal: true module DigitalScriptorium + include PropertyId + RSpec.describe DatedClaimTransformer do context 'with a dated (P26) claim' do json = read_fixture('claims/P26_dated.json') + prefix = Transformers.prefix(DATED) expected = { 'dated_facet' => ['Non-dated'] } it 'provides the label for the applicable entity ID value' do - solr_props = described_class.new(build_claim(json), export_hash).solr_props + solr_props = described_class.new(build_claim(json), export_hash, prefix: prefix).solr_props expect(solr_props).to eq(expected) end end diff --git a/spec/digital_scriptorium/iiif_manifest_claim_transformer_spec.rb b/spec/digital_scriptorium/iiif_manifest_claim_transformer_spec.rb index 3f89904..9e02eed 100644 --- a/spec/digital_scriptorium/iiif_manifest_claim_transformer_spec.rb +++ b/spec/digital_scriptorium/iiif_manifest_claim_transformer_spec.rb @@ -1,16 +1,19 @@ # frozen_string_literal: true module DigitalScriptorium + include PropertyId + RSpec.describe IiifManifestClaimTransformer do context 'with an IIIF manifest (P41) claim' do json = read_fixture('claims/P41_iiif_manifest.json') + prefix = Transformers.prefix(IIIF_MANIFEST) expected = { 'iiif_manifest_link' => ['https://colenda.library.upenn.edu/phalt/iiif/2/81431-p33p8v/manifest'], 'images_facet' => ['Yes'] } it 'provides the link to the IIIF manifest in the link property and "Yes" in the facet property' do - solr_props = described_class.new(build_claim(json), export_hash).solr_props + solr_props = described_class.new(build_claim(json), export_hash, prefix: prefix).solr_props expect(solr_props).to eq(expected) end end diff --git a/spec/digital_scriptorium/institution_claim_transformer_spec.rb b/spec/digital_scriptorium/institution_claim_transformer_spec.rb deleted file mode 100644 index 1ac9e0f..0000000 --- a/spec/digital_scriptorium/institution_claim_transformer_spec.rb +++ /dev/null @@ -1,38 +0,0 @@ -# frozen_string_literal: true - -module DigitalScriptorium - RSpec.describe InstitutionClaimTransformer do - context 'with a qualified institution (P5) claim' do - json = read_fixture('claims/P5_institution_qualified.json') - expected = { - 'institution_display' => [{ - 'recorded_value' => 'U. of Penna.', - 'linked_terms' => [{ - 'label' => 'University of Pennsylvania', - 'source_url' => 'https://www.wikidata.org/wiki/Q49117' - }] - }.to_json], - 'institution_search' => ['U. of Penna.', 'University of Pennsylvania'], - 'institution_facet' => ['University of Pennsylvania'] - } - - it 'provides the qualifier label in the display, search, and facet fields' do - solr_props = described_class.new(build_claim(json), export_hash).solr_props - expect(solr_props).to eq(expected) - end - end - - context 'with an unqualified institution (P5) claim' do - json = read_fixture('claims/P5_institution_unqualified.json') - expected = { - 'institution_display' => [{ 'recorded_value' => 'U. of Penna.' }.to_json], - 'institution_search' => ['U. of Penna.'] - } - - it 'provides the recorded value only in the search and display fields' do - solr_props = described_class.new(build_claim(json), export_hash).solr_props - expect(solr_props).to eq(expected) - end - end - end -end diff --git a/spec/digital_scriptorium/language_claim_transformer_spec.rb b/spec/digital_scriptorium/language_claim_transformer_spec.rb deleted file mode 100644 index e886676..0000000 --- a/spec/digital_scriptorium/language_claim_transformer_spec.rb +++ /dev/null @@ -1,37 +0,0 @@ -# frozen_string_literal: true - -require 'json' - -module DigitalScriptorium - RSpec.describe LanguageClaimTransformer do - context 'with a qualified language (P21) claim' do - json = read_fixture('claims/P21_language_qualified.json') - expected = { - 'language_display' => [{ - 'recorded_value' => 'In Latin', - 'linked_terms': [{ 'label' => 'Latin', 'source_url' => 'https://www.wikidata.org/wiki/Q397' }] - }.to_json], - 'language_search' => ['In Latin', 'Latin'], - 'language_facet' => ['Latin'] - } - - it 'provides both values in display and search fields and authoritative value in the facet field' do - solr_props = described_class.new(build_claim(json), export_hash).solr_props - expect(solr_props).to eq(expected) - end - end - - context 'with an unqualified language (P21) claim' do - json = read_fixture('claims/P21_language_unqualified.json') - expected = { - 'language_display' => [{ 'recorded_value' => 'In Latin' }.to_json], - 'language_search' => ['In Latin'] - } - - it 'provides the recorded value in the display and search fields only' do - solr_props = described_class.new(build_claim(json), export_hash).solr_props - expect(solr_props).to eq(expected) - end - end - end -end diff --git a/spec/digital_scriptorium/institutional_record_claim_transformer_spec.rb b/spec/digital_scriptorium/link_claim_transformer_spec.rb similarity index 75% rename from spec/digital_scriptorium/institutional_record_claim_transformer_spec.rb rename to spec/digital_scriptorium/link_claim_transformer_spec.rb index 617a940..8823116 100644 --- a/spec/digital_scriptorium/institutional_record_claim_transformer_spec.rb +++ b/spec/digital_scriptorium/link_claim_transformer_spec.rb @@ -1,15 +1,18 @@ # frozen_string_literal: true module DigitalScriptorium - RSpec.describe InstitutionalRecordClaimTransformer do + include PropertyId + + RSpec.describe LinkClaimTransformer do context 'with an institutional record (P9) claim' do json = read_fixture('claims/P9_institutional_record.json') + prefix = Transformers.prefix(LINK_TO_INSTITUTIONAL_RECORD) expected = { 'institutional_record_link' => ['https://franklin.library.upenn.edu/catalog/FRANKLIN_9949945603503681'] } it 'provides the link to the institutional record' do - solr_props = described_class.new(build_claim(json), export_hash).solr_props + solr_props = described_class.new(build_claim(json), export_hash, prefix: prefix).solr_props expect(solr_props).to eq(expected) end end diff --git a/spec/digital_scriptorium/material_claim_transformer_spec.rb b/spec/digital_scriptorium/material_claim_transformer_spec.rb deleted file mode 100644 index 92e7a43..0000000 --- a/spec/digital_scriptorium/material_claim_transformer_spec.rb +++ /dev/null @@ -1,37 +0,0 @@ -# frozen_string_literal: true - -require 'json' - -module DigitalScriptorium - RSpec.describe MaterialClaimTransformer do - context 'with a qualified material (P30) claim' do - json = read_fixture('claims/P30_material_qualified.json') - expected = { - 'material_display' => [{ - 'recorded_value' => 'parchment', - 'linked_terms' => [{ 'label' => 'Parchment', 'source_url' => 'http://vocab.getty.edu/aat/300011851' }] - }.to_json], - 'material_search' => %w[parchment Parchment], - 'material_facet' => ['Parchment'] - } - - it 'provides the authoritative label in the facet field' do - solr_props = described_class.new(build_claim(json), export_hash).solr_props - expect(solr_props).to eq(expected) - end - end - - context 'with an unqualified material (P30) claim' do - json = read_fixture('claims/P30_material_unqualified.json') - expected = { - 'material_display' => [{ 'recorded_value' => 'parchment' }.to_json], - 'material_search' => ['parchment'] - } - - it 'provides the recorded value only in the search and display fields' do - solr_props = described_class.new(build_claim(json), export_hash).solr_props - expect(solr_props).to eq(expected) - end - end - end -end diff --git a/spec/digital_scriptorium/name_claim_transformer_spec.rb b/spec/digital_scriptorium/name_claim_transformer_spec.rb index 096b734..ec33542 100644 --- a/spec/digital_scriptorium/name_claim_transformer_spec.rb +++ b/spec/digital_scriptorium/name_claim_transformer_spec.rb @@ -6,6 +6,8 @@ module DigitalScriptorium RSpec.describe NameClaimTransformer do context 'with a single authority file (P17) qualifier' do json = read_fixture('claims/P14_name_qualified_no_original_script.json') + prefix = Transformers.prefix(ASSOCIATED_NAME_AS_RECORDED) + authority_id = Transformers.authority_id(ASSOCIATED_NAME_AS_RECORDED) expected = { 'owner_display' => [{ 'recorded_value' => 'Schoenberg, Lawrence J', @@ -19,13 +21,16 @@ module DigitalScriptorium } it 'includes the qualifier data in all fields' do - solr_props = described_class.new(build_claim(json), export_hash).solr_props + solr_props = described_class.new(build_claim(json), export_hash, prefix: prefix, + authority_id: authority_id).solr_props expect(solr_props).to eq(expected) end end context 'with multiple authority file (P17) qualifiers' do json = read_fixture('claims/P14_name_multiple_qualifier_values.json') + prefix = Transformers.prefix(ASSOCIATED_NAME_AS_RECORDED) + authority_id = Transformers.authority_id(ASSOCIATED_NAME_AS_RECORDED) recorded_value = 'From the codex made for Leonello d\'Este. ' \ 'Brought to Wales as war booty by 1813, already in a damaged state, by the Rolls family, ' \ 'later enobled as Barons Llangattock, of The Hendre, Monmouth ' \ @@ -52,13 +57,16 @@ module DigitalScriptorium } it 'includes the data from all qualifiers in the display, search, and facet fields' do - solr_props = described_class.new(build_claim(json), export_hash).solr_props + solr_props = described_class.new(build_claim(json), export_hash, prefix: prefix, + authority_id: authority_id).solr_props expect(solr_props).to eq(expected) end end context 'with a authority file (P17) and original script (P13) qualifiers' do json = read_fixture('claims/P14_name_qualified_original_script.json') + prefix = Transformers.prefix(ASSOCIATED_NAME_AS_RECORDED) + authority_id = Transformers.authority_id(ASSOCIATED_NAME_AS_RECORDED) expected = { 'author_display' => [{ 'recorded_value' => 'Dioscorides Pedanius, of Anazarbos', @@ -73,7 +81,8 @@ module DigitalScriptorium } it 'includes the original script value in the display and search fields' do - solr_props = described_class.new(build_claim(json), export_hash).solr_props + solr_props = described_class.new(build_claim(json), export_hash, prefix: prefix, + authority_id: authority_id).solr_props expect(solr_props).to eq(expected) end end diff --git a/spec/digital_scriptorium/note_claim_transformer_spec.rb b/spec/digital_scriptorium/note_claim_transformer_spec.rb index 825e05f..ad344ba 100644 --- a/spec/digital_scriptorium/note_claim_transformer_spec.rb +++ b/spec/digital_scriptorium/note_claim_transformer_spec.rb @@ -1,16 +1,19 @@ # frozen_string_literal: true module DigitalScriptorium + include PropertyId + RSpec.describe NoteClaimTransformer do context 'with a note (P32) claim' do json = read_fixture('claims/P32_note.json') + prefix = Transformers.prefix(NOTE) expected = { 'note_display' => ['{"recorded_value":"Ms. codex."}'], 'note_search' => ['Ms. codex.'] } it 'provides the note in the display and search fields' do - solr_props = described_class.new(build_claim(json), export_hash).solr_props + solr_props = described_class.new(build_claim(json), export_hash, prefix: prefix).solr_props expect(solr_props).to eq(expected) end end diff --git a/spec/digital_scriptorium/physical_description_claim_transformer_spec.rb b/spec/digital_scriptorium/physical_description_claim_transformer_spec.rb index 03a4ff1..fca93d2 100644 --- a/spec/digital_scriptorium/physical_description_claim_transformer_spec.rb +++ b/spec/digital_scriptorium/physical_description_claim_transformer_spec.rb @@ -3,16 +3,19 @@ require 'wikibase_representable' module DigitalScriptorium + include PropertyId + RSpec.describe PhysicalDescriptionClaimTransformer do context 'with a physical description (P29) claim' do json = read_fixture('claims/P29_physical_description.json') + prefix = Transformers.prefix(PHYSICAL_DESCRIPTION) expected = { 'physical_description_display' => ['{"recorded_value":"Extent: 1 parchment ; 170 x 245 mm."}'], 'physical_description_search' => ['Extent: 1 parchment ; 170 x 245 mm.'] } it 'provides the recorded physical description in the display and search fields' do - solr_props = described_class.new(build_claim(json), export_hash).solr_props + solr_props = described_class.new(build_claim(json), export_hash, prefix: prefix).solr_props expect(solr_props).to eq(expected) end end diff --git a/spec/digital_scriptorium/place_claim_transformer_spec.rb b/spec/digital_scriptorium/place_claim_transformer_spec.rb deleted file mode 100644 index 536c108..0000000 --- a/spec/digital_scriptorium/place_claim_transformer_spec.rb +++ /dev/null @@ -1,40 +0,0 @@ -# frozen_string_literal: true - -require 'json' - -module DigitalScriptorium - RSpec.describe PlaceClaimTransformer do - context 'with a qualified place (P27) claim with multi-valued qualifier' do - json = read_fixture('claims/P27_place_multiple_qualifier_values.json') - expected = { - 'place_display' => [{ - 'recorded_value' => '[Provence or Spain],', - 'linked_terms' => [ - { 'label' => 'Provence', 'source_url' => 'http://vocab.getty.edu/tgn/7012209' }, - { 'label' => 'Spain', 'source_url' => 'http://vocab.getty.edu/tgn/1000095' } - ] - }.to_json], - 'place_search' => ['[Provence or Spain],', 'Provence', 'Spain'], - 'place_facet' => %w[Provence Spain] - } - - it 'includes the data from all qualifiers in the display, search, and facet fields' do - solr_props = described_class.new(build_claim(json), export_hash).solr_props - expect(solr_props).to eq(expected) - end - end - - context 'with an unqualified place (P27) claim' do - json = read_fixture('claims/P27_place_unqualified.json') - expected = { - 'place_display' => [{ 'recorded_value' => '[Provence or Spain],' }.to_json], - 'place_search' => ['[Provence or Spain],'] - } - - it 'provides the recorded value in the search and facet fields only' do - solr_props = described_class.new(build_claim(json), export_hash).solr_props - expect(solr_props).to eq(expected) - end - end - end -end diff --git a/spec/digital_scriptorium/qualified_claim_transformer_spec.rb b/spec/digital_scriptorium/qualified_claim_transformer_spec.rb new file mode 100644 index 0000000..f2f51d0 --- /dev/null +++ b/spec/digital_scriptorium/qualified_claim_transformer_spec.rb @@ -0,0 +1,157 @@ +# frozen_string_literal: true + +module DigitalScriptorium + include PropertyId + + RSpec.describe QualifiedClaimTransformer do + context 'with a qualified institution (P5) claim' do + json = read_fixture('claims/P5_institution_qualified.json') + prefix = Transformers.prefix(HOLDING_INSTITUTION_AS_RECORDED) + authority_id = Transformers.authority_id(HOLDING_INSTITUTION_AS_RECORDED) + expected = { + 'institution_display' => [{ + 'recorded_value' => 'U. of Penna.', + 'linked_terms' => [{ + 'label' => 'University of Pennsylvania', + 'source_url' => 'https://www.wikidata.org/wiki/Q49117' + }] + }.to_json], + 'institution_search' => ['U. of Penna.', 'University of Pennsylvania'], + 'institution_facet' => ['University of Pennsylvania'] + } + + it 'provides the qualifier label in the display, search, and facet fields' do + solr_props = described_class.new(build_claim(json), export_hash, prefix: prefix, + authority_id: authority_id).solr_props + expect(solr_props).to eq(expected) + end + end + + context 'with an unqualified institution (P5) claim' do + json = read_fixture('claims/P5_institution_unqualified.json') + prefix = Transformers.prefix(HOLDING_INSTITUTION_AS_RECORDED) + authority_id = Transformers.authority_id(HOLDING_INSTITUTION_AS_RECORDED) + expected = { + 'institution_display' => [{ 'recorded_value' => 'U. of Penna.' }.to_json], + 'institution_search' => ['U. of Penna.'] + } + + it 'provides the recorded value only in the search and display fields' do + solr_props = described_class.new(build_claim(json), export_hash, prefix: prefix, + authority_id: authority_id).solr_props + expect(solr_props).to eq(expected) + end + end + + context 'with a qualified language (P21) claim' do + json = read_fixture('claims/P21_language_qualified.json') + prefix = Transformers.prefix(LANGUAGE_AS_RECORDED) + authority_id = Transformers.authority_id(LANGUAGE_AS_RECORDED) + expected = { + 'language_display' => [{ + 'recorded_value' => 'In Latin', + 'linked_terms': [{ 'label' => 'Latin', 'source_url' => 'https://www.wikidata.org/wiki/Q397' }] + }.to_json], + 'language_search' => ['In Latin', 'Latin'], + 'language_facet' => ['Latin'] + } + + it 'provides both values in display and search fields and authoritative value in the facet field' do + solr_props = described_class.new(build_claim(json), export_hash, prefix: prefix, + authority_id: authority_id).solr_props + expect(solr_props).to eq(expected) + end + end + + context 'with an unqualified language (P21) claim' do + json = read_fixture('claims/P21_language_unqualified.json') + prefix = Transformers.prefix(LANGUAGE_AS_RECORDED) + authority_id = Transformers.authority_id(LANGUAGE_AS_RECORDED) + expected = { + 'language_display' => [{ 'recorded_value' => 'In Latin' }.to_json], + 'language_search' => ['In Latin'] + } + + it 'provides the recorded value in the display and search fields only' do + solr_props = described_class.new(build_claim(json), export_hash, prefix: prefix, + authority_id: authority_id).solr_props + expect(solr_props).to eq(expected) + end + end + + context 'with a qualified place (P27) claim with multi-valued qualifier' do + json = read_fixture('claims/P27_place_multiple_qualifier_values.json') + prefix = Transformers.prefix(PRODUCTION_PLACE_AS_RECORDED) + authority_id = Transformers.authority_id(PRODUCTION_PLACE_AS_RECORDED) + expected = { + 'place_display' => [{ + 'recorded_value' => '[Provence or Spain],', + 'linked_terms' => [ + { 'label' => 'Provence', 'source_url' => 'http://vocab.getty.edu/tgn/7012209' }, + { 'label' => 'Spain', 'source_url' => 'http://vocab.getty.edu/tgn/1000095' } + ] + }.to_json], + 'place_search' => ['[Provence or Spain],', 'Provence', 'Spain'], + 'place_facet' => %w[Provence Spain] + } + + it 'includes the data from all qualifiers in the display, search, and facet fields' do + solr_props = described_class.new(build_claim(json), export_hash, prefix: prefix, + authority_id: authority_id).solr_props + expect(solr_props).to eq(expected) + end + end + + context 'with an unqualified place (P27) claim' do + json = read_fixture('claims/P27_place_unqualified.json') + prefix = Transformers.prefix(PRODUCTION_PLACE_AS_RECORDED) + authority_id = Transformers.authority_id(PRODUCTION_PLACE_AS_RECORDED) + expected = { + 'place_display' => [{ 'recorded_value' => '[Provence or Spain],' }.to_json], + 'place_search' => ['[Provence or Spain],'] + } + + it 'provides the recorded value in the search and facet fields only' do + solr_props = described_class.new(build_claim(json), export_hash, prefix: prefix, + authority_id: authority_id).solr_props + expect(solr_props).to eq(expected) + end + end + + context 'with a qualified material (P30) claim' do + json = read_fixture('claims/P30_material_qualified.json') + prefix = Transformers.prefix(MATERIAL_AS_RECORDED) + authority_id = Transformers.authority_id(MATERIAL_AS_RECORDED) + expected = { + 'material_display' => [{ + 'recorded_value' => 'parchment', + 'linked_terms' => [{ 'label' => 'Parchment', 'source_url' => 'http://vocab.getty.edu/aat/300011851' }] + }.to_json], + 'material_search' => %w[parchment Parchment], + 'material_facet' => ['Parchment'] + } + + it 'provides the authoritative label in the facet field' do + solr_props = described_class.new(build_claim(json), export_hash, prefix: prefix, + authority_id: authority_id).solr_props + expect(solr_props).to eq(expected) + end + end + + context 'with an unqualified material (P30) claim' do + json = read_fixture('claims/P30_material_unqualified.json') + prefix = Transformers.prefix(MATERIAL_AS_RECORDED) + authority_id = Transformers.authority_id(MATERIAL_AS_RECORDED) + expected = { + 'material_display' => [{ 'recorded_value' => 'parchment' }.to_json], + 'material_search' => ['parchment'] + } + + it 'provides the recorded value only in the search and display fields' do + solr_props = described_class.new(build_claim(json), export_hash, prefix: prefix, + authority_id: authority_id).solr_props + expect(solr_props).to eq(expected) + end + end + end +end diff --git a/spec/digital_scriptorium/qualified_claim_transformer_with_facet_fallback_spec.rb b/spec/digital_scriptorium/qualified_claim_transformer_with_facet_fallback_spec.rb new file mode 100644 index 0000000..58b56a0 --- /dev/null +++ b/spec/digital_scriptorium/qualified_claim_transformer_with_facet_fallback_spec.rb @@ -0,0 +1,144 @@ +# frozen_string_literal: true + +require 'json' + +module DigitalScriptorium + include PropertyId + + RSpec.describe QualifiedClaimTransformerWithFacetFallback do + context 'with a title (P10) claim with standard title (P11) and original script (P13) qualifiers' do + json = read_fixture('claims/P10_title_qualified.json') + prefix = Transformers.prefix(TITLE_AS_RECORDED) + authority_id = Transformers.authority_id(TITLE_AS_RECORDED) + expected = { + 'title_display' => [{ + 'recorded_value' => 'Kitāb al-Majisṭī', + 'original_script' => 'كتاب المجسطي.', + 'linked_terms': [{ 'label' => 'Almagest' }] + }.to_json], + 'title_search' => ['Kitāb al-Majisṭī', 'كتاب المجسطي.', 'Almagest'], + 'title_facet' => ['Almagest'] + } + + it 'provides all titles in the display and search fields and the standard title in the facet field' do + solr_props = described_class.new(build_claim(json), export_hash, prefix: prefix, + authority_id: authority_id).solr_props + expect(solr_props).to eq(expected) + end + end + + context 'with a title (P10) claim with only an original script (P13) qualifier' do + json = read_fixture('claims/P10_title_qualified_original_script_only.json') + prefix = Transformers.prefix(TITLE_AS_RECORDED) + authority_id = Transformers.authority_id(TITLE_AS_RECORDED) + expected = { + 'title_display' => [{ + 'recorded_value' => 'Kitāb al-Majisṭī', + 'original_script' => 'كتاب المجسطي.' + }.to_json], + 'title_search' => ['Kitāb al-Majisṭī', 'كتاب المجسطي.'], + 'title_facet' => ['Kitāb al-Majisṭī'] + } + + it 'provides the original script title and falls back to the recorded title in the facet field' do + solr_props = described_class.new(build_claim(json), export_hash, prefix: prefix, + authority_id: authority_id).solr_props + expect(solr_props).to eq(expected) + end + end + + context 'with an unqualified title (P10) claim' do + json = read_fixture('claims/P10_title_unqualified.json') + prefix = Transformers.prefix(TITLE_AS_RECORDED) + authority_id = Transformers.authority_id(TITLE_AS_RECORDED) + expected = { + 'title_display' => [{ 'recorded_value' => 'Kitāb al-Majisṭī' }.to_json], + 'title_search' => ['Kitāb al-Majisṭī'], + 'title_facet' => ['Kitāb al-Majisṭī'] + } + + it 'falls back to the recorded title in the facet field' do + solr_props = described_class.new(build_claim(json), export_hash, prefix: prefix, + authority_id: authority_id).solr_props + expect(solr_props).to eq(expected) + end + end + + context 'with a qualified genre (P18) claim' do + json = read_fixture('claims/P18_genre_qualified.json') + prefix = Transformers.prefix(GENRE_AS_RECORDED) + authority_id = Transformers.authority_id(GENRE_AS_RECORDED) + expected = { + 'term_display' => [{ + 'recorded_value' => 'Deeds', + 'linked_terms': [{ 'label' => 'deeds', 'source_url' => 'http://vocab.getty.edu/aat/300027249' }] + }.to_json], + 'term_search' => %w[Deeds deeds], + 'term_facet' => ['deeds'] + } + + it 'provides both values in display and search fields and authoritative value in the facet field' do + solr_props = described_class.new(build_claim(json), export_hash, prefix: prefix, + authority_id: authority_id).solr_props + expect(solr_props).to eq(expected) + end + end + + context 'with an unqualified genre (P18) claim' do + json = read_fixture('claims/P18_genre_unqualified.json') + prefix = Transformers.prefix(GENRE_AS_RECORDED) + authority_id = Transformers.authority_id(GENRE_AS_RECORDED) + expected = { + 'term_display' => [{ 'recorded_value' => 'Deeds' }.to_json], + 'term_search' => ['Deeds'], + 'term_facet' => ['Deeds'] + } + + it 'provides the recorded value for display and search and falls back to recorded value for the facet' do + solr_props = described_class.new(build_claim(json), export_hash, prefix: prefix, + authority_id: authority_id).solr_props + expect(solr_props).to eq(expected) + end + end + + context 'with a subject (P19) claim with multiple authority (P20) values' do + json = read_fixture('claims/P19_subject_multiple_qualifier_values.json') + prefix = Transformers.prefix(SUBJECT_AS_RECORDED) + authority_id = Transformers.authority_id(SUBJECT_AS_RECORDED) + expected = { + 'term_display' => [{ + 'recorded_value' => 'Cosmology--Early works to 1800', + 'linked_terms' => [ + { 'label' => 'Cosmology', 'source_url' => 'http://id.worldcat.org/fast/880600' }, + { 'label' => 'Early works', 'source_url' => 'http://id.worldcat.org/fast/1411636' } + ] + }.to_json], + 'term_search' => ['Cosmology--Early works to 1800', 'Cosmology', 'Early works'], + 'term_facet' => ['Cosmology', 'Early works'] + } + + it 'provides all values in display and search fields and authoritative values in the facet field' do + solr_props = described_class.new(build_claim(json), export_hash, prefix: prefix, + authority_id: authority_id).solr_props + expect(solr_props).to eq(expected) + end + end + + context 'with an unqualified subject (P19) claim' do + json = read_fixture('claims/P19_subject_unqualified.json') + prefix = Transformers.prefix(SUBJECT_AS_RECORDED) + authority_id = Transformers.authority_id(SUBJECT_AS_RECORDED) + expected = { + 'term_display' => [{ 'recorded_value' => 'Cosmology--Early works to 1800' }.to_json], + 'term_search' => ['Cosmology--Early works to 1800'], + 'term_facet' => ['Cosmology--Early works to 1800'] + } + + it 'provides recorded value in display and search fields and falls back to recorded value in the facet field' do + solr_props = described_class.new(build_claim(json), export_hash, prefix: prefix, + authority_id: authority_id).solr_props + expect(solr_props).to eq(expected) + end + end + end +end diff --git a/spec/digital_scriptorium/shelfmark_claim_transformer_spec.rb b/spec/digital_scriptorium/shelfmark_claim_transformer_spec.rb index 53663d9..3854496 100644 --- a/spec/digital_scriptorium/shelfmark_claim_transformer_spec.rb +++ b/spec/digital_scriptorium/shelfmark_claim_transformer_spec.rb @@ -1,16 +1,19 @@ # frozen_string_literal: true module DigitalScriptorium + include PropertyId + RSpec.describe ShelfmarkClaimTransformer do context 'with a shelfmark (P8) claim' do json = read_fixture('claims/P8_shelfmark.json') + prefix = Transformers.prefix(SHELFMARK) expected = { 'shelfmark_display' => ['{"recorded_value":"Oversize LJS 110"}'], 'shelfmark_search' => ['Oversize LJS 110'] } it 'provides the recorded shelfmark in the display and search properties' do - solr_props = described_class.new(build_claim(json), export_hash).solr_props + solr_props = described_class.new(build_claim(json), export_hash, prefix: prefix).solr_props expect(solr_props).to eq(expected) end end diff --git a/spec/digital_scriptorium/term_claim_transformer_spec.rb b/spec/digital_scriptorium/term_claim_transformer_spec.rb deleted file mode 100644 index 6a532a0..0000000 --- a/spec/digital_scriptorium/term_claim_transformer_spec.rb +++ /dev/null @@ -1,72 +0,0 @@ -# frozen_string_literal: true - -require 'json' - -module DigitalScriptorium - RSpec.describe TermClaimTransformer do - context 'with a qualified genre (P18) claim' do - json = read_fixture('claims/P18_genre_qualified.json') - expected = { - 'term_display' => [{ - 'recorded_value' => 'Deeds', - 'linked_terms': [{ 'label' => 'deeds', 'source_url' => 'http://vocab.getty.edu/aat/300027249' }] - }.to_json], - 'term_search' => %w[Deeds deeds], - 'term_facet' => ['deeds'] - } - - it 'provides both values in display and search fields and authoritative value in the facet field' do - solr_props = described_class.new(build_claim(json), export_hash).solr_props - expect(solr_props).to eq(expected) - end - end - - context 'with an unqualified genre (P18) claim' do - json = read_fixture('claims/P18_genre_unqualified.json') - expected = { - 'term_display' => [{ 'recorded_value' => 'Deeds' }.to_json], - 'term_search' => ['Deeds'], - 'term_facet' => ['Deeds'] - } - - it 'provides the recorded value for display and search and falls back to recorded value for the facet' do - solr_props = described_class.new(build_claim(json), export_hash).solr_props - expect(solr_props).to eq(expected) - end - end - - context 'with a subject (P19) claim with multiple authority (P20) values' do - json = read_fixture('claims/P19_subject_multiple_qualifier_values.json') - expected = { - 'term_display' => [{ - 'recorded_value' => 'Cosmology--Early works to 1800', - 'linked_terms' => [ - { 'label' => 'Cosmology', 'source_url' => 'http://id.worldcat.org/fast/880600' }, - { 'label' => 'Early works', 'source_url' => 'http://id.worldcat.org/fast/1411636' } - ] - }.to_json], - 'term_search' => ['Cosmology--Early works to 1800', 'Cosmology', 'Early works'], - 'term_facet' => ['Cosmology', 'Early works'] - } - - it 'provides all values in display and search fields and authoritative values in the facet field' do - solr_props = described_class.new(build_claim(json), export_hash).solr_props - expect(solr_props).to eq(expected) - end - end - - context 'with an unqualified subject (P19) claim' do - json = read_fixture('claims/P19_subject_unqualified.json') - expected = { - 'term_display' => [{ 'recorded_value' => 'Cosmology--Early works to 1800' }.to_json], - 'term_search' => ['Cosmology--Early works to 1800'], - 'term_facet' => ['Cosmology--Early works to 1800'] - } - - it 'provides recorded value in display and search fields and falls back to recorded value in the facet field' do - solr_props = described_class.new(build_claim(json), export_hash).solr_props - expect(solr_props).to eq(expected) - end - end - end -end diff --git a/spec/digital_scriptorium/title_claim_transformer_spec.rb b/spec/digital_scriptorium/title_claim_transformer_spec.rb deleted file mode 100644 index 4ab7cf8..0000000 --- a/spec/digital_scriptorium/title_claim_transformer_spec.rb +++ /dev/null @@ -1,56 +0,0 @@ -# frozen_string_literal: true - -require 'json' - -module DigitalScriptorium - RSpec.describe TitleClaimTransformer do - context 'with a title (P10) claim with standard title (P11) and original script (P13) qualifiers' do - json = read_fixture('claims/P10_title_qualified.json') - expected = { - 'title_display' => [{ - 'recorded_value' => 'Kitāb al-Majisṭī', - 'original_script' => 'كتاب المجسطي.', - 'linked_terms': [{ 'label' => 'Almagest' }] - }.to_json], - 'title_search' => ['Kitāb al-Majisṭī', 'كتاب المجسطي.', 'Almagest'], - 'title_facet' => ['Almagest'] - } - - it 'provides all titles in the display and search fields and the standard title in the facet field' do - solr_props = described_class.new(build_claim(json), export_hash).solr_props - expect(solr_props).to eq(expected) - end - end - - context 'with a title (P10) claim with only an original script (P13) qualifier' do - json = read_fixture('claims/P10_title_qualified_original_script_only.json') - expected = { - 'title_display' => [{ - 'recorded_value' => 'Kitāb al-Majisṭī', - 'original_script' => 'كتاب المجسطي.' - }.to_json], - 'title_search' => ['Kitāb al-Majisṭī', 'كتاب المجسطي.'], - 'title_facet' => ['Kitāb al-Majisṭī'] - } - - it 'provides the original script title and falls back to the recorded title in the facet field' do - solr_props = described_class.new(build_claim(json), export_hash).solr_props - expect(solr_props).to eq(expected) - end - end - - context 'with an unqualified title (P10) claim' do - json = read_fixture('claims/P10_title_unqualified.json') - expected = { - 'title_display' => [{ 'recorded_value' => 'Kitāb al-Majisṭī' }.to_json], - 'title_search' => ['Kitāb al-Majisṭī'], - 'title_facet' => ['Kitāb al-Majisṭī'] - } - - it 'falls back to the recorded title in the facet field' do - solr_props = described_class.new(build_claim(json), export_hash).solr_props - expect(solr_props).to eq(expected) - end - end - end -end diff --git a/spec/digital_scriptorium/uniform_title_claim_transformer_spec.rb b/spec/digital_scriptorium/uniform_title_claim_transformer_spec.rb index 85794a5..256df63 100644 --- a/spec/digital_scriptorium/uniform_title_claim_transformer_spec.rb +++ b/spec/digital_scriptorium/uniform_title_claim_transformer_spec.rb @@ -1,15 +1,18 @@ # frozen_string_literal: true module DigitalScriptorium + include PropertyId + RSpec.describe UniformTitleClaimTransformer do context 'with a uniform title (P12) claim' do json = read_fixture('claims/P12_uniform_title.json') + prefix = Transformers.prefix(UNIFORM_TITLE_AS_RECORDED) expected = { 'uniform_title_search' => ['Image du monde.'] } it 'provides the uniform title in the search field only' do - solr_props = described_class.new(build_claim(json), export_hash).solr_props + solr_props = described_class.new(build_claim(json), export_hash, prefix: prefix).solr_props expect(solr_props).to eq(expected) end end