Sha256: 4c34f9b2d58344036e8020c45a496a3710c74602ebb0409f7e9e37cc13b309a6

Contents?: true

Size: 1.98 KB

Versions: 29

Compression:

Stored size: 1.98 KB

Contents

# frozen_string_literal: true
module Hyrax
  module Arkivo
    CREATOR_TYPES = ['author', 'interviewer', 'director', 'scriptwriter',
                     'inventor', 'composer', 'cartographer', 'programmer', 'artist',
                     'bookAuthor'].freeze

    CONTRIBUTOR_TYPES = ['contributor', 'editor', 'translator', 'seriesEditor',
                         'interviewee', 'producer', 'castMember', 'sponsor', 'counsel',
                         'attorneyAgent', 'recipient', 'performer', 'wordsBy', 'commenter',
                         'presenter', 'guest', 'podcaster', 'reviewedAuthor', 'cosponsor'].freeze

    class MetadataMunger
      def initialize(metadata)
        @metadata = metadata
        @munged = {}
      end

      # @return [Hash]
      def call
        normalize_keys_and_values
        rename_key(from: 'url', to: 'related_url')
        rename_key(from: 'tags', to: 'keyword')
        extract_creator_and_contributor_from_creators
        @munged
      end

      private

      def normalize_keys_and_values
        # First, normalize camelCase symbols to underscore strings
        @metadata.each do |key, value|
          @munged[key.to_s.underscore] = Array.wrap(value)
        end
      end

      def rename_key(from:, to:)
        @munged[to] = @munged.delete(from) if @munged.key?(from)
      end

      def extract_creator_and_contributor_from_creators
        creator_names = []
        contributor_names = []
        @munged['creators'].each do |entry|
          entry['name'] ||= "#{entry.delete('lastName')}, #{entry.delete('firstName')}".strip
          creator_names << entry['name'] if Hyrax::Arkivo::CREATOR_TYPES.include?(entry['creatorType'])
          contributor_names << entry['name'] if Hyrax::Arkivo::CONTRIBUTOR_TYPES.include?(entry['creatorType'])
        end
        @munged['creator'] = creator_names if creator_names.present?
        @munged['contributor'] = contributor_names if contributor_names.present?
        @munged.delete('creators')
      end
    end
  end
end

Version data entries

29 entries across 29 versions & 1 rubygems

Version Path
hyrax-5.1.0.pre.beta1 lib/hyrax/arkivo/metadata_munger.rb
hyrax-5.0.4 lib/hyrax/arkivo/metadata_munger.rb
hyrax-5.0.3 lib/hyrax/arkivo/metadata_munger.rb
hyrax-5.0.2 lib/hyrax/arkivo/metadata_munger.rb
hyrax-5.0.1 lib/hyrax/arkivo/metadata_munger.rb
hyrax-5.0.0 lib/hyrax/arkivo/metadata_munger.rb
hyrax-5.0.0.rc3 lib/hyrax/arkivo/metadata_munger.rb
hyrax-5.0.0.rc2 lib/hyrax/arkivo/metadata_munger.rb
hyrax-5.0.0.rc1 lib/hyrax/arkivo/metadata_munger.rb
hyrax-3.6.0 lib/hyrax/arkivo/metadata_munger.rb
hyrax-4.0.0 lib/hyrax/arkivo/metadata_munger.rb
hyrax-4.0.0.rc3 lib/hyrax/arkivo/metadata_munger.rb
hyrax-4.0.0.rc2 lib/hyrax/arkivo/metadata_munger.rb
hyrax-4.0.0.rc1 lib/hyrax/arkivo/metadata_munger.rb
hyrax-3.5.0 lib/hyrax/arkivo/metadata_munger.rb
hyrax-4.0.0.beta2 lib/hyrax/arkivo/metadata_munger.rb
hyrax-3.4.2 lib/hyrax/arkivo/metadata_munger.rb
hyrax-4.0.0.beta1 lib/hyrax/arkivo/metadata_munger.rb
hyrax-3.4.1 lib/hyrax/arkivo/metadata_munger.rb
hyrax-3.4.0 lib/hyrax/arkivo/metadata_munger.rb