class Ddr::IngestTools::DdrRdrMigrator::FilePathAdder

Attributes

checksum_file[R]
files[R]
import_checksums[R]
logger[R]
manifest[R]

Public Class Methods

new(checksum_file:, files:, logger: nil, manifest:) click to toggle source
# File lib/ddr/ingesttools/ddr_rdr_migrator/file_path_adder.rb, line 6
def initialize(checksum_file:, files:, logger: nil, manifest:)
  @checksum_file = checksum_file
  @import_checksums = {}
  @files = files
  @logger = logger || Logger.new(STDOUT)
  @manifest = manifest
end

Public Instance Methods

call() click to toggle source
# File lib/ddr/ingesttools/ddr_rdr_migrator/file_path_adder.rb, line 14
def call
  bag_checksums
  scan_files(files)
  update_manifest
  write_checksums
  manifest
end

Private Instance Methods

add_file_column() click to toggle source
# File lib/ddr/ingesttools/ddr_rdr_migrator/file_path_adder.rb, line 77
def add_file_column
  manifest.each do |row|
    row['file'] = nil
  end
end
add_file_column_values() click to toggle source
# File lib/ddr/ingesttools/ddr_rdr_migrator/file_path_adder.rb, line 83
def add_file_column_values
  item_files.each do |k,v|
    row = manifest.find { |row| row['pid'] == k }
    row['file'] = v.join('|')
  end
end
add_to_checksums(partial_path) click to toggle source
# File lib/ddr/ingesttools/ddr_rdr_migrator/file_path_adder.rb, line 48
def add_to_checksums(partial_path)
  checksum = bag_checksums[partial_path]
  import_checksums[File.join(files,  partial_path)] = checksum
end
add_to_item_files(partial_path) click to toggle source
# File lib/ddr/ingesttools/ddr_rdr_migrator/file_path_adder.rb, line 53
def add_to_item_files(partial_path)
  item_pid = item_pid(partial_path)
  item_files[item_pid] ||= []
  item_files[item_pid] << partial_path
end
bag_checksums() click to toggle source
# File lib/ddr/ingesttools/ddr_rdr_migrator/file_path_adder.rb, line 98
def bag_checksums
  @bag_checksums ||= load_bag_checksums
end
file_partial_path(file_loc) click to toggle source
# File lib/ddr/ingesttools/ddr_rdr_migrator/file_path_adder.rb, line 59
def file_partial_path(file_loc)
  file_loc.sub(files, '').sub(/^#{File::SEPARATOR}/, '')
end
handle_file(file_loc) click to toggle source
# File lib/ddr/ingesttools/ddr_rdr_migrator/file_path_adder.rb, line 40
def handle_file(file_loc)
  partial_path = file_partial_path(file_loc)
  if payload_file?(partial_path)
    add_to_item_files(partial_path)
    add_to_checksums(partial_path)
  end
end
item_files() click to toggle source
# File lib/ddr/ingesttools/ddr_rdr_migrator/file_path_adder.rb, line 24
def item_files
  @item_files ||= {}
end
item_pid(partial_path) click to toggle source
# File lib/ddr/ingesttools/ddr_rdr_migrator/file_path_adder.rb, line 67
def item_pid(partial_path)
  munged_pid = partial_path.split(File::SEPARATOR)[-2]
  munged_pid.sub('_', ':')
end
load_bag_checksums() click to toggle source
# File lib/ddr/ingesttools/ddr_rdr_migrator/file_path_adder.rb, line 102
def load_bag_checksums
  checksums = {}
  bag_checksum_file = File.join(files, 'manifest-sha1.txt')
  File.readlines(bag_checksum_file).each do |line|
    sum, path = line.chomp.split
    checksums[path] = sum
  end
  checksums
end
payload_file?(partial_path) click to toggle source
# File lib/ddr/ingesttools/ddr_rdr_migrator/file_path_adder.rb, line 63
def payload_file?(partial_path)
  partial_path.start_with?(File.join('data', 'objects')) && !File.basename(partial_path).start_with?('.')
end
scan_files(dirpath) click to toggle source
# File lib/ddr/ingesttools/ddr_rdr_migrator/file_path_adder.rb, line 28
def scan_files(dirpath)
  Dir.foreach(dirpath).each do |entry|
    next if [ '.', '..' ].include?(entry)
    file_loc = File.join(dirpath, entry)
    if File.directory?(file_loc)
      scan_files(file_loc)
    else
      handle_file(file_loc)
    end
  end
end
update_manifest() click to toggle source
# File lib/ddr/ingesttools/ddr_rdr_migrator/file_path_adder.rb, line 72
def update_manifest
  add_file_column
  add_file_column_values
end
write_checksums() click to toggle source
# File lib/ddr/ingesttools/ddr_rdr_migrator/file_path_adder.rb, line 90
def write_checksums
  File.open(checksum_file, 'w') do |f|
    import_checksums.each do |k,v|
      f.puts "#{v}  #{k}"
    end
  end
end