class Libis::Ingester::DirCollector
Protected Instance Methods
add(item, file)
click to toggle source
# File lib/libis/ingester/tasks/dir_collector.rb, line 118 def add(item, file) @counter ||= 0 child = nil if File.directory?(file) case parameter(:subdirs).to_s.downcase when 'recursive' collect(item, file) when 'collection' child = Libis::Ingester::DirCollection.new child.filename = file debug 'Created Collection item `%s`', child.name item.add_item(child) collect(child, file) when 'complex' child = Libis::Ingester::DirDivision.new child.filename = file debug 'Created Division item `%s`', child.name item.add_item(child) collect(child, file) when 'leaf' if is_leaf_dir?(file) child = Libis::Ingester::DirDivision.new child.filename = file debug 'Created Division item `%s`', child.name item.add_item(child) collect(child, file) end else info "Ignoring subdir #{file}." end elsif File.file?(file) child = Libis::Ingester::FileItem.new child.filename = file debug 'Created File item `%s`', child.name @counter += 1 item.add_item(child) end if @counter > parameter(:file_limit) fatal_error 'Number of files found exceeds limit (%d). Consider splitting into separate runs or raise limit.', item.get_run, parameter(:file_limit) raise Libis::WorkflowAbort, 'Number of files exceeds preset limit.' end return unless child child.save! item.get_run.status_progress(self.namepath, @counter) end
add_files(item, dir, list)
click to toggle source
# File lib/libis/ingester/tasks/dir_collector.rb, line 92 def add_files(item, dir, list) reg = parameter(:selection) reg = (reg and !reg.empty?) ? Regexp.new(reg) : nil ignore = parameter(:ignore) && Regexp.new(parameter(:ignore)) list = Naturally.sort_by_block(list) {|x| x.gsub('.', '.0.').gsub('_', '.')} if parameter(:sort) list.each do |file| file.strip! next if file =~ /^\.{1,2}$/ path = File.join(dir, file) if reg && File.file?(path) && !((file =~ reg) || (path =~ reg)) next if ignore and (file =~ ignore || path =~ ignore) warn "Found file '#{File.basename(path)}' in folder '#{File.dirname(path)}' that did not match the selection regex.", item next end unless File.exists?(path) warn "File '#{path}' not found." next end unless File.readable?(path) warn "Skipping file '#{path}' since it cannot be read." next end add(item, path) end end
collect(item, dir)
click to toggle source
# File lib/libis/ingester/tasks/dir_collector.rb, line 86 def collect(item, dir) debug 'Collecting files in \'%s\'', dir add_files(item, dir, Dir.entries(dir)) item.save! end
is_leaf_dir?(dir)
click to toggle source
# File lib/libis/ingester/tasks/dir_collector.rb, line 165 def is_leaf_dir?(dir) ignore = parameter(:ignore) && Regexp.new(parameter(:ignore)) Dir.entries(dir).reject do |x| %w'. ..'.include?(x) || File.file?(File.join(dir, x)) || (ignore && x =~ ignore) end.empty? end
process(item)
click to toggle source
# File lib/libis/ingester/tasks/dir_collector.rb, line 78 def process(item) if item.is_a? ::Libis::Ingester::Run collect(item, parameter(:location)) elsif item.is_a? Libis::Workflow::DirItem collect(item, item.filepath) end end