Katello/katello

View on GitHub
app/lib/actions/pulp3/repository/presenters/repair_presenter.rb

Summary

Maintainability
A
2 hrs
Test Coverage
module Actions
  module Pulp3
    module Repository
      module Presenters
        class RepairPresenter < Helpers::Presenter::Base
          def humanized_output
            if action.external_task
              humanized_details
            end
          end

          def progress
            total_units == 0 ? 0.1 : finished_units.to_f / total_units
          end

          private

          def repair_task
            tasks = action.external_task.select do |task|
              if task.key? 'name'
                task['name'].include?("repair_version")
              end
            end
            tasks.first
          end

          def cancelled?
            repair_task && repair_task['state'] == 'cancelled'
          end

          def task_result
            repair_task['result']
          end

          def task_result_details
            task_result && task_result['details']
          end

          def humanized_details
            ret = []
            ret << _("Cancelled.") if cancelled?
            if total_units == 0
              ret << _("Waiting to start.")
            else
              ret << _("Total steps: ") + "#{finished_units}/#{total_units}"
            end

            ret << "--------------------------------"
            progress_reports = repair_task.try(:[], 'progress_reports') || []
            progress_reports = progress_reports.sort_by { |pr| pr.try(:[], 'message') }
            progress_reports.each do |pr|
              done = pr.try(:[], 'done')
              total = pr.try(:[], 'total') || pr.try(:[], 'done')
              unless done.nil? || total.nil?
                ret << _(pr.try(:[], 'message') + ": #{done}/#{total}")
              end
            end

            ret.join("\n")
          end

          def total_units
            total_unit = 0
            progress_reports = repair_task.try(:[], 'progress_reports') || []
            progress_reports.each do |pr|
              total = pr.try(:[], 'total')
              total = pr.try(:[], 'done') if total.nil?
              unless total.nil?
                total_unit += total.to_i
              end
            end
            total_unit
          end

          def finished_units
            finished_unit = 0
            progress_reports = repair_task.try(:[], 'progress_reports') || []
            progress_reports.each do |pr|
              done = pr.try(:[], 'done')
              unless done.nil?
                finished_unit += done.to_i
              end
            end
            finished_unit
          end
        end
      end
    end
  end
end