Feature #306 » 0005-moves-text-extraction-to-an-ActiveJob-Job.patch
| app/jobs/extract_fulltext_job.rb | ||
|---|---|---|
| 1 |
class ExtractFulltextJob < ActiveJob::Base |
|
| 2 |
queue_as :text_extraction |
|
| 3 | ||
| 4 |
def perform(attachment_id) |
|
| 5 |
if att = Attachment.find_by_id(attachment_id) and |
|
| 6 |
att.readable? and |
|
| 7 |
text = Redmine::TextExtractor.new(att).text |
|
| 8 | ||
| 9 |
att.update_column :fulltext, text |
|
| 10 |
end |
|
| 11 |
end |
|
| 12 | ||
| 13 |
end |
|
| app/models/attachment.rb | ||
|---|---|---|
| 422 | 422 |
digest.size < 64 ? "MD5" : "SHA256" if digest.present? |
| 423 | 423 |
end |
| 424 | 424 | |
| 425 |
def extract_fulltext |
|
| 426 |
if Redmine::Configuration['enable_fulltext_search'] and |
|
| 427 |
readable? and |
|
| 428 |
text = Redmine::TextExtractor.new(self).text |
|
| 429 | ||
| 430 |
update_column :fulltext, text |
|
| 431 |
end |
|
| 432 |
end |
|
| 433 | ||
| 434 | 425 |
private |
| 435 | 426 | |
| 436 | 427 |
def reuse_existing_file_if_possible |
| ... | ... | |
| 489 | 480 |
time.strftime("%Y/%m")
|
| 490 | 481 |
end |
| 491 | 482 | |
| 483 |
def extract_fulltext |
|
| 484 |
if Redmine::Configuration['enable_fulltext_search'] |
|
| 485 |
ExtractFulltextJob.perform_later(id) |
|
| 486 |
end |
|
| 487 |
end |
|
| 488 | ||
| 489 |
# attempts to extract the fulltext of any attachments that do not have a |
|
| 490 |
# fulltext set currently. This runs inline, does not enqueue any background |
|
| 491 |
# jobs. |
|
| 492 | 492 |
def self.extract_fulltext |
| 493 | 493 |
if Redmine::Configuration['enable_fulltext_search'] |
| 494 |
Attachment.where(fulltext: nil).find_in_batches do |group|
|
|
| 495 |
group.each{|a| a.extract_fulltext}
|
|
| 494 |
Attachment.where(fulltext: nil).pluck(:id).each do |id|
|
|
| 495 |
ExtractFulltextJob.perform_now id
|
|
| 496 | 496 |
end |
| 497 | 497 |
else |
| 498 | 498 |
logger.info "fulltext search is disabled, check configuration.yml" |
| test/jobs/extract_fulltext_job_test.rb | ||
|---|---|---|
| 1 |
require 'test_helper' |
|
| 2 | ||
| 3 |
class ExtractFulltextJobTest < ActiveJob::TestCase |
|
| 4 | ||
| 5 |
def test_should_extract_fulltext |
|
| 6 |
att = nil |
|
| 7 |
Redmine::Configuration.with 'enable_fulltext_search' => false do |
|
| 8 |
att = Attachment.create( |
|
| 9 |
:container => Issue.find(1), |
|
| 10 |
:file => uploaded_test_file("testfile.txt", "text/plain"),
|
|
| 11 |
:author => User.find(1), |
|
| 12 |
:content_type => 'text/plain') |
|
| 13 |
end |
|
| 14 |
att.reload |
|
| 15 |
assert_nil att.fulltext |
|
| 16 | ||
| 17 |
ExtractFulltextJob.perform_now(att.id) |
|
| 18 | ||
| 19 |
att.reload |
|
| 20 |
assert att.fulltext.include?("this is a text file for upload tests\r\nwith multiple lines")
|
|
| 21 |
end |
|
| 22 | ||
| 23 |
end |
|
- « Previous
- 1
- …
- 9
- 10
- 11
- Next »