Sha256: 07706237bb34efbbb274f940a37e3b8d5f19f8c8e7b70727e034bb37e9d69f4e

Contents?: true

Size: 1.77 KB

Versions: 26

Compression:

Stored size: 1.77 KB

Contents

# frozen_string_literal: true
module Blacklight::Document
  module SemanticFields
    extend ActiveSupport::Concern

    class_methods do
      # Class-level method for accessing/setting semantic mappings
      # for solr stored fields. Can be set by local app, key is
      # a symbol for a semantic, value is a solr _stored_ field.
      #
      # Stored field can be single or multi-value. In some cases
      # clients may only use the first value from a multi-value field.
      #
      # Currently documented semantic tokens, not all may be
      # used by core BL, but some may be used by plugins present
      # or future.
      # :title, :author, :year, :language => User-presentable strings.
      def field_semantics
        @field_semantics ||= {}
      end
    end

    # Returns a hash keyed by semantic tokens, value is an array of
    # strings. (Array to handle multi-value fields). If no value(s)
    # available, empty array is returned.
    #
    # Default implementation here uses field_semantics
    # to just take values from Solr stored fields.
    # Extensions can over-ride this method to provide better/different lookup,
    # but extensions should call super and modify hash returned, to avoid
    # unintentionally erasing values provided by other extensions.
    def to_semantic_values
      @semantic_value_hash ||= self.class.field_semantics.each_with_object(Hash.new([])) do |(key, field_names), hash|
        ##
        # Handles single string field_name or an array of field_names
        value = Array.wrap(field_names).map { |field_name| self[field_name] }.flatten.compact

        # Make single and multi-values all arrays, so clients
        # don't have to know.
        hash[key] = value unless value.empty?
      end

      @semantic_value_hash ||= {}
    end
  end
end

Version data entries

26 entries across 26 versions & 2 rubygems

Version Path
blacklight-7.38.0 app/models/concerns/blacklight/document/semantic_fields.rb
blacklight-spotlight-3.6.0.beta8 vendor/bundle/ruby/3.2.0/gems/blacklight-7.37.0/app/models/concerns/blacklight/document/semantic_fields.rb
blacklight-7.37.0 app/models/concerns/blacklight/document/semantic_fields.rb
blacklight-7.36.2 app/models/concerns/blacklight/document/semantic_fields.rb
blacklight-7.36.1 app/models/concerns/blacklight/document/semantic_fields.rb
blacklight-7.36.0 app/models/concerns/blacklight/document/semantic_fields.rb
blacklight-7.35.0 app/models/concerns/blacklight/document/semantic_fields.rb
blacklight-7.34.0 app/models/concerns/blacklight/document/semantic_fields.rb
blacklight-7.33.1 app/models/concerns/blacklight/document/semantic_fields.rb
blacklight-7.33.0 app/models/concerns/blacklight/document/semantic_fields.rb
blacklight-7.32.0 app/models/concerns/blacklight/document/semantic_fields.rb
blacklight-7.31.0 app/models/concerns/blacklight/document/semantic_fields.rb
blacklight-7.30.0 app/models/concerns/blacklight/document/semantic_fields.rb
blacklight-7.29.0 app/models/concerns/blacklight/document/semantic_fields.rb
blacklight-7.28.0 app/models/concerns/blacklight/document/semantic_fields.rb
blacklight-7.27.1 app/models/concerns/blacklight/document/semantic_fields.rb
blacklight-7.27.0 app/models/concerns/blacklight/document/semantic_fields.rb
blacklight-7.26.1 app/models/concerns/blacklight/document/semantic_fields.rb
blacklight-7.26.0 app/models/concerns/blacklight/document/semantic_fields.rb
blacklight-7.25.3 app/models/concerns/blacklight/document/semantic_fields.rb