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.
Files changed (82) hide show
  1. checksums.yaml +5 -5
  2. data/.github/workflows/ci.yml +33 -0
  3. data/.gitignore +1 -0
  4. data/.rubocop.yml +34 -1
  5. data/Gemfile +3 -1
  6. data/README.md +35 -0
  7. data/Rakefile +5 -1
  8. data/exe/run_ical +13 -22
  9. data/lib/run_ical/data/advanced_10_k.rb +2 -2
  10. data/lib/run_ical/data/advanced_10_k.yaml +57 -0
  11. data/lib/run_ical/data/advanced_15_k.rb +2 -2
  12. data/lib/run_ical/data/advanced_15_k.yaml +71 -0
  13. data/lib/run_ical/data/advanced_5_k.rb +1 -1
  14. data/lib/run_ical/data/advanced_5_k.yaml +57 -0
  15. data/lib/run_ical/data/advanced_8_k.rb +8 -0
  16. data/lib/run_ical/data/advanced_8_k.yaml +57 -0
  17. data/lib/run_ical/data/half_marathon_advanced.rb +2 -2
  18. data/lib/run_ical/data/half_marathon_advanced.yaml +85 -0
  19. data/lib/run_ical/data/half_marathon_hm3.rb +1 -1
  20. data/lib/run_ical/data/half_marathon_hm3.yaml +85 -0
  21. data/lib/run_ical/data/half_marathon_intermediate1.rb +2 -2
  22. data/lib/run_ical/data/half_marathon_intermediate1.yaml +85 -0
  23. data/lib/run_ical/data/half_marathon_intermediate2.rb +2 -2
  24. data/lib/run_ical/data/half_marathon_intermediate2.yaml +85 -0
  25. data/lib/run_ical/data/half_marathon_novice1.rb +2 -2
  26. data/lib/run_ical/data/half_marathon_novice1.yaml +85 -0
  27. data/lib/run_ical/data/half_marathon_novice2.rb +2 -2
  28. data/lib/run_ical/data/half_marathon_novice2.yaml +85 -0
  29. data/lib/run_ical/data/half_marathon_walkers.rb +8 -0
  30. data/lib/run_ical/data/half_marathon_walkers.yaml +85 -0
  31. data/lib/run_ical/data/intermediate_10_k.rb +2 -2
  32. data/lib/run_ical/data/intermediate_10_k.yaml +57 -0
  33. data/lib/run_ical/data/intermediate_15_k.rb +2 -2
  34. data/lib/run_ical/data/intermediate_15_k.yaml +71 -0
  35. data/lib/run_ical/data/intermediate_5_k.rb +1 -1
  36. data/lib/run_ical/data/intermediate_5_k.yaml +57 -0
  37. data/lib/run_ical/data/intermediate_8_k.rb +2 -2
  38. data/lib/run_ical/data/intermediate_8_k.yaml +57 -0
  39. data/lib/run_ical/data/marathon_3.rb +8 -0
  40. data/lib/run_ical/data/marathon_3.yaml +169 -0
  41. data/lib/run_ical/data/marathon_advanced1.rb +8 -0
  42. data/lib/run_ical/data/marathon_advanced1.yaml +127 -0
  43. data/lib/run_ical/data/marathon_advanced2.rb +8 -0
  44. data/lib/run_ical/data/marathon_advanced2.yaml +127 -0
  45. data/lib/run_ical/data/marathon_boston_bound.rb +8 -0
  46. data/lib/run_ical/data/marathon_boston_bound.yaml +86 -0
  47. data/lib/run_ical/data/marathon_dopey_challenge.rb +8 -0
  48. data/lib/run_ical/data/marathon_dopey_challenge.yaml +127 -0
  49. data/lib/run_ical/data/marathon_intermediate1.rb +8 -0
  50. data/lib/run_ical/data/marathon_intermediate1.yaml +127 -0
  51. data/lib/run_ical/data/marathon_intermediate2.rb +8 -0
  52. data/lib/run_ical/data/marathon_intermediate2.yaml +127 -0
  53. data/lib/run_ical/data/marathon_novice1.rb +2 -2
  54. data/lib/run_ical/data/marathon_novice1.yaml +127 -0
  55. data/lib/run_ical/data/marathon_novice2.rb +8 -0
  56. data/lib/run_ical/data/marathon_novice2.yaml +127 -0
  57. data/lib/run_ical/data/marathon_novice_supreme.rb +8 -0
  58. data/lib/run_ical/data/marathon_novice_supreme.yaml +211 -0
  59. data/lib/run_ical/data/marathon_personal_best.rb +8 -0
  60. data/lib/run_ical/data/marathon_personal_best.yaml +211 -0
  61. data/lib/run_ical/data/marathon_senior.rb +8 -0
  62. data/lib/run_ical/data/marathon_senior.yaml +57 -0
  63. data/lib/run_ical/data/novice_10_k.rb +2 -2
  64. data/lib/run_ical/data/novice_10_k.yaml +57 -0
  65. data/lib/run_ical/data/novice_15_k.rb +2 -2
  66. data/lib/run_ical/data/novice_15_k.yaml +71 -0
  67. data/lib/run_ical/data/novice_5_k.rb +1 -1
  68. data/lib/run_ical/data/novice_5_k.yaml +57 -0
  69. data/lib/run_ical/data/novice_8_k.rb +2 -2
  70. data/lib/run_ical/data/novice_8_k.yaml +57 -0
  71. data/lib/run_ical/data/walkers_5_k.rb +2 -2
  72. data/lib/run_ical/data/walkers_5_k.yaml +57 -0
  73. data/lib/run_ical/data/walking_10_k.rb +2 -2
  74. data/lib/run_ical/data/walking_10_k.yaml +57 -0
  75. data/lib/run_ical/version.rb +3 -1
  76. data/lib/run_ical.rb +50 -28
  77. data/run_ical.gemspec +20 -7
  78. data/tasks/higdon_programs.yml +179 -0
  79. data/tasks/refresh_data.rake +156 -0
  80. metadata +188 -20
  81. data/.travis.yml +0 -5
  82. 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 - Novice "
