Module: Runby::RunTypes

Defined in:
lib/runby_pace/run_type.rb,
lib/runby_pace/run_types/easy_run.rb,
lib/runby_pace/run_types/long_run.rb,
lib/runby_pace/run_types/tempo_run.rb,
lib/runby_pace/run_types/distance_run.rb,
lib/runby_pace/run_types/find_divisor.rb,
lib/runby_pace/run_types/mile_race_run.rb,
lib/runby_pace/run_types/fast_tempo_run.rb,
lib/runby_pace/run_types/slow_tempo_run.rb,
lib/runby_pace/run_types/all_run_types.g.rb,
lib/runby_pace/run_types/ten_kilometer_race_run.rb,
lib/runby_pace/run_types/five_kilometer_race_run.rb

Overview

Encapsulates data and behavior relating to all run types.

Defined Under Namespace

Classes: DistanceRun, EasyRun, FastTempoRun, FiveKilometerRaceRun, LongRun, MileRaceRun, SlowTempoRun, TempoRun, TenKilometerRaceRun

Class Method Summary collapse

Class Method Details

.allObject


6
7
8
# File 'lib/runby_pace/run_types/all_run_types.g.rb', line 6

def self.all
  %w[DistanceRun EasyRun FastTempoRun FiveKilometerRaceRun LongRun MileRaceRun SlowTempoRun TempoRun TenKilometerRaceRun]
end

.all_classesObject


10
11
12
# File 'lib/runby_pace/run_types/all_run_types.g.rb', line 10

def self.all_classes
  [DistanceRun, EasyRun, FastTempoRun, FiveKilometerRaceRun, LongRun, MileRaceRun, SlowTempoRun, TempoRun, TenKilometerRaceRun]
end

.find_divisor(golden_pace_set, allowable_deviation = '00:01') ⇒ decimal

Currently, to find the radius of the curve in the pace table data for a given run time,

we start with a radius equal to that of the midpoint of the X axis for the data when
plotted on a graph. Then we use a radius divisor for the PaceCalculator for each run type to
dial in the height of the curve. (See Runby::PaceCalculator)

This method, #find_divisor, accepts a hash of “golden paces” for a run type along with

the number of seconds of allowable deviation from the golden pace. Then it proceeds
to brute force the divisor.

Parameters:

  • golden_pace_set (GoldenPaceSet)
  • allowable_deviation (String) (defaults to: '00:01')

Returns:

  • (decimal)

16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/runby_pace/run_types/find_divisor.rb', line 16

def self.find_divisor(golden_pace_set, allowable_deviation = '00:01')
  viable_divisors = []

  (1.0..5.0).step(0.025) do |candidate_divisor|
    viable_divisor = nil

    golden_pace_set.each do |five_k, golden_pace|
      five_k_time = Runby::RunbyTime.new(five_k.to_s)
      pace_data = Runby::PaceCalculator.new(golden_pace_set, candidate_divisor)
      calculated_pace = pace_data.calc(five_k_time)
      unless calculated_pace.almost_equals?(golden_pace, allowable_deviation)
        viable_divisor = nil
        break
      end
      viable_divisor = candidate_divisor
    end

    viable_divisors << viable_divisor unless viable_divisor.nil?
  end

  unless viable_divisors.empty?
    # puts viable_divisors
    midpoint = (viable_divisors.length - 1) / 2
    return viable_divisors[midpoint]
  end
end

.new_from_name(run_type_name) ⇒ Object

Returns an initialized run type, given the name of an existing run type


22
23
24
# File 'lib/runby_pace/run_type.rb', line 22

def self.new_from_name(run_type_name)
  Object.const_get("Runby::RunTypes::#{run_type_name}").new
end