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