scottwillson/racing_on_rails

View on GitHub
app/helpers/results/renderers/time_renderer.rb

Summary

Maintainability
A
3 hrs
Test Coverage
# frozen_string_literal: true

module Results
  module Renderers
    class TimeRenderer < DefaultResultRenderer
      def self.render(column, row)
        time = row[key(column)]
        return nil if time.nil?
        return time if time.is_a?(String) || time.is_a?(DateTime)

        seconds = time % 60
        minutes = (time / 60) % 60
        hours = time / (60 * 60)

        precision = [column.precision, 3].min
        if precision == 0
          case column.cells.compact.map(&:to_i).max
          when 60..3599
            format "%02d:%02d", minutes, seconds
          when 0..59
            format "%02d", seconds
          when 0
            format "0"
          else
            format "%d:%02d:%02d", hours, minutes, seconds
          end
        else
          case column.cells.compact.map(&:to_i).max
          when 60..3599
            format "%02d:%0#{precision + 3}.#{precision}f", minutes, seconds
          when 0..59
            format "%0#{precision + 3}.#{precision}f", seconds
          when 0
            format "0"
          else
            format "%d:%02d:%0#{precision + 3}.#{precision}f", hours, minutes, seconds
          end
        end
      rescue StandardError
        ""
      end
    end
  end
end