Module: Calculator

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

Overview

Module to calculate time, distance, pace and velocity

This module provides methods to perform calculations related to running and pace. All methods that accept numeric inputs validate that values are positive. Methods prefixed with ‘checked_’ accept time strings in HH:MM:SS or MM:SS format. Methods prefixed with ‘clock_’ return results in time format (HH:MM:SS).

Instance Method Summary collapse

Instance Method Details

#checked_distance(time, velocity) ⇒ Float

Calculates distance from time and velocity strings

Examples:

checked_distance('00:50:00', '05:00') #=> 10.0 (50 min / 5:00/km = 10 km)

Parameters:

  • time (String)

    time in HH:MM:SS or MM:SS format

  • velocity (String)

    velocity in HH:MM:SS or MM:SS format

Returns:

  • (Float)

    distance

Raises:



162
163
164
165
166
# File 'lib/calcpace/calculator.rb', line 162

def checked_distance(time, velocity)
  time_seconds = convert_to_seconds(validate_time(time))
  velocity_seconds = convert_to_seconds(validate_time(velocity))
  distance(time_seconds, velocity_seconds)
end

#checked_pace(time, distance) ⇒ Float

Calculates pace from a time string

Examples:

checked_pace('00:50:00', 10) #=> 300.0 (300 seconds/km = 5:00/km)

Parameters:

  • time (String)

    time in HH:MM:SS or MM:SS format

  • distance (Numeric)

    distance in any unit (e.g., kilometers, miles)

Returns:

  • (Float)

    pace (time/distance) in seconds

Raises:



77
78
79
80
# File 'lib/calcpace/calculator.rb', line 77

def checked_pace(time, distance)
  seconds = convert_to_seconds(validate_time(time))
  pace(seconds, distance)
end

#checked_time(velocity, distance) ⇒ Float

Calculates time from a velocity string and distance

Examples:

checked_time('05:00', 10) #=> 3000.0 (5:00/km * 10 km = 3000 seconds)

Parameters:

  • velocity (String)

    velocity in HH:MM:SS or MM:SS format

  • distance (Numeric)

    distance in any unit

Returns:

  • (Float)

    time in seconds

Raises:



120
121
122
123
# File 'lib/calcpace/calculator.rb', line 120

def checked_time(velocity, distance)
  velocity_seconds = convert_to_seconds(validate_time(velocity))
  time(velocity_seconds, distance)
end

#checked_velocity(time, distance) ⇒ Float

Calculates velocity from a time string

Examples:

checked_velocity('01:00:00', 10_000) #=> 2.778 (10000 meters / 3600 seconds)

Parameters:

  • time (String)

    time in HH:MM:SS or MM:SS format

  • distance (Numeric)

    distance in any unit (e.g., meters, kilometers)

Returns:

  • (Float)

    velocity (distance/time)

Raises:



34
35
36
37
# File 'lib/calcpace/calculator.rb', line 34

def checked_velocity(time, distance)
  seconds = convert_to_seconds(validate_time(time))
  velocity(seconds, distance)
end

#clock_pace(time, distance) ⇒ String

Calculates pace from a time string and returns result as a clock time string

Examples:

clock_pace('00:50:00', 10) #=> '00:05:00'

Parameters:

  • time (String)

    time in HH:MM:SS or MM:SS format

  • distance (Numeric)

    distance in any unit

Returns:

  • (String)

    pace in HH:MM:SS format

Raises:



92
93
94
# File 'lib/calcpace/calculator.rb', line 92

def clock_pace(time, distance)
  convert_to_clocktime(checked_pace(time, distance))
end

#clock_time(velocity, distance) ⇒ String

Calculates time from a velocity string and returns result as a clock time string

Examples:

clock_time('05:00', 10) #=> '00:50:00'

Parameters:

  • velocity (String)

    velocity in HH:MM:SS or MM:SS format

  • distance (Numeric)

    distance in any unit

Returns:

  • (String)

    time in HH:MM:SS format

Raises:



135
136
137
# File 'lib/calcpace/calculator.rb', line 135

def clock_time(velocity, distance)
  convert_to_clocktime(checked_time(velocity, distance))
end

#clock_velocity(time, distance) ⇒ String

Calculates velocity from a time string and returns result as a clock time string

Examples:

clock_velocity('01:00:00', 10_000) #=> '00:00:00'

Parameters:

  • time (String)

    time in HH:MM:SS or MM:SS format

  • distance (Numeric)

    distance in any unit

Returns:

  • (String)

    velocity in HH:MM:SS format

Raises:



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

def clock_velocity(time, distance)
  convert_to_clocktime(checked_velocity(time, distance))
end

#distance(time, velocity) ⇒ Float

Calculates distance given time and velocity

Examples:

distance(3000, 300) #=> 10.0 (3000 seconds / 300 s/km = 10 km)

Parameters:

  • time (Numeric)

    time in any unit

  • velocity (Numeric)

    velocity in any unit

Returns:

  • (Float)

    distance (time/velocity)

Raises:



148
149
150
151
# File 'lib/calcpace/calculator.rb', line 148

def distance(time, velocity)
  validate_positive({ time: time, velocity: velocity })
  time.to_f / velocity
end

#pace(time, distance) ⇒ Float

Calculates pace (time per unit distance)

Examples:

pace(3600, 12) #=> 300.0 (3600 seconds / 12 km = 300 seconds/km = 5:00/km)

Parameters:

  • time (Numeric)

    time in any unit (e.g., seconds, minutes)

  • distance (Numeric)

    distance in any unit (e.g., kilometers, miles)

Returns:

  • (Float)

    pace (time/distance)

Raises:



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

def pace(time, distance)
  validate_positive({ time: time, distance: distance })
  time.to_f / distance
end

#time(velocity, distance) ⇒ Float

Calculates time given velocity and distance

Examples:

time(300, 10) #=> 3000.0 (300 s/km * 10 km = 3000 seconds)

Parameters:

  • velocity (Numeric)

    velocity in any unit

  • distance (Numeric)

    distance in any unit

Returns:

  • (Float)

    time (velocity * distance)

Raises:



105
106
107
108
# File 'lib/calcpace/calculator.rb', line 105

def time(velocity, distance)
  validate_positive({ velocity: velocity, distance: distance })
  velocity * distance
end

#velocity(time, distance) ⇒ Float

Calculates velocity (distance per unit time)

Examples:

velocity(3600, 12000) #=> 3.333... (12000 meters / 3600 seconds = 3.33 m/s)

Parameters:

  • time (Numeric)

    time in any unit (e.g., seconds, hours)

  • distance (Numeric)

    distance in any unit (e.g., meters, kilometers)

Returns:

  • (Float)

    velocity (distance/time)

Raises:



19
20
21
22
# File 'lib/calcpace/calculator.rb', line 19

def velocity(time, distance)
  validate_positive({ time: time, distance: distance })
  distance.to_f / time
end