run_ical 0.4.3 → 0.6.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 +5 -5
- data/.github/workflows/ci.yml +33 -0
- data/.gitignore +1 -0
- data/.rubocop.yml +34 -1
- data/Gemfile +3 -1
- data/README.md +35 -0
- data/Rakefile +5 -1
- data/exe/run_ical +13 -22
- data/lib/run_ical/data/advanced_10_k.rb +2 -2
- data/lib/run_ical/data/advanced_10_k.yaml +57 -0
- data/lib/run_ical/data/advanced_15_k.rb +2 -2
- data/lib/run_ical/data/advanced_15_k.yaml +71 -0
- data/lib/run_ical/data/advanced_5_k.rb +1 -1
- data/lib/run_ical/data/advanced_5_k.yaml +57 -0
- data/lib/run_ical/data/advanced_8_k.rb +8 -0
- data/lib/run_ical/data/advanced_8_k.yaml +57 -0
- data/lib/run_ical/data/half_marathon_advanced.rb +2 -2
- data/lib/run_ical/data/half_marathon_advanced.yaml +85 -0
- data/lib/run_ical/data/half_marathon_hm3.rb +1 -1
- data/lib/run_ical/data/half_marathon_hm3.yaml +85 -0
- data/lib/run_ical/data/half_marathon_intermediate1.rb +2 -2
- data/lib/run_ical/data/half_marathon_intermediate1.yaml +85 -0
- data/lib/run_ical/data/half_marathon_intermediate2.rb +2 -2
- data/lib/run_ical/data/half_marathon_intermediate2.yaml +85 -0
- data/lib/run_ical/data/half_marathon_novice1.rb +2 -2
- data/lib/run_ical/data/half_marathon_novice1.yaml +85 -0
- data/lib/run_ical/data/half_marathon_novice2.rb +2 -2
- data/lib/run_ical/data/half_marathon_novice2.yaml +85 -0
- data/lib/run_ical/data/half_marathon_walkers.rb +8 -0
- data/lib/run_ical/data/half_marathon_walkers.yaml +85 -0
- data/lib/run_ical/data/intermediate_10_k.rb +2 -2
- data/lib/run_ical/data/intermediate_10_k.yaml +57 -0
- data/lib/run_ical/data/intermediate_15_k.rb +2 -2
- data/lib/run_ical/data/intermediate_15_k.yaml +71 -0
- data/lib/run_ical/data/intermediate_5_k.rb +1 -1
- data/lib/run_ical/data/intermediate_5_k.yaml +57 -0
- data/lib/run_ical/data/intermediate_8_k.rb +2 -2
- data/lib/run_ical/data/intermediate_8_k.yaml +57 -0
- data/lib/run_ical/data/marathon_3.rb +8 -0
- data/lib/run_ical/data/marathon_3.yaml +169 -0
- data/lib/run_ical/data/marathon_advanced1.rb +8 -0
- data/lib/run_ical/data/marathon_advanced1.yaml +127 -0
- data/lib/run_ical/data/marathon_advanced2.rb +8 -0
- data/lib/run_ical/data/marathon_advanced2.yaml +127 -0
- data/lib/run_ical/data/marathon_boston_bound.rb +8 -0
- data/lib/run_ical/data/marathon_boston_bound.yaml +86 -0
- data/lib/run_ical/data/marathon_dopey_challenge.rb +8 -0
- data/lib/run_ical/data/marathon_dopey_challenge.yaml +127 -0
- data/lib/run_ical/data/marathon_intermediate1.rb +8 -0
- data/lib/run_ical/data/marathon_intermediate1.yaml +127 -0
- data/lib/run_ical/data/marathon_intermediate2.rb +8 -0
- data/lib/run_ical/data/marathon_intermediate2.yaml +127 -0
- data/lib/run_ical/data/marathon_novice1.rb +2 -2
- data/lib/run_ical/data/marathon_novice1.yaml +127 -0
- data/lib/run_ical/data/marathon_novice2.rb +8 -0
- data/lib/run_ical/data/marathon_novice2.yaml +127 -0
- data/lib/run_ical/data/marathon_novice_supreme.rb +8 -0
- data/lib/run_ical/data/marathon_novice_supreme.yaml +211 -0
- data/lib/run_ical/data/marathon_personal_best.rb +8 -0
- data/lib/run_ical/data/marathon_personal_best.yaml +211 -0
- data/lib/run_ical/data/marathon_senior.rb +8 -0
- data/lib/run_ical/data/marathon_senior.yaml +57 -0
- data/lib/run_ical/data/novice_10_k.rb +2 -2
- data/lib/run_ical/data/novice_10_k.yaml +57 -0
- data/lib/run_ical/data/novice_15_k.rb +2 -2
- data/lib/run_ical/data/novice_15_k.yaml +71 -0
- data/lib/run_ical/data/novice_5_k.rb +1 -1
- data/lib/run_ical/data/novice_5_k.yaml +57 -0
- data/lib/run_ical/data/novice_8_k.rb +2 -2
- data/lib/run_ical/data/novice_8_k.yaml +57 -0
- data/lib/run_ical/data/walkers_5_k.rb +2 -2
- data/lib/run_ical/data/walkers_5_k.yaml +57 -0
- data/lib/run_ical/data/walking_10_k.rb +2 -2
- data/lib/run_ical/data/walking_10_k.yaml +57 -0
- data/lib/run_ical/version.rb +3 -1
- data/lib/run_ical.rb +50 -28
- data/run_ical.gemspec +20 -7
- data/tasks/higdon_programs.yml +179 -0
- data/tasks/refresh_data.rake +156 -0
- metadata +188 -20
- data/.travis.yml +0 -5
- data/Gemfile.lock +0 -52
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
module RunIcal
|
|
2
2
|
module Data
|
|
3
3
|
class Novice15K
|
|
4
|
-
DESCRIPTION = "15-K
|
|
5
|
-
DATA =
|
|
4
|
+
DESCRIPTION = "15-K - Novice"
|
|
5
|
+
DATA = YAML.safe_load_file(File.join(__dir__, 'novice_15_k.yaml'), symbolize_names: true)
|
|
6
6
|
end
|
|
7
7
|
end
|
|
8
8
|
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
|
|
@@ -2,7 +2,7 @@ module RunIcal
|
|
|
2
2
|
module Data
|
|
3
3
|
class Novice5K
|
|
4
4
|
DESCRIPTION = "5-K : Novice"
|
|
5
|
-
DATA =
|
|
5
|
+
DATA = YAML.safe_load_file(File.join(__dir__, 'novice_5_k.yaml'), symbolize_names: true)
|
|
6
6
|
end
|
|
7
7
|
end
|
|
8
8
|
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,8 @@
|
|
|
1
1
|
module RunIcal
|
|
2
2
|
module Data
|
|
3
3
|
class Novice8K
|
|
4
|
-
DESCRIPTION = "8-K
|
|
5
|
-
DATA =
|
|
4
|
+
DESCRIPTION = "8-K - Novice"
|
|
5
|
+
DATA = YAML.safe_load_file(File.join(__dir__, 'novice_8_k.yaml'), symbolize_names: true)
|
|
6
6
|
end
|
|
7
7
|
end
|
|
8
8
|
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,8 @@
|
|
|
1
1
|
module RunIcal
|
|
2
2
|
module Data
|
|
3
3
|
class Walkers5K
|
|
4
|
-
DESCRIPTION = "5-K
|
|
5
|
-
DATA =
|
|
4
|
+
DESCRIPTION = "5-K - Walkers"
|
|
5
|
+
DATA = YAML.safe_load_file(File.join(__dir__, 'walkers_5_k.yaml'), symbolize_names: true)
|
|
6
6
|
end
|
|
7
7
|
end
|
|
8
8
|
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,8 @@
|
|
|
1
1
|
module RunIcal
|
|
2
2
|
module Data
|
|
3
3
|
class Walking10K
|
|
4
|
-
DESCRIPTION = "10-K
|
|
5
|
-
DATA =
|
|
4
|
+
DESCRIPTION = "10-K - Walking"
|
|
5
|
+
DATA = YAML.safe_load_file(File.join(__dir__, 'walking_10_k.yaml'), symbolize_names: true)
|
|
6
6
|
end
|
|
7
7
|
end
|
|
8
8
|
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
|
data/lib/run_ical/version.rb
CHANGED
data/lib/run_ical.rb
CHANGED
|
@@ -1,5 +1,9 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require "run_ical/version"
|
|
2
|
-
|
|
4
|
+
require "yaml"
|
|
5
|
+
require "base64"
|
|
6
|
+
Dir[File.expand_path("run_ical/data/*.rb", __dir__)].each do |file|
|
|
3
7
|
require file
|
|
4
8
|
end
|
|
5
9
|
|
|
@@ -7,10 +11,11 @@ require "icalendar"
|
|
|
7
11
|
|
|
8
12
|
module RunIcal
|
|
9
13
|
class Generator
|
|
14
|
+
ALARM_TRIGGER = "-P1DT0H0M0S" # 1 day before
|
|
15
|
+
|
|
10
16
|
def self.generate(race_date:, program:)
|
|
11
|
-
unless RunIcal::Data.constants.include?(program.to_sym)
|
|
12
|
-
|
|
13
|
-
end
|
|
17
|
+
raise ArgumentError, "#{program} is unsupported" unless RunIcal::Data.constants.include?(program.to_sym)
|
|
18
|
+
|
|
14
19
|
program = program.to_sym
|
|
15
20
|
new(race_date: race_date, program: program).generate
|
|
16
21
|
end
|
|
@@ -21,35 +26,52 @@ module RunIcal
|
|
|
21
26
|
end
|
|
22
27
|
|
|
23
28
|
def generate
|
|
24
|
-
description = @program.const_get(:DESCRIPTION)
|
|
25
|
-
data = @program.const_get(:DATA)
|
|
26
29
|
cal = Icalendar::Calendar.new
|
|
27
|
-
cal.x_wr_calname = "#{
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
date_list.each.with_index do |date, index|
|
|
33
|
-
activity = data[index][:activity]
|
|
34
|
-
if activity =~ /rest/i && @race_date.saturday? && index == date_list.size - 1
|
|
35
|
-
activity = data[index + 1][:activity]
|
|
36
|
-
end
|
|
30
|
+
cal.x_wr_calname = "#{@program.const_get(:DESCRIPTION)} for #{@race_date}"
|
|
31
|
+
training_days.each { |date, activity| add_event(cal, date, activity) }
|
|
32
|
+
cal.publish
|
|
33
|
+
cal.to_ical
|
|
34
|
+
end
|
|
37
35
|
|
|
38
|
-
|
|
39
|
-
e.dtstart = Icalendar::Values::Date.new(date)
|
|
40
|
-
e.dtend = Icalendar::Values::Date.new(date)
|
|
41
|
-
e.summary = activity
|
|
42
|
-
e.ip_class = "PUBLIC"
|
|
36
|
+
private
|
|
43
37
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
38
|
+
def data
|
|
39
|
+
@program.const_get(:DATA)
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
# The plan is anchored to race day and counted backwards, so the last day of the
|
|
43
|
+
# program always lands on the race.
|
|
44
|
+
def training_days
|
|
45
|
+
dates = (start_date..@race_date).to_a
|
|
46
|
+
dates.each_with_index.map { |date, index| [date, activity_at(index, dates.size)] }
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def start_date
|
|
50
|
+
padding = @race_date.saturday? ? 2 : 1
|
|
51
|
+
@race_date - (data.size - padding).days
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
# Plans end on a Sunday, so a Saturday race would otherwise finish on the rest day
|
|
55
|
+
# that precedes it. Skip that rest day and use the race instead.
|
|
56
|
+
def activity_at(index, count)
|
|
57
|
+
activity = data[index][:activity]
|
|
58
|
+
return activity unless @race_date.saturday? && index == count - 1 && activity.match?(/rest/i)
|
|
59
|
+
|
|
60
|
+
data[index + 1][:activity]
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def add_event(cal, date, activity)
|
|
64
|
+
cal.event do |e|
|
|
65
|
+
e.dtstart = Icalendar::Values::Date.new(date)
|
|
66
|
+
e.dtend = Icalendar::Values::Date.new(date)
|
|
67
|
+
e.summary = activity
|
|
68
|
+
e.ip_class = "PUBLIC"
|
|
69
|
+
|
|
70
|
+
e.alarm do |a|
|
|
71
|
+
a.summary = activity
|
|
72
|
+
a.trigger = ALARM_TRIGGER
|
|
48
73
|
end
|
|
49
74
|
end
|
|
50
|
-
|
|
51
|
-
cal.publish
|
|
52
|
-
cal.to_ical
|
|
53
75
|
end
|
|
54
76
|
end
|
|
55
77
|
end
|
data/run_ical.gemspec
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
|
|
2
|
-
lib = File.expand_path("
|
|
3
|
+
lib = File.expand_path("lib", __dir__)
|
|
3
4
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
5
|
require "run_ical/version"
|
|
5
6
|
|
|
@@ -9,22 +10,34 @@ Gem::Specification.new do |spec|
|
|
|
9
10
|
spec.authors = ["Sean Cashin"]
|
|
10
11
|
spec.email = ["scashin133@gmail.com"]
|
|
11
12
|
|
|
12
|
-
spec.summary =
|
|
13
|
-
spec.description =
|
|
13
|
+
spec.summary = "Generate an ical file for a race"
|
|
14
|
+
spec.description = "Uses Hal Higdon's plans for creating a calendar"
|
|
14
15
|
spec.homepage = "https://github.com/scashin133/run_ical"
|
|
15
16
|
spec.license = "MIT"
|
|
16
17
|
|
|
17
|
-
|
|
18
|
+
# The data loaders use YAML.safe_load_file, which arrived in Psych 3.3 / Ruby 3.0.
|
|
19
|
+
spec.required_ruby_version = ">= 3.1"
|
|
20
|
+
|
|
21
|
+
spec.files = `git ls-files -z`.split("\x0").reject do |f|
|
|
18
22
|
f.match(%r{^(test|spec|features)/})
|
|
19
23
|
end
|
|
20
24
|
spec.bindir = "exe"
|
|
21
25
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
|
22
26
|
spec.require_paths = ["lib"]
|
|
23
27
|
|
|
24
|
-
spec.add_dependency "icalendar", ">= 2.0.0"
|
|
25
28
|
spec.add_dependency "activesupport", ">= 5.0.0"
|
|
29
|
+
spec.add_dependency "base64"
|
|
30
|
+
spec.add_dependency "bigdecimal"
|
|
31
|
+
spec.add_dependency "icalendar", ">= 2.0.0"
|
|
32
|
+
spec.add_dependency "logger"
|
|
33
|
+
spec.add_dependency "mutex_m"
|
|
34
|
+
spec.add_dependency "ostruct"
|
|
35
|
+
spec.add_dependency "yaml"
|
|
26
36
|
|
|
27
|
-
spec.add_development_dependency "
|
|
28
|
-
spec.add_development_dependency "
|
|
37
|
+
spec.add_development_dependency "irb"
|
|
38
|
+
spec.add_development_dependency "nokogiri" # rake data:refresh
|
|
39
|
+
spec.add_development_dependency "rake", "~> 13.0"
|
|
40
|
+
spec.add_development_dependency "rdoc"
|
|
29
41
|
spec.add_development_dependency "rspec", "~> 3.0"
|
|
42
|
+
spec.add_development_dependency "rubocop", "~> 1.0"
|
|
30
43
|
end
|