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