Sha256: 55388524ab777e625193ed8373e26cdbdceefd5846516cdb5b770ffd046cbe72

Contents?: true

Size: 1.5 KB

Versions: 9

Compression:

Stored size: 1.5 KB

Contents

# frozen_string_literal: true

module Spotlight
  ##
  # Proxy update requests to Solr and inject spotlight's exhibit
  # specific fields.
  #
  # This is an example of how you could integrate external indexing
  # workflows with exhibit-specific content
  class SolrController < Spotlight::ApplicationController
    include Blacklight::SearchHelper

    before_action :authenticate_user!
    before_action :validate_writable_index!

    load_and_authorize_resource :exhibit, class: Spotlight::Exhibit
    delegate :blacklight_config, to: :current_exhibit

    def update
      authorize! :update_solr, @exhibit

      data = solr_documents

      repository.connection.update params: { commitWithin: 500 }, data: data.to_json, headers: { 'Content-Type' => 'application/json' } unless data.empty?

      if params[:resources_json_upload]
        redirect_back fallback_location: exhibit_resources_path(@exhibit)
      else
        head :ok
      end
    end

    private

    def solr_documents
      req = ActiveSupport::JSON.decode(json_content)

      Array.wrap(req).map do |r|
        blacklight_config.document_model.new(r).to_solr.merge(@exhibit.solr_data).merge(r)
      end
    end

    def json_content
      if params[:resources_json_upload]
        params[:resources_json_upload][:json].read
      else
        request.body.read
      end
    end

    def validate_writable_index!
      return if Spotlight::Engine.config.writable_index

      render plain: 'Spotlight is unable to write to solr', status: 409
    end
  end
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
blacklight-spotlight-2.7.2 app/controllers/spotlight/solr_controller.rb
blacklight-spotlight-2.7.1 app/controllers/spotlight/solr_controller.rb
blacklight-spotlight-2.7.0 app/controllers/spotlight/solr_controller.rb
blacklight-spotlight-2.6.1.1 app/controllers/spotlight/solr_controller.rb
blacklight-spotlight-2.6.1 app/controllers/spotlight/solr_controller.rb
blacklight-spotlight-2.6.0 app/controllers/spotlight/solr_controller.rb
blacklight-spotlight-2.5.2 app/controllers/spotlight/solr_controller.rb
blacklight-spotlight-2.5.1 app/controllers/spotlight/solr_controller.rb
blacklight-spotlight-2.5.0 app/controllers/spotlight/solr_controller.rb