runby_pace 0.6.146 → 0.6.147
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/runby_pace/distance_unit.rb +1 -0
- data/lib/runby_pace/pace.rb +1 -1
- data/lib/runby_pace/pace_calculator.rb +15 -8
- data/lib/runby_pace/parameter_sanitizer.rb +26 -0
- data/lib/runby_pace/run_math.rb +3 -3
- data/lib/runby_pace/speed_range.rb +1 -1
- data/lib/runby_pace/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a23743b3322eb2563d9bacaf2d940fb3dd3ba7e4
|
4
|
+
data.tar.gz: a3185adb6de60b111f7dc12727f3407638f94cf5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 426b99ff4fc2dfac2252bfc7b99f5f6ce720686f28cd7196f4fdcf236d147c406d5d287594ad7839296ffa5990a7f2d0eb7db973b719bb4e58c753caafd4e487
|
7
|
+
data.tar.gz: 9e39d983f87a91430e0d04aee92200f3208810e5752bdf638791527830b2445d4fee1ab04c7b42b67a1c16657fd12c5344fecdb4f12b3482d41a333238c49384
|
data/lib/runby_pace/pace.rb
CHANGED
@@ -117,7 +117,7 @@ module Runby
|
|
117
117
|
end
|
118
118
|
|
119
119
|
def distance_covered_over_time(time)
|
120
|
-
time =
|
120
|
+
time = sanitize_arg(time).as(RunbyTime)
|
121
121
|
if time.total_minutes.zero? || @distance.multiplier.zero?
|
122
122
|
return Runby::Distance.new(@distance.uom, 0)
|
123
123
|
end
|
@@ -41,19 +41,26 @@ module Runby
|
|
41
41
|
# Calculate the prescribed pace for the given 5K time
|
42
42
|
# @return [Pace]
|
43
43
|
def calc(five_k_time, distance_units = :km)
|
44
|
-
five_k_time =
|
45
|
-
distance_units =
|
46
|
-
|
47
|
-
|
48
|
-
minutes_per_unit
|
44
|
+
five_k_time = sanitize_arg(five_k_time).as(RunbyTime)
|
45
|
+
distance_units = sanitize_arg(distance_units).as(DistanceUnit)
|
46
|
+
|
47
|
+
minutes_per_unit = calculate_minutes_per_unit(distance_units, five_k_time)
|
48
|
+
build_pace minutes_per_unit, distance_units
|
49
|
+
end
|
50
|
+
|
51
|
+
private
|
49
52
|
|
50
|
-
|
53
|
+
def build_pace(minutes_per_unit, distance_units)
|
51
54
|
time = RunbyTime.from_minutes(minutes_per_unit)
|
52
55
|
distance = Distance.new distance_units, 1
|
53
56
|
Pace.new time, distance
|
54
57
|
end
|
55
58
|
|
56
|
-
|
59
|
+
def calculate_minutes_per_unit(distance_units, five_k_time)
|
60
|
+
x2 = ((five_k_time.total_minutes * 2) - (MIDPOINT_X - 1)) - 1
|
61
|
+
minutes_per_km = slope * x2 + @fastest_pace_km.time.total_minutes + curve_minutes(x2)
|
62
|
+
minutes_per_km * distance_units.conversion_factor
|
63
|
+
end
|
57
64
|
|
58
65
|
# Since the paces for each 5K time do not progress in a straight line
|
59
66
|
# when plotted on a graph, but rather a curve with its highest point near
|
@@ -69,7 +76,7 @@ module Runby
|
|
69
76
|
midpoint = MIDPOINT_X
|
70
77
|
if midpoint_reduction > midpoint
|
71
78
|
midpoint_reduction = midpoint - (midpoint_reduction - midpoint)
|
72
|
-
midpoint_reduction = 0 if midpoint_reduction
|
79
|
+
midpoint_reduction = 0 if midpoint_reduction.negative?
|
73
80
|
end
|
74
81
|
# TODO: Use an actual curve instead of a triangle to calculate the number of minutes to add.
|
75
82
|
midpoint_reduction / @midpoint_radius_divisor / 60
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
def sanitize_arg(parameter)
|
4
|
+
Runby::ParameterSanitizer.sanitize(parameter)
|
5
|
+
end
|
6
|
+
|
7
|
+
module Runby
|
8
|
+
# Sanitizes method parameters
|
9
|
+
class ParameterSanitizer
|
10
|
+
attr_reader :parameter
|
11
|
+
|
12
|
+
def initialize(parameter)
|
13
|
+
@parameter = parameter
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.sanitize(parameter)
|
17
|
+
ParameterSanitizer.new parameter
|
18
|
+
end
|
19
|
+
|
20
|
+
def as(type)
|
21
|
+
return @parameter if @parameter.is_a?(type)
|
22
|
+
raise "Unable to sanitize parameter of type #{type}. Missing 'parse' method." unless type.respond_to? :parse
|
23
|
+
type.parse(@parameter)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
data/lib/runby_pace/run_math.rb
CHANGED
@@ -4,9 +4,9 @@ module Runby
|
|
4
4
|
# An assortment of mathematical functions related to running.
|
5
5
|
class RunMath
|
6
6
|
def self.predict_race_time(race1_distance, race1_time, target_distance)
|
7
|
-
race1_distance =
|
8
|
-
race1_time =
|
9
|
-
target_distance =
|
7
|
+
race1_distance = sanitize_arg(race1_distance).as(Distance)
|
8
|
+
race1_time = sanitize_arg(race1_time).as(RunbyTime)
|
9
|
+
target_distance = sanitize_arg(target_distance).as(Distance)
|
10
10
|
|
11
11
|
race1_time * (target_distance / race1_distance)**1.06
|
12
12
|
end
|
@@ -23,7 +23,7 @@ module Runby
|
|
23
23
|
else
|
24
24
|
fast_multiplier = format('%g', @fast.distance.multiplier.round(2))
|
25
25
|
slow_multiplier = format('%g', @slow.distance.multiplier.round(2))
|
26
|
-
@fast.to_s(format: format).sub(
|
26
|
+
@fast.to_s(format: format).sub(fast_multiplier.to_s, "#{fast_multiplier}-#{slow_multiplier}")
|
27
27
|
end
|
28
28
|
end
|
29
29
|
end
|
data/lib/runby_pace/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: runby_pace
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.6.
|
4
|
+
version: 0.6.147
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ty Walls
|
@@ -79,6 +79,7 @@ files:
|
|
79
79
|
- lib/runby_pace/pace.rb
|
80
80
|
- lib/runby_pace/pace_calculator.rb
|
81
81
|
- lib/runby_pace/pace_range.rb
|
82
|
+
- lib/runby_pace/parameter_sanitizer.rb
|
82
83
|
- lib/runby_pace/run_math.rb
|
83
84
|
- lib/runby_pace/run_type.rb
|
84
85
|
- lib/runby_pace/run_types/all_run_types.g.rb
|
@@ -105,7 +106,7 @@ homepage: https://github.com/tygerbytes/runby-pace
|
|
105
106
|
licenses:
|
106
107
|
- MIT
|
107
108
|
metadata:
|
108
|
-
commit-hash:
|
109
|
+
commit-hash: d8811ae095d9919ea5393bf0e6c93de27ae324f3
|
109
110
|
post_install_message:
|
110
111
|
rdoc_options: []
|
111
112
|
require_paths:
|