11module 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
5952end
0 commit comments