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
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: b07ad5a4ce8b93bb5c2b014e81d73927e0e1c021
4
- data.tar.gz: c999107ed3233a277b2093dbdc78ae3339fbbd97
2
+ SHA256:
3
+ metadata.gz: 011dd6fbda180b144d3293c51cec404af07518f6ddc059b1ce36fe3d35a63436
4
+ data.tar.gz: f8f78bebb340cf8d8d70953689187a640370031f8e47eaef4457ffad6c619e6d
5
5
  SHA512:
6
- metadata.gz: a37b819752babea7057a0a8432cc4a42395b502b43e6f3a1fa4f081982f9e7232e4b620c652157bf62e70467199438f7c80aba04482e802b0948d71a2f6f8d7f
7
- data.tar.gz: c5c76c86ba4276a3a4177663d230f7d917b3cfc03a7af6de478e7eafb7ca9004e7af3faccc518b1752afee081f99458452bc2fc540b4379deb950066033ea7ac
6
+ metadata.gz: db8c4844e30abe1aca9220e918b40bdda82983d2e5cafa118f919c16d71acfb2aec293ddca05580af2cc4a35f409e41ec41b303f7c7ad2a5a6daed3b53334345
7
+ data.tar.gz: 2a84b004dd7987b3c88981698e20c5d4ae9c58c97fc30992ee7a33b4929b640b0a38e137f68493464bb03867d99d54c6fa15abde9364139d672089e20d61c6b7
@@ -0,0 +1,33 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches: [master]
6
+ pull_request:
7
+
8
+ jobs:
9
+ test:
10
+ name: spec (ruby ${{ matrix.ruby }})
11
+ runs-on: ubuntu-latest
12
+ strategy:
13
+ fail-fast: false
14
+ matrix:
15
+ # Floor is the gemspec's required_ruby_version.
16
+ ruby: ["3.1", "3.2", "3.3", "3.4", "4.0"]
17
+ steps:
18
+ - uses: actions/checkout@v4
19
+ - uses: ruby/setup-ruby@v1
20
+ with:
21
+ ruby-version: ${{ matrix.ruby }}
22
+ bundler-cache: true
23
+ - run: bundle exec rake spec
24
+
25
+ lint:
26
+ runs-on: ubuntu-latest
27
+ steps:
28
+ - uses: actions/checkout@v4
29
+ - uses: ruby/setup-ruby@v1
30
+ with:
31
+ ruby-version: "3.4"
32
+ bundler-cache: true
33
+ - run: bundle exec rubocop
data/.gitignore CHANGED
@@ -9,3 +9,4 @@
9
9
 
10
10
  # rspec failure tracking
11
11
  .rspec_status
12
+ Gemfile.lock
data/.rubocop.yml CHANGED
@@ -1,2 +1,35 @@
1
1
  AllCops:
2
- TargetRubyVersion: 2.3
2
+ TargetRubyVersion: 3.1
3
+ NewCops: enable
4
+ Exclude:
5
+ # Generated by `rake data:refresh` -- change tasks/refresh_data.rake instead.
6
+ - lib/run_ical/data/*.rb
7
+ - bin/**/*
8
+ - pkg/**/*
9
+ - vendor/**/*
10
+
11
+ # Specs and the rake task are long by nature: one block per training program.
12
+ # A gemspec is a single block by construction.
13
+ Metrics/BlockLength:
14
+ Exclude:
15
+ - spec/**/*
16
+ - tasks/**/*
17
+ - "*.gemspec"
18
+
19
+ Layout/LineLength:
20
+ Max: 110
21
+
22
+ Style/Documentation:
23
+ Enabled: false
24
+
25
+ # This gem keeps its development dependencies in the gemspec, not the Gemfile.
26
+ Gemspec/DevelopmentDependencies:
27
+ Enabled: false
28
+
29
+ # Enable once the rubygems account for this gem has MFA turned on -- it adds
30
+ # rubygems_mfa_required to the gemspec, which blocks pushes without it.
31
+ Gemspec/RequireMFA:
32
+ Enabled: false
33
+
34
+ Style/StringLiterals:
35
+ EnforcedStyle: double_quotes
data/Gemfile CHANGED
@@ -1,6 +1,8 @@
1
+ # frozen_string_literal: true
2
+
1
3
  source "https://rubygems.org"
2
4
 
3
- git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
5
+ git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }
4
6
 
5
7
  # Specify your gem's dependencies in run_ical.gemspec
6
8
  gemspec
data/README.md CHANGED
@@ -1,5 +1,7 @@
1
1
  # RunIcal
2
2
 
