Sha256: e722728322806e13df96b85ba05553fccdaebba07cf8d553ee228298c1815bcc

Contents?: true

Size: 1.41 KB

Versions: 1

Compression:

Stored size: 1.41 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

    def empty?
      results.empty?
    end

    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 = String.new
      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 = Hash.new
      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, ".*").gsub(/_/,":")
    end

    def file_from_pid pid
      pid.gsub(/:/,"_")+".json"
    end

  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
fedora-migrate-0.3.0 lib/fedora_migrate/migration_report.rb