Method: OcflTools::OcflValidator#verify_directory

Defined in:
lib/ocfl_tools/ocfl_validator.rb

#verify_directory(version) ⇒ OcflTools::OcflResults

We may also want to only verify a specific directory, not the entire object. For example, if we’ve just added a new version, we might want to just check those files and not the rest of the object (esp. if it has some very large version directories).

Parameters:

  • version (Integer)

    directory to verify

Returns:



604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
# File 'lib/ocfl_tools/ocfl_validator.rb', line 604

def verify_directory(version)
  # start by getting version format and directories.
  get_version_format # sets @version_format, one way or another.

  version_name = @version_format % version.to_i
  # Make sure this directory actually exists.
  unless File.directory?("#{@ocfl_object_root}/#{version_name}")
    raise "Requested version directory doesn't exist!"
  end

  # OK, now we need an inventory.json to tell use what the contentDirectory should be.
  if File.exist?("#{ocfl_object_root}/#{version_name}/inventory.json")
    my_content_dir = OcflTools::Utils::Inventory.get_contentDirectory("#{ocfl_object_root}/#{version_name}/inventory.json")
    @inventory     = OcflTools::OcflInventory.new.from_file("#{ocfl_object_root}/#{version_name}/inventory.json")
  else
    my_content_dir = OcflTools::Utils::Inventory.get_contentDirectory("#{ocfl_object_root}/inventory.json")
    @inventory     = OcflTools::OcflInventory.new.from_file("#{ocfl_object_root}/inventory.json")
  end

  # Get a list of fully-resolvable files for this version directory from disk.
  my_files_on_disk = OcflTools::Utils::Files.get_version_dir_files(@ocfl_object_root, version)

  # Now process my_inventory.manifest
  # Flip and invert  it.
  manifest_checksums = OcflTools::Utils::Files.invert_and_expand_and_prepend(@inventory.manifest, @ocfl_object_root)

  # Now we need to trim manifest_checksums to the stuff that only matches
  # ocfl_object_root/version_string/content_dir
  filtered_checksums = {}
  manifest_checksums.each do |file, digest|
    if file =~ %r{^#{ocfl_object_root}/#{version_name}/#{my_content_dir}}
      filtered_checksums[file] = digest
    end
  end

  # Now generate checksums for the files we found on disk, and Hash them.
  disk_checksums = OcflTools::Utils::Files.create_digests(my_files_on_disk, @inventory.digestAlgorithm)

  # Finally! Pass them to checksum checker.
  OcflTools::Utils.compare_hash_checksums(disk_checksums: disk_checksums, inventory_checksums: filtered_checksums, results: @my_results, context: "verify_directory #{version_name}")
end