3
+ [![CI](https://github.com/scashin133/run_ical/actions/workflows/ci.yml/badge.svg)](https://github.com/scashin133/run_ical/actions/workflows/ci.yml)
4
+
3
5
  Generate ical files based on Hal Higdon's training programs.
4
6
 
5
7
  ## Installation
@@ -32,8 +34,41 @@ You can also generate from the CLI interface:
32
34
  run_ical --program=Advanced5K --date=2018-05-06 --file=/tmp/cal.ical
33
35
  ```
34
36
 
37
+ The plan is anchored to `race_date` and counted backwards, so the last day of the
38
+ program always lands on race day.
39
+
40
+ ## Programs
41
+
42
+ | Distance | `program:` values |
43
+ | --- | --- |
44
+ | 5K | `Novice5K`, `Intermediate5K`, `Advanced5K`, `Walkers5K` |
45
+ | 8K | `Novice8K`, `Intermediate8K`, `Advanced8K` |
46
+ | 10K | `Novice10K`, `Intermediate10K`, `Advanced10K`, `Walking10K` |
47
+ | 15K / 10 mile | `Novice15K`, `Intermediate15K`, `Advanced15K` |
48
+ | Half marathon | `HalfMarathonNovice1`, `HalfMarathonNovice2`, `HalfMarathonIntermediate1`, `HalfMarathonIntermediate2`, `HalfMarathonAdvanced`, `HalfMarathonHM3`, `HalfMarathonWalkers` |
49
+ | Marathon | `MarathonNovice1`, `MarathonNovice2`, `MarathonIntermediate1`, `MarathonIntermediate2`, `MarathonAdvanced1`, `MarathonAdvanced2`, `MarathonNoviceSupreme`, `MarathonPersonalBest`, `MarathonSenior`, `Marathon3`, `MarathonBostonBound`, `MarathonDopeyChallenge` |
50
+
51
+ `MarathonBostonBound` ends on a Monday (Patriots' Day); every other program ends on a Sunday.
52
+
35
53
  ## Development
36
54
 
55
+ ### Refreshing the training data
56
+
57
+ The plans in `lib/run_ical/data` are scraped from [halhigdon.com](https://www.halhigdon.com/training/).
58
+ `tasks/higdon_programs.yml` maps each program to its source page, and:
59
+
60
+ ```bash
61
+ bundle exec rake data:refresh # every program
62
+ bundle exec rake data:refresh[Novice5K] # just one
63
+ ```
64
+
65
+ rewrites the `.yaml` plan data and its `.rb` loader. The task aborts rather than write a
66
+ plan whose week count changed, whose cells went blank, or that no longer ends on race day.
67
+ Run `rake spec` afterwards — the specs re-check every program. Adding a program is a new
68
+ manifest entry plus a refresh; `lib/run_ical.rb` picks up the file automatically.
69
+
70
+ ### Setup
71
+
37
72
  After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
38
73
 
39
74
  To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
data/Rakefile CHANGED
@@ -1,6 +1,10 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "bundler/gem_tasks"
2
4
  require "rspec/core/rake_task"
3
5
 
4
6
  RSpec::Core::RakeTask.new(:spec)
5
7
 
6
- task :default => :spec
8
+ Dir[File.expand_path("tasks/*.rake", __dir__)].each { |task| load task }
9
+
10
+ task default: :spec
data/exe/run_ical CHANGED
@@ -1,38 +1,30 @@
1
1
  #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
2
3
 
3
4
  require "run_ical"
4
5
 
5
- require 'optparse'
6
+ require "optparse"
6
7
 
7
8
  Options = Struct.new(:date, :program, :output)
8
9
 
9
10
  class Parser
10
- def self.parse(options)
11
+ def self.parse(argv)
11
12
  args = Options.new
13
+ option_parser(args).parse!(argv)
14
+ args
15
+ end
12
16
 
13
- opt_parser = OptionParser.new do |opts|
17
+ def self.option_parser(args)
18
+ OptionParser.new do |opts|
14
19
  opts.banner = "Usage: run_ical [options]"
15
-
16
- opts.on("-dDATE", "--date=DATE", "Date of race") do |date|
17
- args.date = Date.parse(date)
18
- end
19
-
20
- opts.on("-pPROGRAM", "--program=PROGRAM", "Program to generate for") do |program|
21
- args.program = program
22
- end
23
-
24
- opts.on("-fOUTPUT", "--file=OUTPUT", "Where to output ical to") do |output|
25
- args.output = output
26
- end
27
-
20
+ opts.on("-dDATE", "--date=DATE", "Date of race") { |date| args.date = Date.parse(date) }
21
+ opts.on("-pPROGRAM", "--program=PROGRAM", "Program to generate for") { |p| args.program = p }
22
+ opts.on("-fOUTPUT", "--file=OUTPUT", "Where to output ical to") { |out| args.output = out }
28
23
  opts.on("-h", "--help", "Prints this help") do
29
24
  puts opts
30
25
  exit
31
26
  end
32
27
  end
33
-
34
- opt_parser.parse!(options)
35
- return args
36
28
  end
37
29
  end
38
30
 
@@ -41,6 +33,5 @@ options = Parser.parse ARGV
41
33
  raise(ArgumentError, "Missing date") if options.date.nil?
42
34
  raise(ArgumentError, "Missing Program") if options.program.nil?
43
35
 
44
- File.open(options.output || "./cal.ical", "w") do |file|
45
- file.write(RunIcal::Generator.generate(race_date: options.date, program: options.program))
46
- end
36
+ File.write(options.output || "./cal.ical",
37
+ RunIcal::Generator.generate(race_date: options.date, program: options.program))
@@ -1,8 +1,8 @@
1
1
  module RunIcal
2
2
  module Data
3
3
  class Advanced10K
4
- DESCRIPTION = "10-K - Advanced "
5
- DATA = [{:activity=>"3 m run "}, {:activity=>"30 min tempo run"}, {:activity=>"6 x 400 mile pace"}, {:activity=>"3 m run "}, {:activity=>"Rest or 3 m run"}, {:activity=>"5 m total, 2 m pace"}, {:activity=>"6 m run"}, {:activity=>"3 m run "}, {:activity=>"40 min tempo run"}, {:activity=>"7 x 400 mile pace"}, {:activity=>"4 m run "}, {:activity=>"Rest or 3 m run"}, {:activity=>"5 m total, 2 m pace"}, {:activity=>"7 m run"}, {:activity=>"3 m run "}, {:activity=>"50 min tempo run"}, {:activity=>"8 x 400 mile pace"}, {:activity=>"5 m run "}, {:activity=>"Rest or 3 m run"}, {:activity=>"5 m total, 3 m pace"}, {:activity=>"8 m run (3/1)"}, {:activity=>"3 m run "}, {:activity=>"30 min tempo run"}, {:activity=>"9 x 400 mile pace"}, {:activity=>"3 m run "}, {:activity=>"Rest or 3 m run"}, {:activity=>"Rest"}, {:activity=>"5-K Race"}, {:activity=>"3 m run "}, {:activity=>"50 min tempo run"}, {:activity=>"10 x 400 mile pace"}, {:activity=>"6 m run "}, {:activity=>"Rest or 3 m run"}, {:activity=>"6 m total, 3 m pace"}, {:activity=>"8 m run (3/1)"}, {:activity=>"3 m run "}, {:activity=>"30 min tempo run"}, {:activity=>"11 x 400 mile pace"}, {:activity=>"3 m run "}, {:activity=>"Rest or 3 m run"}, {:activity=>"Rest"}, {:activity=>"8-K Race"}, {:activity=>"3 m run "}, {:activity=>"60 min tempo run"}, {:activity=>"12 x 400 mile pace"}, {:activity=>"6 m run "}, {:activity=>"Rest or 3 m run"}, {:activity=>"6 m total, 3 m pace"}, {:activity=>"10 m run (3/1)"}, {:activity=>"3 m run "}, {:activity=>"30 min tempo run"}, {:activity=>"6 x 400 mile pace"}, {:activity=>"3 m run"}, {:activity=>"Rest or 1-3 m run"}, {:activity=>"Rest"}, {:activity=>"10-K Race"}]
4
+ DESCRIPTION = "10-K - Advanced"
5
+ DATA = YAML.safe_load_file(File.join(__dir__, 'advanced_10_k.yaml'), symbolize_names: true)
6
6
  end
7
7
  end
8
8
  end
@@ -0,0 +1,57 @@
1
+ ---
2
+ - activity: 3 mi run
3
+ - activity: 30 min tempo run
4
+ - activity: 6 x 400 mile pace
5
+ - activity: 3 mi run
6
+ - activity: Rest or 3 mi run
7
+ - activity: 5 mi total, 2 mi pace
8
+ - activity: 6 mi run
9
+ - activity: 3 mi run
10
+ - activity: 40 min tempo run
11
+ - activity: 7 x 400 mile pace
12
+ - activity: 4 mi run
13
+ - activity: Rest or 3 mi run
14
+ - activity: 5 mi total, 2 mi pace
15
+ - activity: 7 mi run
16
+ - activity: 3 mi run
17
+ - activity: 50 min tempo run
18
+ - activity: 8 x 400 mile pace
19
+ - activity: 5 mi run
20
+ - activity: Rest or 3 mi run
21
+ - activity: 5 mi total, 3 mi pace
22
+ - activity: 8 mi run (3/1)
23
+ - activity: 3 mi run
24
+ - activity: 30 min tempo run
25
+ - activity: 9 x 400 mile pace
26
+ - activity: 3 mi run
27
+ - activity: Rest or 3 mi run
28
+ - activity: Rest
29
+ - activity: 5K Race
30
+ - activity: 3 mi run
31
+ - activity: 50 min tempo run
32
+ - activity: 10 x 400 mile pace
33
+ - activity: 6 mi run
34
+ - activity: Rest or 3 mi run
35
+ - activity: 6 mi total, 3 mi pace
36
+ - activity: 8 mi run (3/1)
37
+ - activity: 3 mi run
38
+ - activity: 30 min tempo run
39
+ - activity: 11 x 400 mile pace
40
+ - activity: 3 mi run
41
+ - activity: Rest or 3 mi run
42
+ - activity: Rest
43
+ - activity: 8K Race
44
+ - activity: 3 mi run
45
+ - activity: 60 min tempo run
46
+ - activity: 12 x 400 mile pace
47
+ - activity: 6 mi run
48
+ - activity: Rest or 3 mi run
49
+ - activity: 6 mi total, 3 mi pace
50
+ - activity: 10 mi run (3/1)
51
+ - activity: 3 mi run
52
+ - activity: 30 min tempo run
53
+ - activity: 6 x 400 mile pace
54
+ - activity: 3 mi run
55
+ - activity: Rest or 1-3 mi run
56
+ - activity: Rest
57
+ - activity: 10K Race
@@ -1,8 +1,8 @@
1
1
  module RunIcal
2
2
  module Data
3
3
  class Advanced15K
4
- DESCRIPTION = "15-K - Advanced "
5
- DATA = [{:activity=>"3 m run + strength"}, {:activity=>"30 min tempo"}, {:activity=>"6 x 400 mile pace"}, {:activity=>"3 m run + strength"}, {:activity=>"Rest or 3 m"}, {:activity=>"3 m pace"}, {:activity=>"5 m run"}, {:activity=>"3 m run + strength"}, {:activity=>"35 min tempo"}, {:activity=>"3 x 800 5-K pace"}, {:activity=>"4 m run + strength"}, {:activity=>"Rest or 3 m"}, {:activity=>"3 m pace"}, {:activity=>"6 m run"}, {:activity=>"3 m run + strength"}, {:activity=>"40 min tempo"}, {:activity=>"7 x 400 mile pace"}, {:activity=>"5 m run + strength"}, {:activity=>"Rest or 3 m"}, {:activity=>"3 m pace"}, {:activity=>"7 m run"}, {:activity=>"3 m run + strength"}, {:activity=>"30 min tempo"}, {:activity=>"4 x 800 5-K pace"}, {:activity=>"3 m run + strength"}, {:activity=>"Rest or 3 m"}, {:activity=>"3 m pace"}, {:activity=>"5-K Race"}, {:activity=>"3 m run + strength"}, {:activity=>"40 min tempo"}, {:activity=>"8 x 400 mile pace"}, {:activity=>"4 m run + strength"}, {:activity=>"Rest or 3 m"}, {:activity=>"3 m pace"}, {:activity=>"9 m run"}, {:activity=>"3 m run + strength"}, {:activity=>"45 min tempo"}, {:activity=>"5 x 800 5-K pace"}, {:activity=>"5 m run + strength"}, {:activity=>"Rest or 3 m"}, {:activity=>"3 m pace"}, {:activity=>"10 m run"}, {:activity=>"3 m run + strength"}, {:activity=>"30 min tempo"}, {:activity=>"9 x 400 mile pace"}, {:activity=>"3 m run + strength"}, {:activity=>"Rest or 3 m"}, {:activity=>"3 m pace"}, {:activity=>"10-K Race"}, {:activity=>"3 m run + strength"}, {:activity=>"40 min tempo"}, {:activity=>"6 x 800 5-K pace"}, {:activity=>"4 m run + strength"}, {:activity=>"Rest or 3 m"}, {:activity=>"3 m pace"}, {:activity=>"12 m run"}, {:activity=>"3 m run + strength"}, {:activity=>"45 min tempo"}, {:activity=>"10 x 400 mile pace"}, {:activity=>"5 m run + strength"}, {:activity=>"Rest or 3 m"}, {:activity=>"3 m pace"}, {:activity=>"13 m run"}, {:activity=>"3 m run + strength"}, {:activity=>"30 min tempo"}, {:activity=>"3 x 800 5-K pace"}, {:activity=>"2 m run + strength"}, {:activity=>"1-2 m run"}, {:activity=>"Rest"}, {:activity=>"15-K  Race"}]
4
+ DESCRIPTION = "15-K - Advanced"
5
+ DATA = YAML.safe_load_file(File.join(__dir__, 'advanced_15_k.yaml'), symbolize_names: true)
6
6
  end
7
7
  end
8
8
  end
@@ -0,0 +1,71 @@
1
+ ---
2
+ - activity: 3 mi run + strength
3
+ - activity: 30 min tempo
4
+ - activity: 6 x 400 mile pace
5
+ - activity: 3 mi run + strength
6
+ - activity: Rest or 3 m
7
+ - activity: 3 mi pace
8
+ - activity: 5 mi run
9
+ - activity: 3 mi run + strength
10
+ - activity: 35 min tempo
11
+ - activity: 3 x 800 5K pace
12
+ - activity: 4 mi run + strength
13
+ - activity: Rest or 3 m
14
+ - activity: 3 mi pace
15
+ - activity: 6 mi run
16
+ - activity: 3 mi run + strength
17
+ - activity: 40 min tempo
18
+ - activity: 7 x 400 mile pace
19
+ - activity: 5 mi run + strength
20
+ - activity: Rest or 3 m
21
+ - activity: 3 mi pace
22
+ - activity: 7 mi run
23
+ - activity: 3 mi run + strength
24
+ - activity: 30 min tempo
25
+ - activity: 4 x 800 5K pace
26
+ - activity: 3 mi run + strength
27
+ - activity: Rest or 3 m
28
+ - activity: 3 mi pace
29
+ - activity: 5K Race
30
+ - activity: 3 mi run + strength
31
+ - activity: 40 min tempo
32
+ - activity: 8 x 400 mile pace
33
+ - activity: 4 mi run + strength
34
+ - activity: Rest or 3 m
35
+ - activity: 3 mi pace
36
+ - activity: 9 mi run
37
+ - activity: 3 mi run + strength
38
+ - activity: 45 min tempo
39
+ - activity: 5 x 800 5K pace
40
+ - activity: 5 mi run + strength
41
+ - activity: Rest or 3 m
42
+ - activity: 3 mi pace
43
+ - activity: 10 mi run
44
+ - activity: 3 mi run + strength
45
+ - activity: 30 min tempo
46
+ - activity: 9 x 400 mile pace
47
+ - activity: 3 mi run + strength
48
+ - activity: Rest or 3 m
49
+ - activity: 3 mi pace
50
+ - activity: 10K Race
51
+ - activity: 3 mi run + strength
52
+ - activity: 40 min tempo
53
+ - activity: 6 x 800 5K pace
54
+ - activity: 4 mi run + strength
55
+ - activity: Rest or 3 m
56
+ - activity: 3 mi pace
57
+ - activity: 12 mi run
58
+ - activity: 3 mi run + strength
59
+ - activity: 45 min tempo
60
+ - activity: 10 x 400 mile pace
61
+ - activity: 5 mi run + strength
62
+ - activity: Rest or 3 m
63
+ - activity: 3 mi pace
64
+ - activity: 13 mi run
65
+ - activity: 3 mi run + strength
66
+ - activity: 30 min tempo
67
+ - activity: 3 x 800 5K pace
68
+ - activity: 2 mi run + strength
69
+ - activity: 1-2 mi run
70
+ - activity: Rest
71
+ - activity: 15K Race
@@ -2,7 +2,7 @@ module RunIcal
2
2
  module Data
3
3
  class Advanced5K
4
4
  DESCRIPTION = "5-K : Advanced"
5
- DATA = [{:activity=>"3 m run"}, {:activity=>"5 x 400"}, {:activity=>"Rest or easy run"}, {:activity=>"30 min tempo"}, {:activity=>"Rest"}, {:activity=>"4 m fast"}, {:activity=>"60 min run"}, {:activity=>"3 m run"}, {:activity=>"8 x 200"}, {:activity=>"Rest or easy run"}, {:activity=>"30 min tempo"}, {:activity=>"Rest"}, {:activity=>"4 m fast"}, {:activity=>"65 min run"}, {:activity=>"3 m run"}, {:activity=>"6 x 400"}, {:activity=>"Rest or easy run"}, {:activity=>"35 min tempo"}, {:activity=>"Rest"}, {:activity=>"5 m fast"}, {:activity=>"70 min run"}, {:activity=>"3 m run"}, {:activity=>"9 x 200"}, {:activity=>"Rest or easy run"}, {:activity=>"35 min tempo"}, {:activity=>"Rest or easy run"}, {:activity=>"Rest"}, {:activity=>"5-K Test"}, {:activity=>"3 m run"}, {:activity=>"7 x 400"}, {:activity=>"Rest or easy run"}, {:activity=>"40 min tempo"}, {:activity=>"Rest"}, {:activity=>"5 m fast"}, {:activity=>"75 min run"}, {:activity=>"3 m run"}, {:activity=>"10 x 200"}, {:activity=>"Rest or easy run"}, {:activity=>"40 min tempo"}, {:activity=>"Rest"}, {:activity=>"6 m fast"}, {:activity=>"85 min run"}, {:activity=>"3 m run"}, {:activity=>"8 x 400"}, {:activity=>"Rest or easy run"}, {:activity=>"45 min tempo"}, {:activity=>"Rest"}, {:activity=>"6 m fast"}, {:activity=>"90 min run"}, {:activity=>"2 m run"}, {:activity=>"6 x 200"}, {:activity=>"30 min tempo"}, {:activity=>"Rest or easy run"}, {:activity=>"Rest"}, {:activity=>"Rest"}, {:activity=>"5-K Race"}]
5
+ DATA = YAML.safe_load_file(File.join(__dir__, 'advanced_5_k.yaml'), symbolize_names: true)
6
6
  end
7
7
  end
8
8
  end
@@ -0,0 +1,57 @@
1
+ ---
2
+ - activity: 3 mi run
3
+ - activity: 5 x 400
4
+ - activity: Rest or easy run
5
+ - activity: 30 min tempo
6
+ - activity: Rest
7
+ - activity: 4 mi fast
8
+ - activity: 60 min run
9
+ - activity: 3 mi run
10
+ - activity: 8 x 200
11
+ - activity: Rest or easy run
12
+ - activity: 30 min tempo
13
+ - activity: Rest
14
+ - activity: 4 mi fast
15
+ - activity: 65 min run
16
+ - activity: 3 mi run
17
+ - activity: 6 x 400
18
+ - activity: Rest or easy run
19
+ - activity: 35 min tempo
20
+ - activity: Rest
21
+ - activity: 5 mi fast
22
+ - activity: 70 min run
23
+ - activity: 3 mi run
24
+ - activity: 9 x 200
25
+ - activity: Rest or easy run
26
+ - activity: 35 min tempo
27
+ - activity: Rest or easy run
28
+ - activity: Rest
29
+ - activity: 5K Test
30
+ - activity: 3 mi run
31
+ - activity: 7 x 400
32
+ - activity: Rest or easy run
33
+ - activity: 40 min tempo
34
+ - activity: Rest
35
+ - activity: 5 mi fast
36
+ - activity: 75 min run
37
+ - activity: 3 mi run
38
+ - activity: 10 x 200
39
+ - activity: Rest or easy run
40
+ - activity: 40 min tempo
41
+ - activity: Rest
42
+ - activity: 6 mi fast
43
+ - activity: 85 min run
44
+ - activity: 3 mi run
45
+ - activity: 8 x 400
46
+ - activity: Rest or easy run
47
+ - activity: 45 min tempo
48
+ - activity: Rest
49
+ - activity: 6 mi fast
50
+ - activity: 90 min run
51
+ - activity: 2 mi run
52
+ - activity: 6 x 200
53
+ - activity: 30 min tempo
54
+ - activity: Rest or easy run
55
+ - activity: Rest
56
+ - activity: Rest
57
+ - activity: 5K Race
@@ -0,0 +1,8 @@
1
+ module RunIcal
2
+ module Data
3
+ class Advanced8K
4
+ DESCRIPTION = "8-K - Advanced"
5
+ DATA = YAML.safe_load_file(File.join(__dir__, 'advanced_8_k.yaml'), symbolize_names: true)
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,57 @@
1
+ ---
2
+ - activity: 3 mi run + strength
3
+ - activity: 30 min tempo run
4
+ - activity: 6 x 400 mile pace
5
+ - activity: 4 mi run + strength
6
+ - activity: Rest or 3 mi run
7
+ - activity: Pace 4 total /2 pace
8
+ - activity: 6 mi run
9
+ - activity: 3 mi run + strength
10
+ - activity: 35 min tempo run
11
+ - activity: 7 x 400 mile pace
12
+ - activity: 5 mi run + strength
13
+ - activity: Rest or 3 mi run
14
+ - activity: Pace 4 total /2 pace
15
+ - activity: 7 mi run
16
+ - activity: 3 mi run + strength
17
+ - activity: 30 min tempo run
18
+ - activity: 5 x 400 mile pace
19
+ - activity: 3 mi run + strength
20
+ - activity: Rest or 3 mi run
21
+ - activity: Pace 5 total /2 pace
22
+ - activity: 4 mi run
23
+ - activity: 3 mi run + strength
24
+ - activity: 30 min tempo run
25
+ - activity: 8 x 400 mile pace
26
+ - activity: 5 mi run + strength
27
+ - activity: Rest or 3 mi run
28
+ - activity: Pace 5 total /2 pace
29
+ - activity: 7 mi run
30
+ - activity: 3 mi run + strength
31
+ - activity: 45 min tempo run
32
+ - activity: 9 x 400 mile pace
33
+ - activity: 6 mi run + strength
34
+ - activity: Rest or 3 mi run
35
+ - activity: Pace 5 total /3 pace
36
+ - activity: 8 mi run (3/1)
37
+ - activity: 3 mi run + strength
38
+ - activity: 35 min tempo run
39
+ - activity: 6 x 400 mile pace
40
+ - activity: 3 mi run + strength
41
+ - activity: Rest or 3 mi run
42
+ - activity: Pace 6 total /3 pace
43
+ - activity: 6 mi run
44
+ - activity: 3 mi run + strength
45
+ - activity: 50 min tempo run
46
+ - activity: 10 x 400 mile pace
47
+ - activity: 6 mi run + strength
48
+ - activity: Rest or 3 mi run
49
+ - activity: Pace 5 total /3 pace
50
+ - activity: 8 mi run
51
+ - activity: 3 mi run + strength
52
+ - activity: 30 min tempo run
53
+ - activity: 5 x 400 mile pace
54
+ - activity: 3 mi run
55
+ - activity: Rest or 3 mi run
56
+ - activity: Rest
57
+ - activity: 8K Race
@@ -1,8 +1,8 @@
1
1
  module RunIcal
2
2
  module Data
3
3
  class HalfMarathonAdvanced
4
- DESCRIPTION = "Half Marathon - Advanced "
5
- DATA = [{:activity=>"3 m run"}, {:activity=>"6 x hill"}, {:activity=>"3 m run"}, {:activity=>"40 min tempo"}, {:activity=>"Rest"}, {:activity=>"3 m run"}, {:activity=>"90 min run (3/1)"}, {:activity=>"3 m run"}, {:activity=>"7 x 400 5-K pace"}, {:activity=>"3 m run"}, {:activity=>"45 min tempo"}, {:activity=>"Rest"}, {:activity=>"3 m pace"}, {:activity=>"90 min run"}, {:activity=>"3 m run"}, {:activity=>"7 x hill"}, {:activity=>"3 m run"}, {:activity=>"30 min tempo"}, {:activity=>"Rest or easy run"}, {:activity=>"Rest"}, {:activity=>"5-K Race"}, {:activity=>"3 m run"}, {:activity=>"8 x 400 5-K pace"}, {:activity=>"3 m run"}, {:activity=>"40 min tempo"}, {:activity=>"Rest"}, {:activity=>"3 m run"}, {:activity=>"90 min run (3/1)"}, {:activity=>"3 m run"}, {:activity=>"8 x hill"}, {:activity=>"3 m run"}, {:activity=>"45 min tempo"}, {:activity=>"Rest"}, {:activity=>"3 m pace"}, {:activity=>"90 min run"}, {:activity=>"3 m run"}, {:activity=>"8 x 400 5-K pace"}, {:activity=>"3 m run"}, {:activity=>"30 min tempo"}, {:activity=>"Rest or easy run"}, {:activity=>"Rest"}, {:activity=>"10-K Race"}, {:activity=>"3 m run"}, {:activity=>"4 x 800 10-K pace"}, {:activity=>"3 m run"}, {:activity=>"45 min tempo"}, {:activity=>"Rest"}, {:activity=>"4 m pace"}, {:activity=>"1:45 run (3/1)"}, {:activity=>"3 m run"}, {:activity=>"3 x 1600 race pace"}, {:activity=>"3 m run"}, {:activity=>"50 min tempo"}, {:activity=>"Rest"}, {:activity=>"5 m pace"}, {:activity=>"1:45 run"}, {:activity=>"3 m run"}, {:activity=>"5 x 800 10-K pace"}, {:activity=>"3 m run"}, {:activity=>"30 min tempo"}, {:activity=>"Rest or easy run"}, {:activity=>"Rest"}, {:activity=>"15-K Race"}, {:activity=>"3 m run"}, {:activity=>"4 x 1600 race pace"}, {:activity=>"3 m run"}, {:activity=>"55 min tempo"}, {:activity=>"Rest"}, {:activity=>"5 m pace"}, {:activity=>"2:00 run (3/1)"}, {:activity=>"3 m run"}, {:activity=>"6 x 800 10-K pace"}, {:activity=>"3 m run"}, {:activity=>"60 min tempo"}, {:activity=>"Rest"}, {:activity=>"3 m pace"}, {:activity=>"2:00 run"}, {:activity=>"3 m run"}, {:activity=>"6 x 400 5-K pace"}, {:activity=>"2 m run"}, {:activity=>"30 min tempo"}, {:activity=>"Rest"}, {:activity=>"Rest"}, {:activity=>"Half Marathon"}]
4
+ DESCRIPTION = "Half Marathon - Advanced"
5
+ DATA = YAML.safe_load_file(File.join(__dir__, 'half_marathon_advanced.yaml'), symbolize_names: true)
6
6
  end
7
7
  end
8
8
  end
@@ -0,0 +1,85 @@
1
+ ---
2
+ - activity: 3 mi run
3
+ - activity: 6 x hill
4
+ - activity: 3 mi run
5
+ - activity: 40 min tempo
6
+ - activity: Rest
7
+ - activity: 3 mi run
8
+ - activity: 90 min run (3/1)
9
+ - activity: 3 mi run
10
+ - activity: 7 x 400 5-K pace
11
+ - activity: 3 mi run
12
+ - activity: 45 min tempo
13
+ - activity: Rest
14
+ - activity: 3 mi pace
15
+ - activity: 90 min run
16
+ - activity: 3 mi run
17
+ - activity: 7 x hill
18
+ - activity: 3 mi run
19
+ - activity: 30 min tempo
20
+ - activity: Rest or easy run
21
+ - activity: Rest
22
+ - activity: 5-K Race
23
+ - activity: 3 mi run
24
+ - activity: 8 x 400 5-K pace
25
+ - activity: 3 mi run
26
+ - activity: 40 min tempo
27
+ - activity: Rest
28
+ - activity: 3 mi run
29
+ - activity: 90 min run (3/1)
30
+ - activity: 3 mi run
31
+ - activity: 8 x hill
32
+ - activity: 3 mi run
33
+ - activity: 45 min tempo
34
+ - activity: Rest
35
+ - activity: 3 mi pace
36
+ - activity: 90 min run
37
+ - activity: 3 mi run
38
+ - activity: 8 x 400 5-K pace
39
+ - activity: 3 mi run
40
+ - activity: 30 min tempo
41
+ - activity: Rest or easy run
42
+ - activity: Rest
43
+ - activity: 10-K Race
44
+ - activity: 3 mi run
45
+ - activity: 4 x 800 10-K pace
46
+ - activity: 3 mi run
47
+ - activity: 45 min tempo
48
+ - activity: Rest
49
+ - activity: 4 mi pace
50
+ - activity: 1:45 run (3/1)
51
+ - activity: 3 mi run
52
+ - activity: 3 x 1600 race pace
53
+ - activity: 3 mi run
54
+ - activity: 50 min tempo
55
+ - activity: Rest
56
+ - activity: 5 mi pace
57
+ - activity: 1:45 run
58
+ - activity: 3 mi run
59
+ - activity: 5 x 800 10-K pace
60
+ - activity: 3 mi run
61
+ - activity: 30 min tempo
62
+ - activity: Rest or easy run
63
+ - activity: Rest
64
+ - activity: 15-K Race
65
+ - activity: 3 mi run
66
+ - activity: 4 x 1600 race pace
67
+ - activity: 3 mi run
68
+ - activity: 55 min tempo
69
+ - activity: Rest
70
+ - activity: 5 mi pace
71
+ - activity: 2:00 run (3/1)
72
+ - activity: 3 mi run
73
+ - activity: 6 x 800 10-K pace
74
+ - activity: 3 mi run
75
+ - activity: 60 min tempo
76
+ - activity: Rest
77
+ - activity: 3 mi pace
78
+ - activity: 2:00 run
79
+ - activity: 3 mi run
80
+ - activity: 6 x 400 5-K pace
81
+ - activity: 2 mi run
82
+ - activity: 30 min tempo
83
+ - activity: Rest
84
+ - activity: Rest
85
+ - activity: Half Marathon
@@ -2,7 +2,7 @@ module RunIcal
2
2
  module Data
3
3
  class HalfMarathonHM3
4
4
  DESCRIPTION = "Half Marathon - HM3"
5
- DATA = [{:activity=>"Rest"}, {:activity=>"4 m run"}, {:activity=>"30 min cross"}, {:activity=>"3 m run"}, {:activity=>"Rest"}, {:activity=>" 6 m run"}, {:activity=>"30 min cross"}, {:activity=>"Rest"}, {:activity=>"4 m run"}, {:activity=>"35 min cross"}, {:activity=>"30 min trempo"}, {:activity=>"Rest"}, {:activity=>"6 m run"}, {:activity=>"35 min cross"}, {:activity=>"Rest"}, {:activity=>"5 m run"}, {:activity=>"40 min cross"}, {:activity=>"3 m pace"}, {:activity=>"Rest"}, {:activity=>"7 m run"}, {:activity=>"40 min cross"}, {:activity=>"Rest"}, {:activity=>"5 m run"}, {:activity=>"45 min cross"}, {:activity=>"4 m run"}, {:activity=>"Rest"}, {:activity=>"7 m run"}, {:activity=>"45 min cross"}, {:activity=>"Rests"}, {:activity=>"4 m run"}, {:activity=>"50 min cross"}, {:activity=>"40 min tempo"}, {:activity=>"Rest"}, {:activity=>"8 m run"}, {:activity=>"50 min cross"}, {:activity=>"Rest"}, {:activity=>"4 m run"}, {:activity=>"30 min cross"}, {:activity=>"3 m pace"}, {:activity=>"Rest or easy run"}, {:activity=>"Rest"}, {:activity=>"5-K Race"}, {:activity=>"Rest"}, {:activity=>"6 m run"}, {:activity=>"50 min cross"}, {:activity=>"5 m run"}, {:activity=>"Rest"}, {:activity=>"9 m run"}, {:activity=>"50 min cross"}, {:activity=>"Rest"}, {:activity=>"6 m run"}, {:activity=>"50 min cross"}, {:activity=>"50 min tempo"}, {:activity=>"Rest"}, {:activity=>"9 m run"}, {:activity=>"50 min cross"}, {:activity=>"Rest"}, {:activity=>"4 m run"}, {:activity=>"30 min cross"}, {:activity=>"3 m pace"}, {:activity=>"Rest or easy run"}, {:activity=>"Rest"}, {:activity=>"10-K Race"}, {:activity=>"Rest"}, {:activity=>"6 m run"}, {:activity=>"60 min cross"}, {:activity=>"6 m run"}, {:activity=>"Rest"}, {:activity=>"10 m run"}, {:activity=>"60 min cross"}, {:activity=>"Rest"}, {:activity=>"6 m run"}, {:activity=>"60 min cross"}, {:activity=>"60 min tempo"}, {:activity=>"Rest"}, {:activity=>"10 m run"}, {:activity=>"60 min cross"}, {:activity=>"Rest"}, {:activity=>"4 m run"}, {:activity=>"30 min cross"}, {:activity=>"3 m pace"}, {:activity=>"Rest"}, {:activity=>"Rest"}, {:activity=>"Half Marathon"}]
5
+ DATA = YAML.safe_load_file(File.join(__dir__, 'half_marathon_hm3.yaml'), symbolize_names: true)
6
6
  end
7
7
  end
8
8
  end