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
- .all ⇒ Object
- .all_classes ⇒ Object
-
.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.
-
.new_from_name(run_type_name) ⇒ Object
Returns an initialized run type, given the name of an existing run type.
Class Method Details
.all ⇒ Object
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_classes ⇒ Object
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.
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 |