Module: PaceConverter

Included in:
Calcpace
Defined in:
lib/calcpace/pace_converter.rb

Overview

Module for converting pace between different distance units

This module provides methods to convert running pace between kilometers and miles, maintaining the time per distance unit format.

Instance Method Summary collapse

Instance Method Details

#convert_pace(pace, conversion, compact: false) ⇒ String

Converts pace from one unit to another

The pace comes back in the same two formats #convert_to_clocktime offers: the padded HH:MM:SS by default, and the compact display format a runner reads on a screen with compact: true.

Examples:

padded (default)

convert_pace('05:00', :km_to_mi)    #=> '00:08:02' (5:00/km = 8:02/mi)
convert_pace('08:00', :mi_to_km)    #=> '00:04:58' (8:00/mi ≈ 4:58/km)
convert_pace(300, 'km to mi')       #=> '00:08:02' (300s/km = 482s/mi)

compact

convert_pace('05:00', :km_to_mi, compact: true)  #=> '8:02'
convert_pace(300, 'km to mi', compact: true)     #=> '8:02'

Parameters:

  • pace (Numeric, String)

    pace in seconds per unit or time string (MM:SS)

  • conversion (Symbol, String)

    conversion type (:km_to_mi, :mi_to_km, 'km to mi', 'mi to km')

  • compact (Boolean) (defaults to: false)

    when true, return the compact display format

Returns:

  • (String)

    converted pace in HH:MM:SS format, or 'M:SS' / 'H:MM:SS' with compact: true

Raises:



29
30
31
32
33
34
35
36
37
# File 'lib/calcpace/pace_converter.rb', line 29

def convert_pace(pace, conversion, compact: false)
  pace_seconds = pace.is_a?(String) ? convert_to_seconds(pace) : pace
  check_positive(pace_seconds, 'Pace')

  conversion_type = normalize_conversion(conversion)
  converted_seconds = apply_pace_conversion(pace_seconds, conversion_type)

  convert_to_clocktime(converted_seconds, compact: compact)
end

#pace_km_to_mi(pace_per_km, compact: false) ⇒ String

Converts pace from kilometers to miles

Examples:

pace_km_to_mi('05:00')                #=> '00:08:02' (5:00/km = 8:02/mi)
pace_km_to_mi(300)                    #=> '00:08:02' (300s/km = 482s/mi)
pace_km_to_mi('05:00', compact: true) #=> '8:02'

Parameters:

  • pace_per_km (Numeric, String)

    pace in seconds per km or time string (MM:SS)

  • compact (Boolean) (defaults to: false)

    when true, return the compact display format

Returns:

  • (String)

    pace per mile in HH:MM:SS format, or 'M:SS' / 'H:MM:SS' with compact: true



49
50
51
# File 'lib/calcpace/pace_converter.rb', line 49

def pace_km_to_mi(pace_per_km, compact: false)
  convert_pace(pace_per_km, :km_to_mi, compact: compact)
end

#pace_mi_to_km(pace_per_mi, compact: false) ⇒ String

Converts pace from miles to kilometers

Examples:

pace_mi_to_km('08:00')                #=> '00:04:58' (8:00/mi ≈ 4:58/km)
pace_mi_to_km(480)                    #=> '00:04:58' (480s/mi = 298s/km)
pace_mi_to_km('08:00', compact: true) #=> '4:58'

Parameters:

  • pace_per_mi (Numeric, String)

    pace in seconds per mile or time string (MM:SS)

  • compact (Boolean) (defaults to: false)

    when true, return the compact display format

Returns:

  • (String)

    pace per kilometer in HH:MM:SS format, or 'M:SS' / 'H:MM:SS' with compact: true



63
64
65
# File 'lib/calcpace/pace_converter.rb', line 63

def pace_mi_to_km(pace_per_mi, compact: false)
  convert_pace(pace_per_mi, :mi_to_km, compact: compact)
end