From 95955abaa339098755a214cfcadf87c90211fe64 Mon Sep 17 00:00:00 2001 From: erdgeist Date: Wed, 1 Jul 2026 00:24:10 +0200 Subject: Add RRULE humanizer and wire events into nodes#show - app/models/concerns/rrule_humanizer.rb: new concern included into Event, renders recurring schedule as natural-language German or English from RRULE string; handles WEEKLY/MONTHLY, biweekly (INTERVAL=2), ordinal weekday positions (1TU, -1TH, -2WE), BYMONTH single-month exclusions (December pause convention); gracefully returns nil for COUNT/UNTIL/unrecognized shapes - test/models/concerns/rrule_humanizer_test.rb: 15 tests covering all distinct RRULE shapes found in production data - app/helpers/nodes_helper.rb: add event_schedule_text helper combining humanize_rrule with start_time formatting - app/views/nodes/show.html.erb: add events row, conditionally rendered when node has associated events - config/locales/de.yml, en.yml: add event_schedule_time, event_schedule_unrecognized, event_schedule_none keys --- app/helpers/nodes_helper.rb | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'app/helpers/nodes_helper.rb') diff --git a/app/helpers/nodes_helper.rb b/app/helpers/nodes_helper.rb index 4293628d..329bcc53 100644 --- a/app/helpers/nodes_helper.rb +++ b/app/helpers/nodes_helper.rb @@ -43,4 +43,20 @@ module NodesHelper link_to('add event', new_event_path(:node_id => @node.id)) ]) end + + def event_schedule_text(event) + if event.rrule.present? + recurrence = event.humanize_rrule(I18n.locale) + if recurrence + time = event.start_time&.strftime("%H:%M") + time ? "#{recurrence} #{t(:event_schedule_time, time: time)}" : recurrence + else + "#{event.rrule} (#{t(:event_schedule_unrecognized)})" + end + elsif event.start_time + I18n.l(event.start_time, format: :long) + else + t(:event_schedule_none) + end + end end -- cgit v1.3