duke-libraries/ddr-models

View on GitHub
lib/ddr/actions/fixity_check.rb

Summary

Maintainability
A
0 mins
Test Coverage
module Ddr
  module Actions
    class FixityCheck

      # Return result of fixity check - wrapped by a notifier
      def self.execute(object)
        ActiveSupport::Notifications.instrument(Ddr::Notifications::FIXITY_CHECK) do |payload|
          payload[:result] = _execute(object)
        end
      end

      # Return result of fixity check
      def self._execute(object)
        Result.new(pid: object.pid).tap do |r|
          object.datastreams_having_content.each do |dsid, ds|
            r.success &&= ds.dsChecksumValid
            r.results[dsid] = ds.profile
          end
        end
      end

      class Result
        attr_accessor :pid, :success, :results, :checked_at

        def initialize(args={})
          @pid = args[:pid]
          @success = args[:success] || true
          @results = args[:results] || {}
          @checked_at = args[:checked_at] || Time.now.utc
        end
      end

    end
  end
end