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
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: 011dd6fbda180b144d3293c51cec404af07518f6ddc059b1ce36fe3d35a63436
|
|
4
|
+
data.tar.gz: f8f78bebb340cf8d8d70953689187a640370031f8e47eaef4457ffad6c619e6d
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
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
data/.rubocop.yml
CHANGED
|
@@ -1,2 +1,35 @@
|
|
|
1
1
|
AllCops:
|
|
2
|
-
TargetRubyVersion:
|
|
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
|
+
[](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
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
|
|
6
|
+
require "optparse"
|
|
6
7
|
|
|
7
8
|
Options = Struct.new(:date, :program, :output)
|
|
8
9
|
|
|
9
10
|
class Parser
|
|
10
|
-
def self.parse(
|
|
11
|
+
def self.parse(argv)
|
|
11
12
|
args = Options.new
|
|
13
|
+
option_parser(args).parse!(argv)
|
|
14
|
+
args
|
|
15
|
+
end
|
|
12
16
|
|
|
13
|
-
|
|
17
|
+
def self.option_parser(args)
|
|
18
|
+
OptionParser.new do |opts|
|
|
14
19
|
opts.banner = "Usage: run_ical [options]"
|
|
15
|
-
|
|
16
|
-
opts.on("-
|
|
17
|
-
|
|
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.
|
|
45
|
-
|
|
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
|
|
5
|
-
DATA =
|
|
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
|
|
5
|
-
DATA =
|
|
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 =
|
|
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,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
|
|
5
|
-
DATA =
|
|
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 =
|
|
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
|