module SunspotOffline::RSolr::Client
Public Instance Methods
add(documents, opts = {})
click to toggle source
Calls superclass method
# File lib/sunspot_offline/rsolr/client.rb, line 4 def add(documents, opts = {}) wrap_request( deletion: false, documents: -> { group_documents(documents.map { |doc| doc.field_by_name(:id).value }) } ) { super } end
delete_by_id(id, opts = {})
click to toggle source
Calls superclass method
# File lib/sunspot_offline/rsolr/client.rb, line 11 def delete_by_id(id, opts = {}) wrap_request(deletion: true, documents: -> { group_documents(Array(id)) }) { super } end
delete_by_query(query, opts = {})
click to toggle source
Calls superclass method
# File lib/sunspot_offline/rsolr/client.rb, line 15 def delete_by_query(query, opts = {}) wrap_request(deletion: true, documents: -> { removal_documents(query) }) { super } end
Private Instance Methods
fail_over_job?(job_name)
click to toggle source
# File lib/sunspot_offline/rsolr/client.rb, line 37 def fail_over_job?(job_name) [SunspotOffline.configuration.index_job.name, SunspotOffline.configuration.removal_job.name].include?(job_name) end
group_documents(documents)
click to toggle source
# File lib/sunspot_offline/rsolr/client.rb, line 41 def group_documents(documents) documents .map { |id_text| id_text.split(' ') } .group_by(&:first) .map { |klass, list| [klass, list.map(&:last)] } end
raise_exception?()
click to toggle source
# File lib/sunspot_offline/rsolr/client.rb, line 32 def raise_exception? sidekiq_job = SunspotOffline::Sidekiq::CurrentJobMiddleware.get !sidekiq_job.nil? && (fail_over_job?(sidekiq_job) || SunspotOffline.filter_sidekiq_job?(sidekiq_job)) end
removal_documents(query)
click to toggle source
# File lib/sunspot_offline/rsolr/client.rb, line 48 def removal_documents(query) [query == '*:*' ? [nil, nil] : [query.split(':').last, nil]] end
wrap_request(deletion:, documents:) { || ... }
click to toggle source
# File lib/sunspot_offline/rsolr/client.rb, line 21 def wrap_request(deletion:, documents:) yield rescue StandardError => ex raise ex if SunspotOffline.disabled? || raise_exception? job = deletion ? SunspotOffline.configuration.removal_job : SunspotOffline.configuration.index_job perform_at = Time.zone.now + SunspotOffline.configuration.retry_delay documents.call.each { |klass, list| job.perform_at(perform_at, klass, list) } SunspotOffline.on_solr_error(ex) end