aboutsummaryrefslogtreecommitdiffstats
path: root/vendor
diff options
context:
space:
mode:
authorLouise Crow <louise.crow@gmail.com>2013-09-17 17:09:11 +0100
committerLouise Crow <louise.crow@gmail.com>2013-09-17 17:09:11 +0100
commit1accd9f2f86022f90f848b39182570d1613eb6be (patch)
treee6580848375b9e7938292cfb2177af44c3838825 /vendor
parent9483790d6cb0d3a1abc1b9d2ec50dc51e3f95bf6 (diff)
parent3ad489e49c0dc4b55bd5e980fd8f8020232e6c9f (diff)
Merge branch 'feature/issue-555-fix' into rails-3-develop
Diffstat (limited to 'vendor')
-rw-r--r--vendor/plugins/acts_as_xapian/lib/acts_as_xapian.rb43
1 files changed, 23 insertions, 20 deletions
diff --git a/vendor/plugins/acts_as_xapian/lib/acts_as_xapian.rb b/vendor/plugins/acts_as_xapian/lib/acts_as_xapian.rb
index f2cd1075c..fcf7a778d 100644
--- a/vendor/plugins/acts_as_xapian/lib/acts_as_xapian.rb
+++ b/vendor/plugins/acts_as_xapian/lib/acts_as_xapian.rb
@@ -913,16 +913,11 @@ module ActsAsXapian
# Used to mark changes needed by batch indexer
def xapian_mark_needs_index
- model = self.class.base_class.to_s
- model_id = self.id
- ActiveRecord::Base.transaction do
- found = ActsAsXapianJob.delete_all([ "model = ? and model_id = ?", model, model_id])
- job = ActsAsXapianJob.new
- job.model = model
- job.model_id = model_id
- job.action = 'update'
- job.save!
- end
+ xapian_create_job('update', self.class.base_class.to_s, self.id)
+ end
+
+ def xapian_mark_needs_destroy
+ xapian_create_job('destroy', self.class.base_class.to_s, self.id)
end
# Allow reindexing to be skipped if a flag is set
@@ -931,18 +926,26 @@ module ActsAsXapian
xapian_mark_needs_index
end
- def xapian_mark_needs_destroy
- model = self.class.base_class.to_s
- model_id = self.id
- ActiveRecord::Base.transaction do
- found = ActsAsXapianJob.delete_all([ "model = ? and model_id = ?", model, model_id])
- job = ActsAsXapianJob.new
- job.model = model
- job.model_id = model_id
- job.action = 'destroy'
- job.save!
+ def xapian_create_job(action, model, model_id)
+ begin
+ ActiveRecord::Base.transaction do
+ ActsAsXapianJob.delete_all([ "model = ? and model_id = ?", model, model_id])
+ xapian_before_create_job_hook(action, model, model_id)
+ ActsAsXapianJob.create!(:model => model,
+ :model_id => model_id,
+ :action => action)
+ end
+ rescue ActiveRecord::RecordNotUnique => e
+ # Given the error handling in ActsAsXapian::update_index, we can just fail silently if
+ # another process has inserted an acts_as_xapian_jobs record for this model.
+ raise unless (e.message =~ /duplicate key value violates unique constraint "index_acts_as_xapian_jobs_on_model_and_model_id"/)
end
end
+
+ # A hook method that can be used in tests to simulate e.g. an external process inserting a record
+ def xapian_before_create_job_hook(action, model, model_id)
+ end
+
end
######################################################################