Sha256: 8926d1b048dc7afd253bb529017d8c565d36ddb6d7ebc85e7272fb17ef7a650c

Contents?: true

Size: 1.69 KB

Versions: 31

Compression:

Stored size: 1.69 KB

Contents

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
          retrieve_simple
        end
      )
    end

    private

      def retrieve_simple
        # regular document field
        if field_config.default and 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
  end
end

Version data entries

31 entries across 31 versions & 1 rubygems

Version Path
blacklight-6.25.0 app/services/blacklight/field_retriever.rb
blacklight-6.24.0 app/services/blacklight/field_retriever.rb
blacklight-6.23.0 app/services/blacklight/field_retriever.rb
blacklight-6.22.0 app/services/blacklight/field_retriever.rb
blacklight-6.21.0 app/services/blacklight/field_retriever.rb
blacklight-6.20.0 app/services/blacklight/field_retriever.rb
blacklight-6.19.2 app/services/blacklight/field_retriever.rb
blacklight-6.19.1 app/services/blacklight/field_retriever.rb
blacklight-6.19.0 app/services/blacklight/field_retriever.rb
blacklight-6.18.0 app/services/blacklight/field_retriever.rb
blacklight-6.17.0 app/services/blacklight/field_retriever.rb
blacklight-6.16.0 app/services/blacklight/field_retriever.rb
blacklight-6.15.0 app/services/blacklight/field_retriever.rb
blacklight-6.14.1 app/services/blacklight/field_retriever.rb
blacklight-6.14.0 app/services/blacklight/field_retriever.rb
blacklight-6.13.0 app/services/blacklight/field_retriever.rb
blacklight-6.12.0 app/services/blacklight/field_retriever.rb
blacklight-6.11.2 app/services/blacklight/field_retriever.rb
blacklight-6.11.1 app/services/blacklight/field_retriever.rb
blacklight-6.11.0 app/services/blacklight/field_retriever.rb