Sha256: 313ef66b6535b4fd9fade6644e5130d610c85af47db363b5ff3f432576d247bc

Contents?: true

Size: 1.42 KB

Versions: 2

Compression:

Stored size: 1.42 KB

Contents

module FedoraMigrate
  class MigrationReport
    attr_accessor :path, :results

    DEFAULT_PATH = "migration_report".freeze

    def initialize(path = nil)
      @path = path.nil? ? DEFAULT_PATH : path
      FileUtils.mkdir_p(@path)
      reload
    end

    def reload
      @results = load_results_from_directory
    end

    delegate :empty?, to: :results

    def failed_objects
      results.keys.map { |k| k unless results[k]["status"] }.compact
    end

    def failures
      failed_objects.count
    end

    def total_objects
      results.keys.count
    end

    def report_failures(output = '')
      failed_objects.each do |k|
        output << "#{k}:\n\tobject: #{results[k]['object']}\n\trelationships: #{results[k]['relationships']}\n\n"
      end
      output
    end

    # Receives and individual report and writes it to the MigrationReport directory
    def save(pid, report)
      file = File.join(path, file_from_pid(pid))
      json = JSON.load(report.to_json)
      File.write(file, JSON.pretty_generate(json))
    end

    private

      def load_results_from_directory(assembled = {})
        Dir.glob(File.join(path, "*.json")).each do |file|
          assembled[pid_from_file(file)] = JSON.parse(File.read(file))
        end
        assembled
      end

      def pid_from_file(file)
        File.basename(file, ".*").tr('_', ":")
      end

      def file_from_pid(pid)
        pid.tr(':', "_") + ".json"
      end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
fedora-migrate-0.5.0 lib/fedora_migrate/migration_report.rb
fedora-migrate-0.4.0 lib/fedora_migrate/migration_report.rb