Skip to content

Commit 157fdd7

Browse files
authored
Merge pull request #702 from IU-Libraries-Joint-Development/essi-2156_prederivation_for_multisegment_filename_r1
[ESSI-2156] check multiple levels of possible prederivatives folder name
2 parents c2d2ba5 + 9c7ea17 commit 157fdd7

2 files changed

Lines changed: 22 additions & 27 deletions

File tree

Lines changed: 18 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,17 @@
11
module PrederivationHelper
22

3-
# note: this returns "" if the filename contains no "-" characters
4-
def work_root_name(filename)
5-
filename.split('/').last.split('-')[0..-2].join('-')
3+
def derivatives_folders_for(filename, type: '', include_ungrouped: true)
4+
segments = filename.split('-')[0..-2] # drop final segment as file-specific
5+
folders = (1..segments.size).map { |i| segments[0..-i].join('-') }
6+
folders << 'ungrouped' if include_ungrouped
7+
folders.map { |folder| derivatives_folder_for(folder, type) }.uniq
68
end
79

8-
def derivatives_folder_for(filename, type: '')
9-
return false unless root_derivatives_folder
10-
folders = Array.wrap(root_derivatives_folder)
11-
folders << type.downcase if path_includes_type?
12-
folders << work_root_name(filename) if path_includes_work_root_name?
13-
File.join(folders)
10+
def derivatives_folder_for(folder, type)
11+
segments = [root_derivatives_folder]
12+
segments << type.downcase if path_includes_type?
13+
segments << folder if path_includes_work_root_name?
14+
File.join(segments)
1415
end
1516

1617
def pre_derived_file(filename, type: '', suffix: 'xml')
@@ -20,20 +21,17 @@ def pre_derived_file(filename, type: '', suffix: 'xml')
2021
pre_derived_filename = "#{File.basename(filename, '.*')}.#{suffix}"
2122
end
2223

23-
Rails.logger.info "Checking for #{pre_derived_filename} in #{type} folders."
24+
folders = derivatives_folders_for(filename, type: type)
25+
Rails.logger.info "Checking for #{pre_derived_filename} in #{type} folders: #{folders.join(', ')}"
26+
pre_derived_file = folders.select { |f| File.exist?(f) }.first
2427

25-
ungrouped_filename = File.join(root_derivatives_folder, type.downcase, 'ungrouped', pre_derived_filename)
26-
if ungrouped_file_path?(ungrouped_filename)
27-
pre_derived_file = ungrouped_filename
28+
if pre_derived_file
29+
Rails.logger.info "Using #{pre_derived_file} as #{type} file"
30+
pre_derived_file
2831
else
29-
derivatives_folder = derivatives_folder_for(filename, type: type)
30-
pre_derived_file = File.join(derivatives_folder, pre_derived_filename)
32+
Rails.logger.info "No pre-derived file found"
33+
false
3134
end
32-
33-
return false unless File.exist?(pre_derived_file)
34-
35-
Rails.logger.info "Using #{pre_derived_file} as #{type} file."
36-
pre_derived_file
3735
end
3836

3937
def root_derivatives_folder
@@ -51,9 +49,4 @@ def path_includes_work_root_name?
5149
def file_includes_type?
5250
ESSI.config.dig(:essi, :derivatives_type_suffix)
5351
end
54-
55-
def ungrouped_file_path?(ungrouped_filename)
56-
return false unless File.exist?(ungrouped_filename)
57-
true
58-
end
5952
end

spec/services/hyrax/derivative_service_spec.rb

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,12 +67,14 @@
6767
fsd_service.create_derivatives(image_file)
6868
end
6969
# simulate action of stubbed OCRRunner#create via Processor::OCR#encode_file
70+
let(:folders) { Processors::OCR.derivatives_folders_for(File.basename(image_file), type: 'ocr').join(', ') }
7071
it 'skips OCR generation in OCR Processor' do
71-
expect(Rails.logger).to receive(:info).with("Checking for world-ocr.xml in OCR folders.")
72+
expect(Rails.logger).to receive(:info).with("Checking for world-ocr.xml in OCR folders: #{folders}")
7273
expect(Processors::OCR).to receive(:skip_derivatives?).and_return(true)
74+
expect(Rails.logger).to receive(:info).with("No pre-derived file found")
7375
expect(Rails.logger).to receive(:info).with("No pre-derived file provided; skipping OCR generation")
7476
Processors::OCR.new(image_file,
75-
{ label: "test123-alto.xml",
77+
{ label: 'test123-alto.xml',
7678
mime_type: 'text/html; charset=utf-8',
7779
format: 'xml',
7880
container: 'extracted_text',

0 commit comments

Comments
 (0)