coach_zed 0.5.1 → 0.5.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +5 -0
- data/lib/coach_zed/version.rb +1 -1
- data/lib/coach_zed.rb +29 -5
- data/sig/coach_zed.rbs +5 -2
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 49b31d374b8070d1b4a9d184b6f33ea18aa97deb8e74de9910c527417992aad6
|
|
4
|
+
data.tar.gz: 13131068767a3a47e124b05c07d267b1f4d4722efd5619abf63ef548c1166033
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: f794bdf46501e773f97fdc7808556e537933e5aa2b5fc9ae9a84645d858d8802dd4e8793217aaabff9931c5feef83aa1e9736acb503b65f1de7b0281d532f2d9
|
|
7
|
+
data.tar.gz: 23f97a157e3cb5410e01c09a1d9e975149e688a5a07495483e82e8d30fe2d049dc93d92a013cfae41c0b04b9762b9b762bb756844f0b05f725b2f72d186a21e1
|
data/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
## [](https://github.com/rossta/coach_zed/compare/v0.5.1...v) (2026-06-17)
|
|
2
|
+
|
|
3
|
+
### Bug Fixes
|
|
4
|
+
|
|
5
|
+
* split refresh and append schedule modes ([51455f1](https://github.com/rossta/coach_zed/commit/51455f13171495365f92a748fa994d6540a77123))
|
|
1
6
|
## [](https://github.com/rossta/coach_zed/compare/v0.5.0...v) (2026-06-16)
|
|
2
7
|
|
|
3
8
|
### Bug Fixes
|
data/lib/coach_zed/version.rb
CHANGED
data/lib/coach_zed.rb
CHANGED
|
@@ -112,12 +112,13 @@ class CoachZed
|
|
|
112
112
|
@existing_feed_path = resolved_existing_feed_path && Pathname(resolved_existing_feed_path)
|
|
113
113
|
end
|
|
114
114
|
|
|
115
|
-
def generate_schedule(start_date:, consultation_prompt: nil, consultation_prompt_path: nil)
|
|
115
|
+
def generate_schedule(start_date:, consultation_prompt: nil, consultation_prompt_path: nil, generation_mode: nil)
|
|
116
116
|
prompt_text = resolve_prompt_text(consultation_prompt, consultation_prompt_path)
|
|
117
117
|
catalog = Catalog::Loader.new(@workout_catalog_dir).load
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
118
|
+
generation_mode = normalize_generation_mode(generation_mode)
|
|
119
|
+
existing_feed = load_existing_feed if generation_mode != :refresh
|
|
120
|
+
start_date = generation_start_date(start_date, existing_feed:, generation_mode:)
|
|
121
|
+
generation_days = generation_days_for(start_date, generation_mode:, existing_feed:)
|
|
121
122
|
existing_feed_context = existing_feed&.to_context(limit_days: 28)
|
|
122
123
|
schedule_key = schedule_key_for(prompt_text, start_date, catalog, generation_days, existing_feed_context)
|
|
123
124
|
prompt = PromptBuilder.new(
|
|
@@ -190,13 +191,36 @@ class CoachZed
|
|
|
190
191
|
FeedReader.load_existing(existing_feed_path)
|
|
191
192
|
end
|
|
192
193
|
|
|
193
|
-
def
|
|
194
|
+
def normalize_generation_mode(value)
|
|
195
|
+
return nil if value.nil?
|
|
196
|
+
|
|
197
|
+
case value.to_sym
|
|
198
|
+
when :refresh, :append
|
|
199
|
+
value.to_sym
|
|
200
|
+
else
|
|
201
|
+
raise ArgumentError, "unsupported generation mode: #{value}"
|
|
202
|
+
end
|
|
203
|
+
end
|
|
204
|
+
|
|
205
|
+
def generation_start_date(start_date, existing_feed:, generation_mode:)
|
|
206
|
+
return normalize_date(start_date) if generation_mode == :refresh
|
|
207
|
+
|
|
194
208
|
last_date = existing_feed&.last_date
|
|
195
209
|
return normalize_date(start_date) if last_date.nil?
|
|
196
210
|
|
|
197
211
|
last_date + 1
|
|
198
212
|
end
|
|
199
213
|
|
|
214
|
+
def generation_days_for(start_date, generation_mode:, existing_feed:)
|
|
215
|
+
return 7 if generation_mode == :append && existing_feed
|
|
216
|
+
return 28 if generation_mode == :append
|
|
217
|
+
return 7 if existing_feed
|
|
218
|
+
return 28 if generation_mode.nil?
|
|
219
|
+
|
|
220
|
+
upcoming_sunday = start_date + ((7 - start_date.wday) % 7)
|
|
221
|
+
(upcoming_sunday - start_date).to_i + 29
|
|
222
|
+
end
|
|
223
|
+
|
|
200
224
|
def schedule_key_for(prompt_text, start_date, catalog, generation_days, existing_feed_context)
|
|
201
225
|
Digest::SHA256.hexdigest(
|
|
202
226
|
[
|
data/sig/coach_zed.rbs
CHANGED
|
@@ -65,7 +65,8 @@ class CoachZed
|
|
|
65
65
|
def generate_schedule: (
|
|
66
66
|
start_date: untyped,
|
|
67
67
|
?consultation_prompt: String?,
|
|
68
|
-
?consultation_prompt_path: String
|
|
68
|
+
?consultation_prompt_path: String?,
|
|
69
|
+
?generation_mode: Symbol?
|
|
69
70
|
) -> Result
|
|
70
71
|
|
|
71
72
|
private
|
|
@@ -74,7 +75,9 @@ class CoachZed
|
|
|
74
75
|
def resolve_prompt_text: (String? consultation_prompt, String? consultation_prompt_path) -> String
|
|
75
76
|
def normalize_date: (untyped value) -> Date
|
|
76
77
|
def load_existing_feed: -> CoachZed::FeedReader?
|
|
77
|
-
def
|
|
78
|
+
def normalize_generation_mode: (untyped value) -> Symbol?
|
|
79
|
+
def generation_start_date: (untyped start_date, existing_feed: CoachZed::FeedReader?, generation_mode: Symbol?) -> Date
|
|
80
|
+
def generation_days_for: (Date start_date, generation_mode: Symbol?, existing_feed: CoachZed::FeedReader?) -> Integer
|
|
78
81
|
def schedule_key_for: (String prompt_text, Date start_date, Array[CoachZed::Catalog::Entry] catalog, Integer generation_days, String? existing_feed_context) -> String
|
|
79
82
|
def catalog_digest: (Array[CoachZed::Catalog::Entry] catalog) -> String
|
|
80
83
|
def normalize_schedule: (Hash[String, untyped] schedule, start_date: Date, prompt_text: String, schedule_key: String, catalog: Array[CoachZed::Catalog::Entry], generation_days: Integer) -> Hash[String, untyped]
|