app/controllers/spotlight/solr_controller.rb in blacklight-spotlight-0.23.0 vs app/controllers/spotlight/solr_controller.rb in blacklight-spotlight-0.24.0

- old
+ new

@@ -4,33 +4,52 @@ # 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 - req = ActiveSupport::JSON.decode(request.body.read) + data = solr_documents - docs = Array.wrap(req).map do |r| - blacklight_config.document_model.new(r).to_solr.merge(@exhibit.solr_data).merge(r) + repository.connection.update params: { commitWithin: 500 }, data: data.to_json, headers: { 'Content-Type' => 'application/json' } unless data.empty? + + if respond_to? :head + head :ok + else + render nothing: true end + end - blacklight_solr.update docs + private - render nothing: true + 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 - private + 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 text: 'Spotlight is unable to write to solr', status: 409 + render plain: 'Spotlight is unable to write to solr', status: 409 end end end