Sha256: e8fea6d8144c9e0f8ce99641944615eee1533a8a4ca5a8a389185ef45bba6cdc

Contents?: true

Size: 1.8 KB

Versions: 1

Compression:

Stored size: 1.8 KB

Contents

# frozen_string_literal: true

module Blacklight
  class FieldRetriever
    # @param [SolrDocument] document
    # @param [Blacklight::Configuration::Field] field_config solr field configuration
    def initialize(document, field_config)
      @document = document
      @field_config = field_config
    end

    attr_reader :document, :field_config

    delegate :field, to: :field_config

    # @return [Array]
    def fetch
      Array.wrap(
        if field_config.highlight
          retrieve_highlight
        elsif field_config.accessor
          retieve_using_accessor
        elsif field_config.values
          retrieve_values
        else
          retrieve_simple
        end
      )
    end

    private

    def retrieve_simple
      # regular document field
      if field_config.default && field_config.default.is_a?(Proc)
        document.fetch(field_config.field, &field_config.default)
      else
        document.fetch(field_config.field, field_config.default)
      end
    end

    def retieve_using_accessor
      # implicit method call
      if field_config.accessor == true
        document.send(field)
      # arity-1 method call (include the field name in the call)
      elsif !field_config.accessor.is_a?(Array) && document.method(field_config.accessor).arity.nonzero?
        document.send(field_config.accessor, field)
      # chained method calls
      else
        Array(field_config.accessor).inject(document) do |result, method|
          result.send(method)
        end
      end
    end

    def retrieve_highlight
      # retrieve the document value from the highlighting response
      document.highlight_field(field_config.field).map(&:html_safe) if document.has_highlight_field? field_config.field
    end

    def retrieve_values
      field_config.values.call(field_config, document)
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
blacklight-7.11.1 app/services/blacklight/field_retriever.rb