class MultiFileProcessor
MultiFileProcessor
processes files in a folder moving to the various states inprogress, done or failed.
Constants
- DEFAULT_DONE_EXT
- DEFAULT_FAILED_EXT
- DEFAULT_INPROGRESS_EXT
Attributes
file_pattern[R]
options[R]
Public Class Methods
new(file_pattern, options = {})
click to toggle source
# File lib/multi-file-processor.rb, line 16 def initialize(file_pattern, options = {}) @file_pattern = file_pattern @options = options end
Public Instance Methods
done_ext()
click to toggle source
# File lib/multi-file-processor.rb, line 69 def done_ext options[:done_ext] || DEFAULT_DONE_EXT end
each() { |inprogress_file| ... }
click to toggle source
# File lib/multi-file-processor.rb, line 21 def each while (inprogress_file = next_inprogress_file) begin yield inprogress_file move_inprogress_file_to_done(inprogress_file) rescue FailedException move_inprogress_file_to_failed(inprogress_file) end end end
failed!()
click to toggle source
# File lib/multi-file-processor.rb, line 61 def failed! raise FailedException, 'file processing failed' end
failed_ext()
click to toggle source
# File lib/multi-file-processor.rb, line 73 def failed_ext options[:failed_ext] || DEFAULT_FAILED_EXT end
inprogress_ext()
click to toggle source
# File lib/multi-file-processor.rb, line 65 def inprogress_ext options[:inprogress_ext] || DEFAULT_INPROGRESS_EXT end
move_inprogress_file_to_done(inprogress_file)
click to toggle source
rubocop:enable Lint/SuppressedException
# File lib/multi-file-processor.rb, line 45 def move_inprogress_file_to_done(inprogress_file) move_inprogress_file_to_ext(inprogress_file, done_ext) end
move_inprogress_file_to_failed(inprogress_file)
click to toggle source
# File lib/multi-file-processor.rb, line 49 def move_inprogress_file_to_failed(inprogress_file) move_inprogress_file_to_ext(inprogress_file, failed_ext) end
next_inprogress_file()
click to toggle source
rubocop:disable Lint/SuppressedException
# File lib/multi-file-processor.rb, line 33 def next_inprogress_file while (file = next_file) begin inprogress_file = "#{file}.#{inprogress_ext}" FileUtils.mv(file, inprogress_file) return inprogress_file rescue Errno::ENOENT end end end
reset_files!()
click to toggle source
# File lib/multi-file-processor.rb, line 53 def reset_files! ext_reg = Regexp.new("\\.(#{inprogress_ext}|#{done_ext}|#{failed_ext})$") Dir.glob("#{file_pattern}.{#{inprogress_ext},#{done_ext},#{failed_ext}}").each do |file| original_file = file.sub(ext_reg, '') FileUtils.mv(file, original_file) end end
Protected Instance Methods
next_file()
click to toggle source
# File lib/multi-file-processor.rb, line 79 def next_file files = all_files return files.sample if options[:sample] files.sort! if options[:sort] files = files.sort_by { |file| File.mtime(file) } if options[:sort_by_mtime] files.first end
Private Instance Methods
all_files()
click to toggle source
# File lib/multi-file-processor.rb, line 90 def all_files Dir.glob(file_pattern) end
move_inprogress_file_to_ext(inprogress_file, ext)
click to toggle source
# File lib/multi-file-processor.rb, line 94 def move_inprogress_file_to_ext(inprogress_file, ext) new_file = inprogress_file.sub(/#{inprogress_ext}$/, ext) FileUtils.mv(inprogress_file, new_file) end