5
- DATA = [{:activity=>"Stretch & strengthen"}, {:activity=>"2 m run"}, {:activity=>"30 min cross"}, {:activity=>"2 m run + strength"}, {:activity=>"Rest"}, {:activity=>"2 m run"}, {:activity=>"30 min cross"}, {:activity=>"Stretch & strengthen"}, {:activity=>"3 m run"}, {:activity=>"30 min cross"}, {:activity=>"2 m run + strength"}, {:activity=>"Rest"}, {:activity=>"3 m run"}, {:activity=>"30 min cross"}, {:activity=>"Stretch & strengthen"}, {:activity=>"3 m run"}, {:activity=>"35 min cross"}, {:activity=>"2 m run + strength"}, {:activity=>"Rest"}, {:activity=>"4 m run"}, {:activity=>"30 min cross"}, {:activity=>"Stretch & strengthen"}, {:activity=>"2 m run"}, {:activity=>"35 min cross"}, {:activity=>"2 m run + strength"}, {:activity=>"Rest"}, {:activity=>"2 m run"}, {:activity=>"40 min cross"}, {:activity=>"Stretch & strengthen"}, {:activity=>"4 m run"}, {:activity=>"40 min cross"}, {:activity=>"3 m run + strength"}, {:activity=>"Rest"}, {:activity=>"5 m run"}, {:activity=>"40 min cross"}, {:activity=>"Stretch & strengthen"}, {:activity=>"4 m run"}, {:activity=>"40 min cross"}, {:activity=>"3 m run + strength"}, {:activity=>"Rest"}, {:activity=>"6 m run"}, {:activity=>"50 min cross"}, {:activity=>"Stretch & strengthen"}, {:activity=>"3 m run"}, {:activity=>"45 min cross"}, {:activity=>"3 m run + strength"}, {:activity=>"Rest"}, {:activity=>"4 m run"}, {:activity=>"50 min cross"}, {:activity=>"Stretch & strengthen"}, {:activity=>"5 m run"}, {:activity=>"45 min cross"}, {:activity=>"3 m run + strength"}, {:activity=>"Rest"}, {:activity=>"7 m run"}, {:activity=>"60 min cross"}, {:activity=>"Stretch & strengthen"}, {:activity=>"5 m run"}, {:activity=>"45 min cross"}, {:activity=>"3 m run + strength"}, {:activity=>"Rest"}, {:activity=>"8 m run"}, {:activity=>"60 min cross"}, {:activity=>"Stretch & strengthen"}, {:activity=>"3 m run"}, {:activity=>"30 min cross"}, {:activity=>"2 m run + strength"}, {:activity=>"2 m run or rest"}, {:activity=>"Rest"}, {:activity=>"15-K Race"}]
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 = [{:activity=>"Rest or run/walk"}, {:activity=>"1.5 m run"}, {:activity=>"Rest or run/walk"}, {:activity=>"1.5 m run"}, {:activity=>"Rest"}, {:activity=>"1.5 m run"}, {:activity=>"30 min walk"}, {:activity=>"Rest or run/walk"}, {:activity=>"1.75 m run"}, {:activity=>"Rest or run/walk"}, {:activity=>"1.5 m run"}, {:activity=>"Rest"}, {:activity=>"1.75 m run"}, {:activity=>"35 min walk"}, {:activity=>"Rest or run/walk"}, {:activity=>"2 m run"}, {:activity=>"Rest or run/walk"}, {:activity=>"1.5 m run"}, {:activity=>"Rest"}, {:activity=>"2 m run"}, {:activity=>"40 min walk"}, {:activity=>"Rest or run/walk"}, {:activity=>"2.25 m run"}, {:activity=>"Rest or run/walk"}, {:activity=>"1.5 m run"}, {:activity=>"Rest"}, {:activity=>"2.25 m run"}, {:activity=>"45 min walk"}, {:activity=>"Rest or run/walk"}, {:activity=>"2.5 m run"}, {:activity=>"Rest or run/walk"}, {:activity=>"2 m run"}, {:activity=>"Rest"}, {:activity=>"2.5 m run"}, {:activity=>"50 min walk"}, {:activity=>"Rest or run/walk"}, {:activity=>"2.75 m run"}, {:activity=>"Rest or run/walk"}, {:activity=>"2 m run"}, {:activity=>"Rest"}, {:activity=>"2.75 m run"}, {:activity=>"55 min walk"}, {:activity=>"Rest or run/walk"}, {:activity=>"3 m run"}, {:activity=>"Rest or run/walk"}, {:activity=>"2 m run"}, {:activity=>"Rest"}, {:activity=>"3 m run"}, {:activity=>"60 min walk"}, {:activity=>"Rest or run/walk"}, {:activity=>"3 m run"}, {:activity=>"Rest or run/walk"}, {:activity=>"2 m run"}, {:activity=>"Rest"}, {:activity=>"Rest"}, {:activity=>"5-K Race"}]
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 - Novice "
5
- DATA = [{:activity=>"Stretch & strength"}, {:activity=>"2 m run"}, {:activity=>"30 min cross"}, {:activity=>"2 m run + strength"}, {:activity=>"Rest"}, {:activity=>"30 min cross"}, {:activity=>"2 m run"}, {:activity=>"Stretch & strength"}, {:activity=>"2 m run"}, {:activity=>"30 min cross"}, {:activity=>"2 m run + strength"}, {:activity=>"Rest"}, {:activity=>"30 min cross"}, {:activity=>"2.5 m run"}, {:activity=>"Stretch & strength"}, {:activity=>"2.5 m run"}, {:activity=>"35 min cross"}, {:activity=>"2 m run + strength"}, {:activity=>"Rest"}, {:activity=>"40 min cross"}, {:activity=>"3 m run"}, {:activity=>"Stretch & strength"}, {:activity=>"2.5 m run"}, {:activity=>"35 min cross"}, {:activity=>"2 m run + strength"}, {:activity=>"Rest"}, {:activity=>"40 min cross"}, {:activity=>"3.5 m run\r\n "}, {:activity=>"Stretch & strength"}, {:activity=>"2.5 m run"}, {:activity=>"40 min cross"}, {:activity=>"2 m run + strength"}, {:activity=>"Rest"}, {:activity=>"50 min cross"}, {:activity=>"4 m run"}, {:activity=>"Stretch & strength"}, {:activity=>"3 m run"}, {:activity=>"40 min cross"}, {:activity=>"2 m run + strength"}, {:activity=>"Rest"}, {:activity=>"50 min cross"}, {:activity=>"4 m run"}, {:activity=>"Stretch & strength"}, {:activity=>"3 m run"}, {:activity=>"45 min cross"}, {:activity=>"2 m run + strength"}, {:activity=>"Rest"}, {:activity=>"60 min cross"}, {:activity=>"4.5 m run"}, {:activity=>"Stretch & strength"}, {:activity=>"3 m run"}, {:activity=>"30 min cross"}, {:activity=>"2 m run"}, {:activity=>"Rest"}, {:activity=>"Rest or 60 min cross"}, {:activity=>"Rest"}]
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 - Walkers "
5
- DATA = [{:activity=>"Rest or walk"}, {:activity=>"15 min walk"}, {:activity=>"Rest or walk"}, {:activity=>"15 min walk"}, {:activity=>"Rest"}, {:activity=>"1.5 m walk"}, {:activity=>"30-60 min walk"}, {:activity=>"Rest or walk"}, {:activity=>"15 min walk"}, {:activity=>"Rest or walk"}, {:activity=>"15 min walk"}, {:activity=>"Rest"}, {:activity=>"1.75 m walk"}, {:activity=>"35-60 min walk"}, {:activity=>"Rest or walk"}, {:activity=>"20 min walk"}, {:activity=>"Rest or walk"}, {:activity=>"20 min walk"}, {:activity=>"Rest"}, {:activity=>"2 m walk"}, {:activity=>"40-60 min walk"}, {:activity=>"Rest or walk"}, {:activity=>"20 min walk"}, {:activity=>"Rest or walk"}, {:activity=>"20 min walk"}, {:activity=>"Rest"}, {:activity=>"2.25 m walk"}, {:activity=>"45-60 min walk"}, {:activity=>"Rest or walk"}, {:activity=>"25 min walk"}, {:activity=>"Rest or walk"}, {:activity=>"25 min walk"}, {:activity=>"Rest"}, {:activity=>"2.5 m walk"}, {:activity=>"50-60 min walk"}, {:activity=>"Rest or walk"}, {:activity=>"25 min walk"}, {:activity=>"Rest or walk"}, {:activity=>"25 min walk"}, {:activity=>"Rest"}, {:activity=>"2.75 m walk"}, {:activity=>"55-60 min walk"}, {:activity=>"Rest or walk"}, {:activity=>"30 min walk"}, {:activity=>"Rest or walk"}, {:activity=>"30 min walk"}, {:activity=>"Rest"}, {:activity=>"3 m walk"}, {:activity=>"60 min walk"}, {:activity=>"Rest or walk"}, {:activity=>"30 min walk"}, {:activity=>"Rest or walk"}, {:activity=>"30 min walk"}, {:activity=>"Rest"}, {:activity=>"Rest"}, {:activity=>"5-K Race"}]
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 - Walking "
5
- DATA = [{:activity=>"Rest or walk"}, {:activity=>"30 min walk"}, {:activity=>"Rest or walk"}, {:activity=>"30 min walk"}, {:activity=>"Rest"}, {:activity=>"3 m walk"}, {:activity=>"45-90 min walk"}, {:activity=>"Rest or walk"}, {:activity=>"35 min walk"}, {:activity=>"Rest or walk"}, {:activity=>"35 min walk"}, {:activity=>"Rest"}, {:activity=>"3.5 m walk"}, {:activity=>"55-90 min walk"}, {:activity=>"Rest or walk"}, {:activity=>"40 min walk"}, {:activity=>"Rest or walk"}, {:activity=>"40 min walk"}, {:activity=>"Rest"}, {:activity=>"4 m walk"}, {:activity=>"65-90 min walk"}, {:activity=>"Rest or walk"}, {:activity=>"45 min walk"}, {:activity=>"Rest or walk"}, {:activity=>"45 min walk"}, {:activity=>"Rest"}, {:activity=>"4.5 m walk"}, {:activity=>"75-90 min walk"}, {:activity=>"Rest or walk"}, {:activity=>"50 min walk"}, {:activity=>"Rest or walk"}, {:activity=>"50 min walk"}, {:activity=>"Rest"}, {:activity=>"5 m walk"}, {:activity=>"80-90 min walk"}, {:activity=>"Rest or walk"}, {:activity=>"55 min walk"}, {:activity=>"Rest or walk"}, {:activity=>"55 min walk"}, {:activity=>"Rest"}, {:activity=>"5.5 m walk"}, {:activity=>"85-90 min walk"}, {:activity=>"Rest or walk"}, {:activity=>"60 min walk"}, {:activity=>"Rest or walk"}, {:activity=>"60 min walk"}, {:activity=>"Rest"}, {:activity=>"6 m walk"}, {:activity=>"90 min walk"}, {:activity=>"Rest or walk"}, {:activity=>"30 min walk"}, {:activity=>"Rest or walk"}, {:activity=>"30 min walk"}, {:activity=>"Rest"}, {:activity=>"Rest"}, {:activity=>"10-K Walk"}]
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
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module RunIcal
2
- VERSION = "0.4.3"
4
+ VERSION = "0.6.0"
3
5
  end
data/lib/run_ical.rb CHANGED
@@ -1,5 +1,9 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "run_ical/version"
2
- Dir[File.expand_path("../run_ical/data/*.rb", __FILE__)].each do |file|
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
- raise ArgumentError, "#{program} is unsupported"
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 = "#{description} for #{@race_date}"
28
- start_date_padding = @race_date.saturday? ? 2 : 1
29
- start_date = @race_date - (data.size - start_date_padding).days
30
-
31
- date_list = (start_date..@race_date).to_a
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
- cal.event do |e|
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
- e.alarm do |a|
45
- a.summary = activity
46
- a.trigger = "-P1DT0H0M0S" # 1 day before
47
- end
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("../lib", __FILE__)
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 = %q{Generate an ical file for a race}
13
- spec.description = %q{Uses Hal Higdon's plans for creating a calendar}
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
- spec.files = `git ls-files -z`.split("\x0").reject do |f|
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 "bundler", "~> 2.0"
28
- spec.add_development_dependency "rake", "~> 10.0"
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