europeana/europeana-blacklight

View on GitHub
lib/europeana/blacklight/search_builder/more_like_this.rb

Summary

Maintainability
A
0 mins
Test Coverage
# frozen_string_literal: true

module Europeana
  module Blacklight
    class SearchBuilder
      ##
      # Search builder methods for more like this queries
      module MoreLikeThis
        extend ActiveSupport::Concern

        included do
          default_processor_chain.unshift :add_mlt_to_api
        end

        def add_mlt_to_api(api_parameters)
          return unless blacklight_params[:mlt]
          repository = blacklight_config.repository_class.new(blacklight_config)
          if blacklight_params[:mlt].respond_to?(:more_like_this_query)
            doc = blacklight_params[:mlt]
          else
            doc_response = repository.find(blacklight_params[:mlt])
            doc = doc_response.documents.first
          end
          query = doc.more_like_this_query(blacklight_params[:mltf])
          append_to_query_param(api_parameters, query)
        end
      end
    end
  end
end