runby_pace 0.2.50.111 → 0.2.55
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +13 -5
- data/.travis.yml +1 -5
- data/Gemfile +0 -4
- data/README.md +5 -16
- data/Rakefile +6 -40
- data/bin/_guard-core +16 -17
- data/bin/guard +16 -17
- data/lib/runby_pace.rb +1 -4
- data/lib/runby_pace/{pace_calculator.rb → pace_data.rb} +13 -29
- data/lib/runby_pace/pace_range.rb +9 -27
- data/lib/runby_pace/pace_time.rb +110 -0
- data/lib/runby_pace/run_type.rb +4 -12
- data/lib/runby_pace/run_types/all_run_types.template +4 -6
- data/lib/runby_pace/run_types/easy_run.rb +10 -31
- data/lib/runby_pace/run_types/find_divisor.rb +17 -13
- data/lib/runby_pace/run_types/long_run.rb +10 -32
- data/lib/runby_pace/version.rb +2 -17
- data/runby_pace.gemspec +5 -4
- metadata +18 -41
- data/.rubocop.yml +0 -10
- data/bin/runbypace +0 -15
- data/lib/runby_pace/cli/cli.rb +0 -127
- data/lib/runby_pace/cli/config.rb +0 -82
- data/lib/runby_pace/distance.rb +0 -135
- data/lib/runby_pace/distance_unit.rb +0 -89
- data/lib/runby_pace/golden_pace_set.rb +0 -50
- data/lib/runby_pace/pace.rb +0 -152
- data/lib/runby_pace/run_math.rb +0 -14
- data/lib/runby_pace/run_types/distance_run.rb +0 -55
- data/lib/runby_pace/run_types/fast_tempo_run.rb +0 -23
- data/lib/runby_pace/run_types/five_kilometer_race_run.rb +0 -22
- data/lib/runby_pace/run_types/mile_race_run.rb +0 -24
- data/lib/runby_pace/run_types/slow_tempo_run.rb +0 -22
- data/lib/runby_pace/run_types/tempo_run.rb +0 -54
- data/lib/runby_pace/run_types/ten_kilometer_race_run.rb +0 -23
- data/lib/runby_pace/runby_range.rb +0 -22
- data/lib/runby_pace/runby_time.rb +0 -138
- data/lib/runby_pace/runby_time_parser.rb +0 -80
- data/lib/runby_pace/speed.rb +0 -97
- data/lib/runby_pace/speed_range.rb +0 -30
- data/lib/runby_pace/utility/parameter_sanitizer.rb +0 -29
- data/lib/runby_pace/version.seed +0 -5
- data/misc/runbypace_logo.png +0 -0
data/lib/runby_pace/run_type.rb
CHANGED
@@ -1,26 +1,18 @@
|
|
1
|
-
|
1
|
+
module RunbyPace
|
2
2
|
|
3
|
-
module Runby
|
4
|
-
# Base class for all run types
|
5
3
|
class RunType
|
6
4
|
def description
|
7
5
|
'No description'
|
8
6
|
end
|
9
7
|
|
10
|
-
def
|
11
|
-
'No explanation'
|
8
|
+
def pace(five_k_time)
|
12
9
|
end
|
13
|
-
|
14
|
-
def lookup_pace(five_k_time, distance_units = :km) end
|
15
10
|
end
|
16
11
|
|
17
|
-
# Extends RunTypes with additional methods.
|
18
|
-
# Since RunTypes is autogenerated in all_run_types.g.rb, we needed a safe way of adding behavior to it
|
19
|
-
# without complicating the codegen.
|
20
12
|
module RunTypes
|
21
|
-
# Returns an initialized run type, given the name of an existing run type
|
22
13
|
def self.new_from_name(run_type_name)
|
23
|
-
Object
|
14
|
+
Object::const_get("RunbyPace::RunTypes::#{run_type_name}").new
|
24
15
|
end
|
25
16
|
end
|
17
|
+
|
26
18
|
end
|
@@ -1,14 +1,12 @@
|
|
1
1
|
# This file is automatically generated by a rake task
|
2
2
|
|
3
|
-
module
|
4
|
-
|
3
|
+
module RunbyPace
|
4
|
+
|
5
5
|
module RunTypes
|
6
|
+
|
6
7
|
def self.all
|
7
|
-
%w
|
8
|
+
%w(__RUN_TYPES__)
|
8
9
|
end
|
9
10
|
|
10
|
-
def self.all_classes
|
11
|
-
[__RUN_TYPES__]
|
12
|
-
end
|
13
11
|
end
|
14
12
|
end
|
@@ -1,52 +1,31 @@
|
|
1
|
-
|
1
|
+
module RunbyPace
|
2
2
|
|
3
|
-
module Runby
|
4
3
|
module RunTypes
|
5
|
-
|
4
|
+
|
6
5
|
class EasyRun < RunType
|
7
|
-
attr_reader :
|
6
|
+
attr_reader :slow_pace_data, :fast_pace_data
|
8
7
|
|
9
8
|
def description
|
10
9
|
'Easy Run'
|
11
10
|
end
|
12
11
|
|
13
|
-
def explanation
|
14
|
-
'Also called a recovery run, the easy run is harder than jogging, but you should still be able to carry on a conversation.'
|
15
|
-
end
|
16
|
-
|
17
12
|
def initialize
|
18
|
-
@
|
19
|
-
@
|
13
|
+
@fast_pace_data = PaceData.new(GoldenPaces::fast[:'14:00'], GoldenPaces::fast[:'42:00'], 1.99)
|
14
|
+
@slow_pace_data = PaceData.new(GoldenPaces::slow[:'14:00'], GoldenPaces::slow[:'42:00'], 1.35)
|
20
15
|
end
|
21
16
|
|
22
|
-
def
|
23
|
-
fast = @
|
24
|
-
slow = @
|
17
|
+
def pace(five_k_time)
|
18
|
+
fast = @fast_pace_data.calc(five_k_time)
|
19
|
+
slow = @slow_pace_data.calc(five_k_time)
|
25
20
|
PaceRange.new(fast, slow)
|
26
21
|
end
|
27
22
|
|
28
|
-
# Used in testing, contains hashes mapping 5K race times with the recommended pace-per-km for this run type.
|
29
23
|
class GoldenPaces
|
30
24
|
def self.fast
|
31
|
-
|
32
|
-
'15:00': '04:33',
|
33
|
-
'20:00': '05:53',
|
34
|
-
'25:00': '07:09',
|
35
|
-
'30:00': '08:23',
|
36
|
-
'35:00': '09:33',
|
37
|
-
'40:00': '10:41',
|
38
|
-
'42:00': '11:08')
|
25
|
+
{ '14:00': '04:17', '15:00': '04:33', '20:00': '05:53', '25:00': '07:09', '30:00': '08:23', '35:00': '09:33', '40:00': '10:41', '42:00': '11:08'}
|
39
26
|
end
|
40
|
-
|
41
27
|
def self.slow
|
42
|
-
|
43
|
-
'15:00': '05:20',
|
44
|
-
'20:00': '06:51',
|
45
|
-
'25:00': '08:17',
|
46
|
-
'30:00': '09:38',
|
47
|
-
'35:00': '10:56',
|
48
|
-
'40:00': '12:10',
|
49
|
-
'42:00': '12:39')
|
28
|
+
{ '14:00': '05:01', '15:00': '05:20', '20:00': '06:51', '25:00': '08:17', '30:00': '09:38', '35:00': '10:56', '40:00': '12:10', '42:00': '12:39'}
|
50
29
|
end
|
51
30
|
end
|
52
31
|
end
|
@@ -1,43 +1,47 @@
|
|
1
|
-
|
1
|
+
module RunbyPace
|
2
2
|
|
3
|
-
module Runby
|
4
|
-
# Extend RunTypes with additional behavior. (See comments for details)
|
5
3
|
module RunTypes
|
4
|
+
|
6
5
|
# Currently, to find the radius of the curve in the pace table data for a given run time,
|
7
6
|
# we start with a radius equal to that of the midpoint of the X axis for the data when
|
8
|
-
# plotted on a graph. Then we use a radius divisor for the
|
9
|
-
# dial in the height of the curve. (See
|
7
|
+
# plotted on a graph. Then we use a radius divisor for the PaceData for each run type to
|
8
|
+
# dial in the height of the curve. (See RunbyPace::PaceData)
|
10
9
|
# This method, #find_divisor, accepts a hash of "golden paces" for a run type along with
|
11
10
|
# the number of seconds of allowable deviation from the golden pace. Then it proceeds
|
12
11
|
# to brute force the divisor.
|
13
|
-
# @param [
|
12
|
+
# @param [Hash] golden_paces
|
14
13
|
# @param [String] allowable_deviation
|
15
14
|
# @return [decimal]
|
16
|
-
def self.find_divisor(
|
15
|
+
def self.find_divisor(golden_paces, allowable_deviation = '00:01')
|
16
|
+
_, first_pace = golden_paces.first
|
17
|
+
last_pace = golden_paces[:'42:00']
|
17
18
|
viable_divisors = []
|
18
19
|
|
19
20
|
(1.0..5.0).step(0.025) do |candidate_divisor|
|
20
21
|
viable_divisor = nil
|
21
22
|
|
22
|
-
|
23
|
-
five_k_time =
|
24
|
-
pace_data =
|
23
|
+
golden_paces.each do |five_k, golden_pace|
|
24
|
+
five_k_time = RunbyPace::PaceTime.new(five_k.to_s)
|
25
|
+
pace_data = RunbyPace::PaceData.new(first_pace, last_pace, candidate_divisor)
|
25
26
|
calculated_pace = pace_data.calc(five_k_time)
|
26
|
-
|
27
|
+
if !calculated_pace.almost_equals?(golden_pace, allowable_deviation)
|
27
28
|
viable_divisor = nil
|
28
29
|
break
|
29
30
|
end
|
30
31
|
viable_divisor = candidate_divisor
|
31
32
|
end
|
32
33
|
|
33
|
-
|
34
|
+
if viable_divisor != nil
|
35
|
+
viable_divisors << viable_divisor
|
36
|
+
end
|
34
37
|
end
|
35
38
|
|
36
|
-
|
39
|
+
if viable_divisors.length > 0
|
37
40
|
# puts viable_divisors
|
38
41
|
midpoint = (viable_divisors.length - 1) / 2
|
39
42
|
return viable_divisors[midpoint]
|
40
43
|
end
|
41
44
|
end
|
45
|
+
|
42
46
|
end
|
43
47
|
end
|
@@ -1,53 +1,31 @@
|
|
1
|
-
|
1
|
+
module RunbyPace
|
2
2
|
|
3
|
-
module Runby
|
4
3
|
module RunTypes
|
5
|
-
|
6
|
-
# a "distance run". It should remain conversational.
|
4
|
+
|
7
5
|
class LongRun < RunType
|
8
|
-
attr_reader :
|
6
|
+
attr_reader :slow_pace_data, :fast_pace_data
|
9
7
|
|
10
8
|
def description
|
11
9
|
'Long Run'
|
12
10
|
end
|
13
11
|
|
14
|
-
def explanation
|
15
|
-
'For many runners, the long run is the favorite run of the week. It is usually only ran once per week, and accounts for 20-25% of your weekly training volume. Remember that it\'s not a race. It should remain comfortable.'
|
16
|
-
end
|
17
|
-
|
18
12
|
def initialize
|
19
|
-
@
|
20
|
-
@
|
13
|
+
@fast_pace_data = PaceData.new(GoldenPaces::fast[:'14:00'], GoldenPaces::fast[:'42:00'], 2.125)
|
14
|
+
@slow_pace_data = PaceData.new(GoldenPaces::slow[:'14:00'], GoldenPaces::slow[:'42:00'], 1.55)
|
21
15
|
end
|
22
16
|
|
23
|
-
def
|
24
|
-
fast = @
|
25
|
-
slow = @
|
17
|
+
def pace(five_k_time)
|
18
|
+
fast = @fast_pace_data.calc(five_k_time)
|
19
|
+
slow = @slow_pace_data.calc(five_k_time)
|
26
20
|
PaceRange.new(fast, slow)
|
27
21
|
end
|
28
22
|
|
29
|
-
# Used in testing, contains hashes mapping 5K race times with the recommended pace-per-km for this run type.
|
30
23
|
class GoldenPaces
|
31
24
|
def self.fast
|
32
|
-
|
33
|
-
'15:00': '04:16',
|
34
|
-
'20:00': '05:31',
|
35
|
-
'25:00': '06:44',
|
36
|
-
'30:00': '07:54',
|
37
|
-
'35:00': '09:01',
|
38
|
-
'40:00': '10:07',
|
39
|
-
'42:00': '10:32')
|
25
|
+
{ '14:00': '04:00', '15:00': '04:16', '20:00': '05:31', '25:00': '06:44', '30:00': '07:54', '35:00':'09:01', '40:00':'10:07', '42:00':'10:32'}
|
40
26
|
end
|
41
|
-
|
42
27
|
def self.slow
|
43
|
-
|
44
|
-
'15:00': '04:57',
|
45
|
-
'20:00': '06:22',
|
46
|
-
'25:00': '07:43',
|
47
|
-
'30:00': '09:00',
|
48
|
-
'35:00': '10:15',
|
49
|
-
'40:00': '11:26',
|
50
|
-
'42:00': '11:53')
|
28
|
+
{ '14:00': '04:39', '15:00': '04:57', '20:00': '06:22', '25:00': '07:43', '30:00': '09:00', '35:00':'10:15', '40:00':'11:26', '42:00':'11:53'}
|
51
29
|
end
|
52
30
|
end
|
53
31
|
end
|
data/lib/runby_pace/version.rb
CHANGED
@@ -1,18 +1,3 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
require 'fileutils'
|
4
|
-
include FileUtils
|
5
|
-
|
6
|
-
module Runby
|
7
|
-
|
8
|
-
VERSION = begin
|
9
|
-
path = './lib/runby_pace/version.g.rb'
|
10
|
-
if File.exist? path
|
11
|
-
load path
|
12
|
-
Runby::GENERATED_VERSION
|
13
|
-
else
|
14
|
-
puts "\e[31m__TEXT__\e[0m".gsub('__TEXT__', 'Version number not set. Run "rake gen_version_number"')
|
15
|
-
'0.0.0'
|
16
|
-
end
|
17
|
-
end
|
1
|
+
module RunbyPace
|
2
|
+
VERSION = "0.2.#{`git rev-list --count HEAD`}"
|
18
3
|
end
|
data/runby_pace.gemspec
CHANGED
@@ -5,15 +5,15 @@ require 'runby_pace/version'
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |spec|
|
7
7
|
spec.name = 'runby_pace'
|
8
|
-
spec.version =
|
8
|
+
spec.version = RunbyPace::VERSION
|
9
9
|
spec.authors = ['Ty Walls']
|
10
10
|
spec.email = ['tygerbytes@users.noreply.github.com']
|
11
11
|
|
12
|
-
spec.summary =
|
12
|
+
spec.summary = %q{Runby Pace is the core logic which simplifies the calculation of target paces used by track and distance runners.}
|
13
13
|
spec.homepage = 'https://github.com/tygerbytes/runby-pace'
|
14
14
|
spec.license = 'MIT'
|
15
15
|
|
16
|
-
spec.metadata = { 'commit-hash' => `git log -n 1 --pretty=format:"%H"`
|
16
|
+
spec.metadata = { 'commit-hash' => `git log -n 1 --pretty=format:"%H"`}
|
17
17
|
|
18
18
|
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
19
19
|
spec.files += `git ls-files -z --other */all_run_types.g.rb`.split("\x0")
|
@@ -21,9 +21,10 @@ Gem::Specification.new do |spec|
|
|
21
21
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
22
22
|
spec.require_paths = ['lib']
|
23
23
|
|
24
|
-
spec.required_ruby_version = '>= 2.
|
24
|
+
spec.required_ruby_version = '>= 2.2.0'
|
25
25
|
|
26
26
|
spec.add_development_dependency 'bundler', '~> 1.12'
|
27
27
|
spec.add_development_dependency 'rake', '~> 10.0'
|
28
28
|
spec.add_development_dependency 'rspec', '~> 3.0'
|
29
|
+
|
29
30
|
end
|
metadata
CHANGED
@@ -1,55 +1,55 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: runby_pace
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.55
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ty Walls
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-06-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - ~>
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '1.12'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - ~>
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '1.12'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - ~>
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '10.0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - ~>
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '10.0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rspec
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - ~>
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '3.0'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - ~>
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '3.0'
|
55
55
|
description:
|
@@ -59,10 +59,9 @@ executables: []
|
|
59
59
|
extensions: []
|
60
60
|
extra_rdoc_files: []
|
61
61
|
files:
|
62
|
-
-
|
63
|
-
-
|
64
|
-
-
|
65
|
-
- ".travis.yml"
|
62
|
+
- .gitignore
|
63
|
+
- .rspec
|
64
|
+
- .travis.yml
|
66
65
|
- Gemfile
|
67
66
|
- Guardfile
|
68
67
|
- LICENSE.txt
|
@@ -71,64 +70,42 @@ files:
|
|
71
70
|
- bin/_guard-core
|
72
71
|
- bin/console
|
73
72
|
- bin/guard
|
74
|
-
- bin/runbypace
|
75
73
|
- bin/setup
|
76
74
|
- lib/runby_pace.rb
|
77
|
-
- lib/runby_pace/
|
78
|
-
- lib/runby_pace/cli/config.rb
|
79
|
-
- lib/runby_pace/distance.rb
|
80
|
-
- lib/runby_pace/distance_unit.rb
|
81
|
-
- lib/runby_pace/golden_pace_set.rb
|
82
|
-
- lib/runby_pace/pace.rb
|
83
|
-
- lib/runby_pace/pace_calculator.rb
|
75
|
+
- lib/runby_pace/pace_data.rb
|
84
76
|
- lib/runby_pace/pace_range.rb
|
85
|
-
- lib/runby_pace/
|
77
|
+
- lib/runby_pace/pace_time.rb
|
86
78
|
- lib/runby_pace/run_type.rb
|
87
79
|
- lib/runby_pace/run_types/all_run_types.g.rb
|
88
80
|
- lib/runby_pace/run_types/all_run_types.template
|
89
|
-
- lib/runby_pace/run_types/distance_run.rb
|
90
81
|
- lib/runby_pace/run_types/easy_run.rb
|
91
|
-
- lib/runby_pace/run_types/fast_tempo_run.rb
|
92
82
|
- lib/runby_pace/run_types/find_divisor.rb
|
93
|
-
- lib/runby_pace/run_types/five_kilometer_race_run.rb
|
94
83
|
- lib/runby_pace/run_types/long_run.rb
|
95
|
-
- lib/runby_pace/run_types/mile_race_run.rb
|
96
|
-
- lib/runby_pace/run_types/slow_tempo_run.rb
|
97
|
-
- lib/runby_pace/run_types/tempo_run.rb
|
98
|
-
- lib/runby_pace/run_types/ten_kilometer_race_run.rb
|
99
|
-
- lib/runby_pace/runby_range.rb
|
100
|
-
- lib/runby_pace/runby_time.rb
|
101
|
-
- lib/runby_pace/runby_time_parser.rb
|
102
|
-
- lib/runby_pace/speed.rb
|
103
|
-
- lib/runby_pace/speed_range.rb
|
104
|
-
- lib/runby_pace/utility/parameter_sanitizer.rb
|
105
84
|
- lib/runby_pace/version.rb
|
106
|
-
- lib/runby_pace/version.seed
|
107
85
|
- misc/rubymine.png
|
108
|
-
- misc/runbypace_logo.png
|
109
86
|
- runby_pace.gemspec
|
110
87
|
homepage: https://github.com/tygerbytes/runby-pace
|
111
88
|
licenses:
|
112
89
|
- MIT
|
113
90
|
metadata:
|
114
|
-
commit-hash:
|
91
|
+
commit-hash: 90c8a805cae7d6d0752403683b467916b1ee1d61
|
115
92
|
post_install_message:
|
116
93
|
rdoc_options: []
|
117
94
|
require_paths:
|
118
95
|
- lib
|
119
96
|
required_ruby_version: !ruby/object:Gem::Requirement
|
120
97
|
requirements:
|
121
|
-
- -
|
98
|
+
- - ! '>='
|
122
99
|
- !ruby/object:Gem::Version
|
123
|
-
version: 2.
|
100
|
+
version: 2.2.0
|
124
101
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
125
102
|
requirements:
|
126
|
-
- -
|
103
|
+
- - ! '>='
|
127
104
|
- !ruby/object:Gem::Version
|
128
105
|
version: '0'
|
129
106
|
requirements: []
|
130
107
|
rubyforge_project:
|
131
|
-
rubygems_version: 2.
|
108
|
+
rubygems_version: 2.4.5
|
132
109
|
signing_key:
|
133
110
|
specification_version: 4
|
134
111
|
summary: Runby Pace is the core logic which simplifies the calculation of target paces
|