Skip to content

Commit

Permalink
Reconsolidate some claim transformers
Browse files Browse the repository at this point in the history
  • Loading branch information
mdholloway committed Jan 17, 2025
1 parent d48bb84 commit f7ed47f
Show file tree
Hide file tree
Showing 36 changed files with 438 additions and 464 deletions.
92 changes: 64 additions & 28 deletions lib/digital_scriptorium/transformers.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down

This file was deleted.

This file was deleted.

15 changes: 0 additions & 15 deletions lib/digital_scriptorium/transformers/language_claim_transformer.rb

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
15 changes: 0 additions & 15 deletions lib/digital_scriptorium/transformers/material_claim_transformer.rb

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
15 changes: 0 additions & 15 deletions lib/digital_scriptorium/transformers/place_claim_transformer.rb

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
15 changes: 0 additions & 15 deletions lib/digital_scriptorium/transformers/term_claim_transformer.rb

This file was deleted.

15 changes: 0 additions & 15 deletions lib/digital_scriptorium/transformers/title_claim_transformer.rb

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
@@ -1,17 +1,20 @@
# 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."}'
]
}

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
Expand Down
Loading

0 comments on commit f7ed47f

Please sign in to comment.