run_ical 0.5.0 → 0.7.0
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 +4 -4
- data/.github/workflows/ci.yml +33 -0
- data/.rubocop.yml +34 -1
- data/Gemfile +3 -1
- data/README.md +51 -0
- data/Rakefile +5 -1
- data/exe/run_ical +13 -22
- data/lib/run_ical/data/advanced_10_k.rb +5 -2
- data/lib/run_ical/data/advanced_10_k.yaml +57 -0
- data/lib/run_ical/data/advanced_15_k.rb +5 -2
- data/lib/run_ical/data/advanced_15_k.yaml +71 -0
- data/lib/run_ical/data/advanced_5_k.rb +5 -2
- data/lib/run_ical/data/advanced_5_k.yaml +57 -0
- data/lib/run_ical/data/advanced_8_k.rb +11 -0
- data/lib/run_ical/data/advanced_8_k.yaml +57 -0
- data/lib/run_ical/data/half_marathon_advanced.rb +5 -2
- data/lib/run_ical/data/half_marathon_advanced.yaml +85 -0
- data/lib/run_ical/data/half_marathon_hm3.rb +5 -2
- data/lib/run_ical/data/half_marathon_hm3.yaml +85 -0
- data/lib/run_ical/data/half_marathon_intermediate1.rb +5 -2
- data/lib/run_ical/data/half_marathon_intermediate1.yaml +85 -0
- data/lib/run_ical/data/half_marathon_intermediate2.rb +5 -2
- data/lib/run_ical/data/half_marathon_intermediate2.yaml +85 -0
- data/lib/run_ical/data/half_marathon_novice1.rb +5 -2
- data/lib/run_ical/data/half_marathon_novice1.yaml +85 -0
- data/lib/run_ical/data/half_marathon_novice2.rb +5 -2
- data/lib/run_ical/data/half_marathon_novice2.yaml +85 -0
- data/lib/run_ical/data/half_marathon_walkers.rb +11 -0
- data/lib/run_ical/data/half_marathon_walkers.yaml +85 -0
- data/lib/run_ical/data/intermediate_10_k.rb +5 -2
- data/lib/run_ical/data/intermediate_10_k.yaml +57 -0
- data/lib/run_ical/data/intermediate_15_k.rb +5 -2
- data/lib/run_ical/data/intermediate_15_k.yaml +71 -0
- data/lib/run_ical/data/intermediate_5_k.rb +5 -2
- data/lib/run_ical/data/intermediate_5_k.yaml +57 -0
- data/lib/run_ical/data/intermediate_8_k.rb +5 -2
- data/lib/run_ical/data/intermediate_8_k.yaml +57 -0
- data/lib/run_ical/data/marathon_3.rb +11 -0
- data/lib/run_ical/data/marathon_3.yaml +169 -0
- data/lib/run_ical/data/marathon_advanced1.rb +11 -0
- data/lib/run_ical/data/marathon_advanced1.yaml +127 -0
- data/lib/run_ical/data/marathon_advanced2.rb +11 -0
- data/lib/run_ical/data/marathon_advanced2.yaml +127 -0
- data/lib/run_ical/data/marathon_boston_bound.rb +11 -0
- data/lib/run_ical/data/marathon_boston_bound.yaml +86 -0
- data/lib/run_ical/data/marathon_dopey_challenge.rb +11 -0
- data/lib/run_ical/data/marathon_dopey_challenge.yaml +127 -0
- data/lib/run_ical/data/marathon_intermediate1.rb +11 -0
- data/lib/run_ical/data/marathon_intermediate1.yaml +127 -0
- data/lib/run_ical/data/marathon_intermediate2.rb +11 -0
- data/lib/run_ical/data/marathon_intermediate2.yaml +127 -0
- data/lib/run_ical/data/marathon_novice1.rb +5 -2
- data/lib/run_ical/data/marathon_novice1.yaml +127 -0
- data/lib/run_ical/data/marathon_novice2.rb +4 -1
- data/lib/run_ical/data/marathon_novice2.yaml +90 -89
- data/lib/run_ical/data/marathon_novice_supreme.rb +11 -0
- data/lib/run_ical/data/marathon_novice_supreme.yaml +211 -0
- data/lib/run_ical/data/marathon_personal_best.rb +11 -0
- data/lib/run_ical/data/marathon_personal_best.yaml +211 -0
- data/lib/run_ical/data/marathon_senior.rb +11 -0
- data/lib/run_ical/data/marathon_senior.yaml +57 -0
- data/lib/run_ical/data/novice_10_k.rb +5 -2
- data/lib/run_ical/data/novice_10_k.yaml +57 -0
- data/lib/run_ical/data/novice_15_k.rb +5 -2
- data/lib/run_ical/data/novice_15_k.yaml +71 -0
- data/lib/run_ical/data/novice_5_k.rb +5 -2
- data/lib/run_ical/data/novice_5_k.yaml +57 -0
- data/lib/run_ical/data/novice_8_k.rb +5 -2
- data/lib/run_ical/data/novice_8_k.yaml +57 -0
- data/lib/run_ical/data/walkers_5_k.rb +5 -2
- data/lib/run_ical/data/walkers_5_k.yaml +57 -0
- data/lib/run_ical/data/walking_10_k.rb +5 -2
- data/lib/run_ical/data/walking_10_k.yaml +57 -0
- data/lib/run_ical/data.rb +33 -0
- data/lib/run_ical/version.rb +3 -1
- data/lib/run_ical.rb +47 -27
- data/run_ical.gemspec +15 -10
- data/tasks/higdon_programs.yml +211 -0
- data/tasks/refresh_data.rake +167 -0
- metadata +96 -36
- data/.travis.yml +0 -5
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
---
|
|
2
|
+
- activity: Rest
|
|
3
|
+
- activity: 4 mi pace
|
|
4
|
+
- activity: Stretch & strengthen
|
|
5
|
+
- activity: 8 mi easy
|
|
6
|
+
- activity: Stretch & strengthen
|
|
7
|
+
- activity: Rest
|
|
8
|
+
- activity: 12 mi easy
|
|
9
|
+
- activity: Rest
|
|
10
|
+
- activity: 6 mi easy pace
|
|
11
|
+
- activity: Stretch & strengthen
|
|
12
|
+
- activity: 6 mi easy
|
|
13
|
+
- activity: Stretch & strengthen
|
|
14
|
+
- activity: Rest
|
|
15
|
+
- activity: 14 mi easy
|
|
16
|
+
- activity: Rest
|
|
17
|
+
- activity: 4 mi pace
|
|
18
|
+
- activity: Stretch & strengthen
|
|
19
|
+
- activity: 8 mi easy
|
|
20
|
+
- activity: Stretch & strengthen
|
|
21
|
+
- activity: Rest
|
|
22
|
+
- activity: 12 mi easy
|
|
23
|
+
- activity: Rest
|
|
24
|
+
- activity: 6 mi easy pace
|
|
25
|
+
- activity: Stretch & strengthen
|
|
26
|
+
- activity: 6 mi easy
|
|
27
|
+
- activity: Stretch & strengthen
|
|
28
|
+
- activity: Rest
|
|
29
|
+
- activity: 16 mi easy
|
|
30
|
+
- activity: Rest
|
|
31
|
+
- activity: 4 mi pace
|
|
32
|
+
- activity: Stretch & strengthen
|
|
33
|
+
- activity: 10 mi easy
|
|
34
|
+
- activity: Stretch & strengthen
|
|
35
|
+
- activity: Rest
|
|
36
|
+
- activity: 12 mi easy
|
|
37
|
+
- activity: Rest
|
|
38
|
+
- activity: 6 mi easy pace
|
|
39
|
+
- activity: Stretch & strengthen
|
|
40
|
+
- activity: 6 mi easy
|
|
41
|
+
- activity: Stretch & strengthen
|
|
42
|
+
- activity: Rest
|
|
43
|
+
- activity: 20 mi easy
|
|
44
|
+
- activity: Rest
|
|
45
|
+
- activity: 4 mi pace
|
|
46
|
+
- activity: Stretch & strengthen
|
|
47
|
+
- activity: 8 mi easy
|
|
48
|
+
- activity: Stretch & strengthen
|
|
49
|
+
- activity: Rest
|
|
50
|
+
- activity: 12 mi easy
|
|
51
|
+
- activity: Rest
|
|
52
|
+
- activity: 6 mi easy pace
|
|
53
|
+
- activity: Stretch & strengthen
|
|
54
|
+
- activity: Rest
|
|
55
|
+
- activity: Rest
|
|
56
|
+
- activity: Rest
|
|
57
|
+
- activity: Marathon
|
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
module RunIcal
|
|
2
2
|
module Data
|
|
3
3
|
class Novice10K
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
DISTANCE = "10-K"
|
|
5
|
+
LEVEL = "Novice"
|
|
6
|
+
POSITION = 7
|
|
7
|
+
DESCRIPTION = "#{DISTANCE} - #{LEVEL}"
|
|
8
|
+
DATA = YAML.safe_load_file(File.join(__dir__, 'novice_10_k.yaml'), symbolize_names: true)
|
|
6
9
|
end
|
|
7
10
|
end
|
|
8
11
|
end
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
---
|
|
2
|
+
- activity: Rest
|
|
3
|
+
- activity: 2.5 mi run
|
|
4
|
+
- activity: 30 min cross
|
|
5
|
+
- activity: 2 mi run
|
|
6
|
+
- activity: Rest
|
|
7
|
+
- activity: 40 min cross
|
|
8
|
+
- activity: 3 mi run
|
|
9
|
+
- activity: Rest
|
|
10
|
+
- activity: 2.5 mi run
|
|
11
|
+
- activity: 30 min cross
|
|
12
|
+
- activity: 2 mi run
|
|
13
|
+
- activity: Rest
|
|
14
|
+
- activity: 40 min cross
|
|
15
|
+
- activity: 3.5 mi run
|
|
16
|
+
- activity: Rest
|
|
17
|
+
- activity: 2.5 mi run
|
|
18
|
+
- activity: 35 min cross
|
|
19
|
+
- activity: 2 mi run
|
|
20
|
+
- activity: Rest
|
|
21
|
+
- activity: 50 min cross
|
|
22
|
+
- activity: 4 mi run
|
|
23
|
+
- activity: Rest
|
|
24
|
+
- activity: 3 mi run
|
|
25
|
+
- activity: 35 min cross
|
|
26
|
+
- activity: 2 mi run
|
|
27
|
+
- activity: Rest
|
|
28
|
+
- activity: 50 min cross
|
|
29
|
+
- activity: 4 mi run
|
|
30
|
+
- activity: Rest
|
|
31
|
+
- activity: 3 mi run
|
|
32
|
+
- activity: 40 min cross
|
|
33
|
+
- activity: 2 mi run
|
|
34
|
+
- activity: Rest
|
|
35
|
+
- activity: 60 min cross
|
|
36
|
+
- activity: 4.5 mi run
|
|
37
|
+
- activity: Rest
|
|
38
|
+
- activity: 3 mi run
|
|
39
|
+
- activity: 40 min cross
|
|
40
|
+
- activity: 2 mi run
|
|
41
|
+
- activity: Rest
|
|
42
|
+
- activity: 60 min cross
|
|
43
|
+
- activity: 5 mi run
|
|
44
|
+
- activity: Rest
|
|
45
|
+
- activity: 3 mi run
|
|
46
|
+
- activity: 45 min cross
|
|
47
|
+
- activity: 2 mi run
|
|
48
|
+
- activity: Rest
|
|
49
|
+
- activity: 60 min cross
|
|
50
|
+
- activity: 5.5 mi run
|
|
51
|
+
- activity: Rest
|
|
52
|
+
- activity: 3 mi run
|
|
53
|
+
- activity: 30 min cross
|
|
54
|
+
- activity: 2 mi run
|
|
55
|
+
- activity: Rest
|
|
56
|
+
- activity: Rest
|
|
57
|
+
- activity: 10K Run
|
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
module RunIcal
|
|
2
2
|
module Data
|
|
3
3
|
class Novice15K
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
DISTANCE = "15-K"
|
|
5
|
+
LEVEL = "Novice"
|
|
6
|
+
POSITION = 11
|
|
7
|
+
DESCRIPTION = "#{DISTANCE} - #{LEVEL}"
|
|
8
|
+
DATA = YAML.safe_load_file(File.join(__dir__, 'novice_15_k.yaml'), symbolize_names: true)
|
|
6
9
|
end
|
|
7
10
|
end
|
|
8
11
|
end
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
---
|
|
2
|
+
- activity: Stretch & strengthen
|
|
3
|
+
- activity: 2 mi run
|
|
4
|
+
- activity: 30 min cross
|
|
5
|
+
- activity: 2 mi run + strength
|
|
6
|
+
- activity: Rest
|
|
7
|
+
- activity: 2 mi run
|
|
8
|
+
- activity: 30 min cross
|
|
9
|
+
- activity: Stretch & strengthen
|
|
10
|
+
- activity: 3 mi run
|
|
11
|
+
- activity: 30 min cross
|
|
12
|
+
- activity: 2 mi run + strength
|
|
13
|
+
- activity: Rest
|
|
14
|
+
- activity: 3 mi run
|
|
15
|
+
- activity: 30 min cross
|
|
16
|
+
- activity: Stretch & strengthen
|
|
17
|
+
- activity: 3 mi run
|
|
18
|
+
- activity: 35 min cross
|
|
19
|
+
- activity: 2 mi run + strength
|
|
20
|
+
- activity: Rest
|
|
21
|
+
- activity: 4 mi run
|
|
22
|
+
- activity: 30 min cross
|
|
23
|
+
- activity: Stretch & strengthen
|
|
24
|
+
- activity: 2 mi run
|
|
25
|
+
- activity: 35 min cross
|
|
26
|
+
- activity: 2 mi run + strength
|
|
27
|
+
- activity: Rest
|
|
28
|
+
- activity: 2 mi run
|
|
29
|
+
- activity: 40 min cross
|
|
30
|
+
- activity: Stretch & strengthen
|
|
31
|
+
- activity: 4 mi run
|
|
32
|
+
- activity: 40 min cross
|
|
33
|
+
- activity: 3 mi run + strength
|
|
34
|
+
- activity: Rest
|
|
35
|
+
- activity: 5 mi run
|
|
36
|
+
- activity: 40 min cross
|
|
37
|
+
- activity: Stretch & strengthen
|
|
38
|
+
- activity: 4 mi run
|
|
39
|
+
- activity: 40 min cross
|
|
40
|
+
- activity: 3 mi run + strength
|
|
41
|
+
- activity: Rest
|
|
42
|
+
- activity: 6 mi run
|
|
43
|
+
- activity: 50 min cross
|
|
44
|
+
- activity: Stretch & strengthen
|
|
45
|
+
- activity: 3 mi run
|
|
46
|
+
- activity: 45 min cross
|
|
47
|
+
- activity: 3 mi run + strength
|
|
48
|
+
- activity: Rest
|
|
49
|
+
- activity: 4 mi run
|
|
50
|
+
- activity: 50 min cross
|
|
51
|
+
- activity: Stretch & strengthen
|
|
52
|
+
- activity: 5 mi run
|
|
53
|
+
- activity: 45 min cross
|
|
54
|
+
- activity: 3 mi run + strength
|
|
55
|
+
- activity: Rest
|
|
56
|
+
- activity: 7 mi run
|
|
57
|
+
- activity: 60 min cross
|
|
58
|
+
- activity: Stretch & strengthen
|
|
59
|
+
- activity: 5 mi run
|
|
60
|
+
- activity: 45 min cross
|
|
61
|
+
- activity: 3 mi run + strength
|
|
62
|
+
- activity: Rest
|
|
63
|
+
- activity: 8 mi run
|
|
64
|
+
- activity: 60 min cross
|
|
65
|
+
- activity: Stretch & strengthen
|
|
66
|
+
- activity: 3 mi run
|
|
67
|
+
- activity: 30 min cross
|
|
68
|
+
- activity: 2 mi run + strength
|
|
69
|
+
- activity: 2 mi run or rest
|
|
70
|
+
- activity: Rest
|
|
71
|
+
- activity: 15K Race
|
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
module RunIcal
|
|
2
2
|
module Data
|
|
3
3
|
class Novice5K
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
DISTANCE = "5-K"
|
|
5
|
+
LEVEL = "Novice"
|
|
6
|
+
POSITION = 0
|
|
7
|
+
DESCRIPTION = "#{DISTANCE} - #{LEVEL}"
|
|
8
|
+
DATA = YAML.safe_load_file(File.join(__dir__, 'novice_5_k.yaml'), symbolize_names: true)
|
|
6
9
|
end
|
|
7
10
|
end
|
|
8
11
|
end
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
---
|
|
2
|
+
- activity: Rest or run/walk
|
|
3
|
+
- activity: 1.5 mi run
|
|
4
|
+
- activity: Rest or run/walk
|
|
5
|
+
- activity: 1.5 mi run
|
|
6
|
+
- activity: Rest
|
|
7
|
+
- activity: 1.5 mi run
|
|
8
|
+
- activity: 30 min walk
|
|
9
|
+
- activity: Rest or run/walk
|
|
10
|
+
- activity: 1.75 mi run
|
|
11
|
+
- activity: Rest or run/walk
|
|
12
|
+
- activity: 1.5 mi run
|
|
13
|
+
- activity: Rest
|
|
14
|
+
- activity: 1.75 mi run
|
|
15
|
+
- activity: 35 min walk
|
|
16
|
+
- activity: Rest or run/walk
|
|
17
|
+
- activity: 2 mi run
|
|
18
|
+
- activity: Rest or run/walk
|
|
19
|
+
- activity: 1.5 mi run
|
|
20
|
+
- activity: Rest
|
|
21
|
+
- activity: 2 mi run
|
|
22
|
+
- activity: 40 min walk
|
|
23
|
+
- activity: Rest or run/walk
|
|
24
|
+
- activity: 2.25 mi run
|
|
25
|
+
- activity: Rest or run/walk
|
|
26
|
+
- activity: 1.5 mi run
|
|
27
|
+
- activity: Rest
|
|
28
|
+
- activity: 2.25 mi run
|
|
29
|
+
- activity: 45 min walk
|
|
30
|
+
- activity: Rest or run/walk
|
|
31
|
+
- activity: 2.5 mi run
|
|
32
|
+
- activity: Rest or run/walk
|
|
33
|
+
- activity: 2 mi run
|
|
34
|
+
- activity: Rest
|
|
35
|
+
- activity: 2.5 mi run
|
|
36
|
+
- activity: 50 min walk
|
|
37
|
+
- activity: Rest or run/walk
|
|
38
|
+
- activity: 2.75 mi run
|
|
39
|
+
- activity: Rest or run/walk
|
|
40
|
+
- activity: 2 mi run
|
|
41
|
+
- activity: Rest
|
|
42
|
+
- activity: 2.75 mi run
|
|
43
|
+
- activity: 55 min walk
|
|
44
|
+
- activity: Rest or run/walk
|
|
45
|
+
- activity: 3 mi run
|
|
46
|
+
- activity: Rest or run/walk
|
|
47
|
+
- activity: 2 mi run
|
|
48
|
+
- activity: Rest
|
|
49
|
+
- activity: 3 mi run
|
|
50
|
+
- activity: 60 min walk
|
|
51
|
+
- activity: Rest or run/walk
|
|
52
|
+
- activity: 3 mi run
|
|
53
|
+
- activity: Rest or run/walk
|
|
54
|
+
- activity: 2 mi run
|
|
55
|
+
- activity: Rest
|
|
56
|
+
- activity: Rest
|
|
57
|
+
- activity: 5K Race
|
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
module RunIcal
|
|
2
2
|
module Data
|
|
3
3
|
class Novice8K
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
DISTANCE = "8-K"
|
|
5
|
+
LEVEL = "Novice"
|
|
6
|
+
POSITION = 4
|
|
7
|
+
DESCRIPTION = "#{DISTANCE} - #{LEVEL}"
|
|
8
|
+
DATA = YAML.safe_load_file(File.join(__dir__, 'novice_8_k.yaml'), symbolize_names: true)
|
|
6
9
|
end
|
|
7
10
|
end
|
|
8
11
|
end
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
---
|
|
2
|
+
- activity: Stretch & strength
|
|
3
|
+
- activity: 2 mi run
|
|
4
|
+
- activity: 30 min cross
|
|
5
|
+
- activity: 2 mi run + strength
|
|
6
|
+
- activity: Rest
|
|
7
|
+
- activity: 30 min cross
|
|
8
|
+
- activity: 2 mi run
|
|
9
|
+
- activity: Stretch & strength
|
|
10
|
+
- activity: 2 mi run
|
|
11
|
+
- activity: 30 min cross
|
|
12
|
+
- activity: 2 mi run + strength
|
|
13
|
+
- activity: Rest
|
|
14
|
+
- activity: 30 min cross
|
|
15
|
+
- activity: 2.5 mi run
|
|
16
|
+
- activity: Stretch & strength
|
|
17
|
+
- activity: 2.5 mi run
|
|
18
|
+
- activity: 35 min cross
|
|
19
|
+
- activity: 2 mi run + strength
|
|
20
|
+
- activity: Rest
|
|
21
|
+
- activity: 40 min cross
|
|
22
|
+
- activity: 3 mi run
|
|
23
|
+
- activity: Stretch & strength
|
|
24
|
+
- activity: 2.5 mi run
|
|
25
|
+
- activity: 35 min cross
|
|
26
|
+
- activity: 2 mi run + strength
|
|
27
|
+
- activity: Rest
|
|
28
|
+
- activity: 40 min cross
|
|
29
|
+
- activity: 3.5 mi run
|
|
30
|
+
- activity: Stretch & strength
|
|
31
|
+
- activity: 2.5 mi run
|
|
32
|
+
- activity: 40 min cross
|
|
33
|
+
- activity: 2 mi run + strength
|
|
34
|
+
- activity: Rest
|
|
35
|
+
- activity: 50 min cross
|
|
36
|
+
- activity: 4 mi run
|
|
37
|
+
- activity: Stretch & strength
|
|
38
|
+
- activity: 3 mi run
|
|
39
|
+
- activity: 40 min cross
|
|
40
|
+
- activity: 2 mi run + strength
|
|
41
|
+
- activity: Rest
|
|
42
|
+
- activity: 50 min cross
|
|
43
|
+
- activity: 4 mi run
|
|
44
|
+
- activity: Stretch & strength
|
|
45
|
+
- activity: 3 mi run
|
|
46
|
+
- activity: 45 min cross
|
|
47
|
+
- activity: 2 mi run + strength
|
|
48
|
+
- activity: Rest
|
|
49
|
+
- activity: 60 min cross
|
|
50
|
+
- activity: 4.5 mi run
|
|
51
|
+
- activity: Stretch & strength
|
|
52
|
+
- activity: 3 mi run
|
|
53
|
+
- activity: 30 min cross
|
|
54
|
+
- activity: 2 mi run
|
|
55
|
+
- activity: Rest
|
|
56
|
+
- activity: Rest or 60 min cross
|
|
57
|
+
- activity: 8K Race
|
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
module RunIcal
|
|
2
2
|
module Data
|
|
3
3
|
class Walkers5K
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
DISTANCE = "5-K"
|
|
5
|
+
LEVEL = "Walkers"
|
|
6
|
+
POSITION = 3
|
|
7
|
+
DESCRIPTION = "#{DISTANCE} - #{LEVEL}"
|
|
8
|
+
DATA = YAML.safe_load_file(File.join(__dir__, 'walkers_5_k.yaml'), symbolize_names: true)
|
|
6
9
|
end
|
|
7
10
|
end
|
|
8
11
|
end
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
---
|
|
2
|
+
- activity: Rest or walk
|
|
3
|
+
- activity: 15 min walk
|
|
4
|
+
- activity: Rest or walk
|
|
5
|
+
- activity: 15 min walk
|
|
6
|
+
- activity: Rest
|
|
7
|
+
- activity: 1.5 mi walk
|
|
8
|
+
- activity: 30-60 min walk
|
|
9
|
+
- activity: Rest or walk
|
|
10
|
+
- activity: 15 min walk
|
|
11
|
+
- activity: Rest or walk
|
|
12
|
+
- activity: 15 min walk
|
|
13
|
+
- activity: Rest
|
|
14
|
+
- activity: 1.75 mi walk
|
|
15
|
+
- activity: 35-60 min walk
|
|
16
|
+
- activity: Rest or walk
|
|
17
|
+
- activity: 20 min walk
|
|
18
|
+
- activity: Rest or walk
|
|
19
|
+
- activity: 20 min walk
|
|
20
|
+
- activity: Rest
|
|
21
|
+
- activity: 2 mi walk
|
|
22
|
+
- activity: 40-60 min walk
|
|
23
|
+
- activity: Rest or walk
|
|
24
|
+
- activity: 20 min walk
|
|
25
|
+
- activity: Rest or walk
|
|
26
|
+
- activity: 20 min walk
|
|
27
|
+
- activity: Rest
|
|
28
|
+
- activity: 2.25 mi walk
|
|
29
|
+
- activity: 45-60 min walk
|
|
30
|
+
- activity: Rest or walk
|
|
31
|
+
- activity: 25 min walk
|
|
32
|
+
- activity: Rest or walk
|
|
33
|
+
- activity: 25 min walk
|
|
34
|
+
- activity: Rest
|
|
35
|
+
- activity: 2.5 mi walk
|
|
36
|
+
- activity: 50-60 min walk
|
|
37
|
+
- activity: Rest or walk
|
|
38
|
+
- activity: 25 min walk
|
|
39
|
+
- activity: Rest or walk
|
|
40
|
+
- activity: 25 min walk
|
|
41
|
+
- activity: Rest
|
|
42
|
+
- activity: 2.75 mi walk
|
|
43
|
+
- activity: 55-60 min walk
|
|
44
|
+
- activity: Rest or walk
|
|
45
|
+
- activity: 30 min walk
|
|
46
|
+
- activity: Rest or walk
|
|
47
|
+
- activity: 30 min walk
|
|
48
|
+
- activity: Rest
|
|
49
|
+
- activity: 3 mi walk
|
|
50
|
+
- activity: 60 min walk
|
|
51
|
+
- activity: Rest or walk
|
|
52
|
+
- activity: 30 min walk
|
|
53
|
+
- activity: Rest or walk
|
|
54
|
+
- activity: 30 min walk
|
|
55
|
+
- activity: Rest
|
|
56
|
+
- activity: Rest
|
|
57
|
+
- activity: 5K Race
|
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
module RunIcal
|
|
2
2
|
module Data
|
|
3
3
|
class Walking10K
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
DISTANCE = "10-K"
|
|
5
|
+
LEVEL = "Walkers"
|
|
6
|
+
POSITION = 10
|
|
7
|
+
DESCRIPTION = "#{DISTANCE} - #{LEVEL}"
|
|
8
|
+
DATA = YAML.safe_load_file(File.join(__dir__, 'walking_10_k.yaml'), symbolize_names: true)
|
|
6
9
|
end
|
|
7
10
|
end
|
|
8
11
|
end
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
---
|
|
2
|
+
- activity: Rest or walk
|
|
3
|
+
- activity: 30 min walk
|
|
4
|
+
- activity: Rest or walk
|
|
5
|
+
- activity: 30 min walk
|
|
6
|
+
- activity: Rest
|
|
7
|
+
- activity: 3 mi walk
|
|
8
|
+
- activity: 45-90 min walk
|
|
9
|
+
- activity: Rest or walk
|
|
10
|
+
- activity: 35 min walk
|
|
11
|
+
- activity: Rest or walk
|
|
12
|
+
- activity: 35 min walk
|
|
13
|
+
- activity: Rest
|
|
14
|
+
- activity: 3.5 mi walk
|
|
15
|
+
- activity: 55-90 min walk
|
|
16
|
+
- activity: Rest or walk
|
|
17
|
+
- activity: 40 min walk
|
|
18
|
+
- activity: Rest or walk
|
|
19
|
+
- activity: 40 min walk
|
|
20
|
+
- activity: Rest
|
|
21
|
+
- activity: 4 mi walk
|
|
22
|
+
- activity: 65-90 min walk
|
|
23
|
+
- activity: Rest or walk
|
|
24
|
+
- activity: 45 min walk
|
|
25
|
+
- activity: Rest or walk
|
|
26
|
+
- activity: 45 min walk
|
|
27
|
+
- activity: Rest
|
|
28
|
+
- activity: 4.5 mi walk
|
|
29
|
+
- activity: 75-90 min walk
|
|
30
|
+
- activity: Rest or walk
|
|
31
|
+
- activity: 50 min walk
|
|
32
|
+
- activity: Rest or walk
|
|
33
|
+
- activity: 50 min walk
|
|
34
|
+
- activity: Rest
|
|
35
|
+
- activity: 5 mi walk
|
|
36
|
+
- activity: 80-90 min walk
|
|
37
|
+
- activity: Rest or walk
|
|
38
|
+
- activity: 55 min walk
|
|
39
|
+
- activity: Rest or walk
|
|
40
|
+
- activity: 55 min walk
|
|
41
|
+
- activity: Rest
|
|
42
|
+
- activity: 5.5 mi walk
|
|
43
|
+
- activity: 85-90 min walk
|
|
44
|
+
- activity: Rest or walk
|
|
45
|
+
- activity: 60 min walk
|
|
46
|
+
- activity: Rest or walk
|
|
47
|
+
- activity: 60 min walk
|
|
48
|
+
- activity: Rest
|
|
49
|
+
- activity: 6 mi walk
|
|
50
|
+
- activity: 90 min walk
|
|
51
|
+
- activity: Rest or walk
|
|
52
|
+
- activity: 30 min walk
|
|
53
|
+
- activity: Rest or walk
|
|
54
|
+
- activity: 30 min walk
|
|
55
|
+
- activity: Rest
|
|
56
|
+
- activity: Rest
|
|
57
|
+
- activity: 10K Walk
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module RunIcal
|
|
4
|
+
# Namespace for the training plans in lib/run_ical/data.
|
|
5
|
+
#
|
|
6
|
+
# `constants` returns them in load order, which is alphabetical by filename and
|
|
7
|
+
# puts every Advanced plan before every Novice one. These helpers present them
|
|
8
|
+
# the way a runner would expect: by distance ascending, then by difficulty.
|
|
9
|
+
module Data
|
|
10
|
+
class << self
|
|
11
|
+
# Every program class, ordered for display.
|
|
12
|
+
def programs
|
|
13
|
+
constants.map { |name| const_get(name) }.sort_by { |program| program::POSITION }
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
# Programs grouped by distance, both groups and members in display order.
|
|
17
|
+
# Suitable for rendering <optgroup>s.
|
|
18
|
+
#
|
|
19
|
+
# RunIcal::Data.by_distance["5-K"].map(&:DESCRIPTION)
|
|
20
|
+
# #=> ["5-K - Novice", "5-K - Intermediate", ...]
|
|
21
|
+
def by_distance
|
|
22
|
+
programs.group_by { |program| program::DISTANCE }
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
# Look up a program class by its name, or nil.
|
|
26
|
+
def find(name)
|
|
27
|
+
return nil unless constants.include?(name.to_sym)
|
|
28
|
+
|
|
29
|
+
const_get(name.to_sym)
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
data/lib/run_ical/version.rb
CHANGED
data/lib/run_ical.rb
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require "run_ical/version"
|
|
2
4
|
require "yaml"
|
|
3
5
|
require "base64"
|
|
4
|
-
|
|
6
|
+
require "run_ical/data"
|
|
7
|
+
Dir[File.expand_path("run_ical/data/*.rb", __dir__)].each do |file|
|
|
5
8
|
require file
|
|
6
9
|
end
|
|
7
10
|
|
|
@@ -9,10 +12,11 @@ require "icalendar"
|
|
|
9
12
|
|
|
10
13
|
module RunIcal
|
|
11
14
|
class Generator
|
|
15
|
+
ALARM_TRIGGER = "-P1DT0H0M0S" # 1 day before
|
|
16
|
+
|
|
12
17
|
def self.generate(race_date:, program:)
|
|
13
|
-
unless RunIcal::Data.constants.include?(program.to_sym)
|
|
14
|
-
|
|
15
|
-
end
|
|
18
|
+
raise ArgumentError, "#{program} is unsupported" unless RunIcal::Data.constants.include?(program.to_sym)
|
|
19
|
+
|
|
16
20
|
program = program.to_sym
|
|
17
21
|
new(race_date: race_date, program: program).generate
|
|
18
22
|
end
|
|
@@ -23,36 +27,52 @@ module RunIcal
|
|
|
23
27
|
end
|
|
24
28
|
|
|
25
29
|
def generate
|
|
26
|
-
description = @program.const_get(:DESCRIPTION)
|
|
27
|
-
data = @program.const_get(:DATA)
|
|
28
30
|
cal = Icalendar::Calendar.new
|
|
29
|
-
cal.x_wr_calname = "#{
|
|
30
|
-
|
|
31
|
-
|
|
31
|
+
cal.x_wr_calname = "#{@program.const_get(:DESCRIPTION)} for #{@race_date}"
|
|
32
|
+
training_days.each { |date, activity| add_event(cal, date, activity) }
|
|
33
|
+
cal.publish
|
|
34
|
+
cal.to_ical
|
|
35
|
+
end
|
|
32
36
|
|
|
33
|
-
|
|
34
|
-
date_list.each.with_index do |date, index|
|
|
35
|
-
activity = data[index][:activity]
|
|
37
|
+
private
|
|
36
38
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
39
|
+
def data
|
|
40
|
+
@program.const_get(:DATA)
|
|
41
|
+
end
|
|
40
42
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
43
|
+
# The plan is anchored to race day and counted backwards, so the last day of the
|
|
44
|
+
# program always lands on the race.
|
|
45
|
+
def training_days
|
|
46
|
+
dates = (start_date..@race_date).to_a
|
|
47
|
+
dates.each_with_index.map { |date, index| [date, activity_at(index, dates.size)] }
|
|
48
|
+
end
|
|
46
49
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
50
|
+
def start_date
|
|
51
|
+
padding = @race_date.saturday? ? 2 : 1
|
|
52
|
+
@race_date - (data.size - padding).days
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
# Plans end on a Sunday, so a Saturday race would otherwise finish on the rest day
|
|
56
|
+
# that precedes it. Skip that rest day and use the race instead.
|
|
57
|
+
def activity_at(index, count)
|
|
58
|
+
activity = data[index][:activity]
|
|
59
|
+
return activity unless @race_date.saturday? && index == count - 1 && activity.match?(/rest/i)
|
|
60
|
+
|
|
61
|
+
data[index + 1][:activity]
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def add_event(cal, date, activity)
|
|
65
|
+
cal.event do |e|
|
|
66
|
+
e.dtstart = Icalendar::Values::Date.new(date)
|
|
67
|
+
e.dtend = Icalendar::Values::Date.new(date)
|
|
68
|
+
e.summary = activity
|
|
69
|
+
e.ip_class = "PUBLIC"
|
|
70
|
+
|
|
71
|
+
e.alarm do |a|
|
|
72
|
+
a.summary = activity
|
|
73
|
+
a.trigger = ALARM_TRIGGER
|
|
51
74
|
end
|
|
52
75
|
end
|
|
53
|
-
|
|
54
|
-
cal.publish
|
|
55
|
-
cal.to_ical
|
|
56
76
|
end
|
|
57
77
|
end
|
|
58
78
|
end
|