Sha256: 6e93413b44059b346dda90c49ea324cb17729c2d2020c1b67e1fa64d3a021f5c

Contents?: true

Size: 1.12 KB

Versions: 6

Compression:

Stored size: 1.12 KB

Contents

# frozen_string_literal: true

module ModsDisplay
  ###
  #  Collection class to parse collection data out of Mods relatedItem fields
  ###
  class Collection < Field
    def collection_label(value)
      displayLabel(value) || I18n.t('mods_display.collection')
    end

    def fields
      return_fields = []
      @values.each do |value|
        next unless related_item_is_a_collection?(value)

        return_fields << ModsDisplay::Values.new(
          label: collection_label(value),
          values: [element_text(value.titleInfo)]
        )
      end
      collapse_fields(return_fields)
    end

    private

    def related_item_is_a_collection?(value)
      value.respond_to?(:titleInfo) && resource_type_is_collection?(value)
    end

    def resource_type_is_collection?(value)
      return false unless value.respond_to?(:typeOfResource)
      return false unless value.typeOfResource.attributes.length.positive?

      value.typeOfResource.attributes.length.positive? &&
        value.typeOfResource.attributes.first.key?('collection') &&
        value.typeOfResource.attributes.first['collection'].value == 'yes'
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
mods_display-1.5.0 lib/mods_display/fields/collection.rb
mods_display-1.4.0 lib/mods_display/fields/collection.rb
mods_display-1.3.5 lib/mods_display/fields/collection.rb
mods_display-1.3.4 lib/mods_display/fields/collection.rb
mods_display-1.3.3 lib/mods_display/fields/collection.rb
mods_display-1.3.2 lib/mods_display/fields/collection.rb