From b36aad2d010208cfc49a18e321c677394d753c76 Mon Sep 17 00:00:00 2001 From: "M. Hakeem" <721462+mhakeem@users.noreply.github.com> Date: Sun, 13 Sep 2026 08:00:19 +0000 Subject: [PATCH 01/12] Rebrand schedule for Rocky Mountain Ruby: Mon/Tue day anchors + real RMR schedule RMR runs Mon-Tue (Sep 28-29, 2026) vs BRR's Wed-Sat, so this replaces the wed/thu/fri/sat/sun day-anchor scheme with sun/mon/tue throughout: - config/schedule.yml: full replacement with the real 28-session RMR schedule (fetched from their live Sessionize feed, embed xxmulsug), plus 3 placeholder items (pre-conference meetup, Hack Day, a volunteer slot) seeded hidden (is_public: false) since none of these are on RMR's published schedule yet. - ScheduleItem: DAY_META, CONFERENCE_DATES, and the `ordered` scope's SQL CASE now use sun/mon/tue. HACK_DAY_SLUG -> "tue-hackday" so admin Hack Projects (which does a hard find_by! on that slug) keeps working. DEFAULT_PLAN_SLUGS emptied - RMR has no equivalent to BRR's one-off "Mystery Activity" auto-add. - db/seeds/schedule.rb: now reads per-item is_public/volunteer_capacity from the YAML (needed for the hidden placeholders), and the obsolete- slug cleanup list covers every prior BRR slug so reseeding a BRR-seeded DB cleans up correctly. - Two controller "new item" day defaults and two cosmetic form/doc strings updated to match. - 37 test files: day literals moved to valid anchors, HACK_DAY_SLUG references fixed, the DEFAULT_PLAN_SLUGS coverage test rewritten to stub the constant (since it's empty for RMR), and hardcoded 2026-04-30 dates moved to real September dates. Verified: full suite green. See RMR_FORK_PLAN.md for the broader fork plan this is step 1 of. --- .../admin/schedule_items_controller.rb | 2 +- app/controllers/schedule_items_controller.rb | 2 +- app/models/schedule_item.rb | 33 +- app/views/admin/schedule_items/_form.html.erb | 4 +- app/views/shared/_day_filter.html.erb | 2 +- config/schedule.yml | 312 ++++++++---------- db/seeds/schedule.rb | 18 +- .../admin/dashboard_controller_test.rb | 20 +- .../embassy_applications_controller_test.rb | 4 +- .../admin/hack_projects_controller_test.rb | 4 +- .../lightning_talk_signups_controller_test.rb | 2 +- .../admin/lightning_talks_controller_test.rb | 2 +- .../admin/schedule_items_controller_test.rb | 60 ++-- .../admin/users_controller_test.rb | 18 +- .../volunteer_signups_controller_test.rb | 4 +- .../admin/volunteer_slots_controller_test.rb | 8 +- .../admin/volunteers_controller_test.rb | 4 +- .../embassy_bookings_controller_test.rb | 2 +- .../lightning_talk_signups_controller_test.rb | 2 +- .../meal_spot_rsvps_controller_test.rb | 6 +- .../controllers/meal_spots_controller_test.rb | 6 +- test/controllers/plan_controller_test.rb | 22 +- .../controllers/plan_items_controller_test.rb | 26 +- test/controllers/schedule_controller_test.rb | 6 +- .../schedule_items_controller_test.rb | 14 +- test/helpers/meal_spots_helper_test.rb | 2 +- test/integration/hack_projects_test.rb | 6 +- test/integration/plan_test.rb | 40 +-- test/integration/schedule_browsing_test.rb | 48 +-- test/models/embassy_booking_test.rb | 2 +- test/models/lightning_talk_signup_test.rb | 4 +- test/models/meal_spot_rsvp_test.rb | 8 +- test/models/meal_spot_test.rb | 16 +- test/models/meal_spot_transport_test.rb | 2 +- test/models/plan_item_test.rb | 8 +- test/models/schedule_item_test.rb | 33 +- test/models/seed_test.rb | 58 +++- test/models/user_test.rb | 52 +-- 38 files changed, 438 insertions(+), 424 deletions(-) diff --git a/app/controllers/admin/schedule_items_controller.rb b/app/controllers/admin/schedule_items_controller.rb index 9281092..b5078f8 100644 --- a/app/controllers/admin/schedule_items_controller.rb +++ b/app/controllers/admin/schedule_items_controller.rb @@ -34,7 +34,7 @@ def index def new requested_kind = ScheduleItem.kinds.key?(params[:kind].to_s) ? params[:kind] : :talk - @schedule_item = ScheduleItem.new(day: "fri", kind: requested_kind, is_public: true, flexible: false) + @schedule_item = ScheduleItem.new(day: "mon", kind: requested_kind, is_public: true, flexible: false) end def create diff --git a/app/controllers/schedule_items_controller.rb b/app/controllers/schedule_items_controller.rb index c4ee273..d622a55 100644 --- a/app/controllers/schedule_items_controller.rb +++ b/app/controllers/schedule_items_controller.rb @@ -3,7 +3,7 @@ class ScheduleItemsController < ApplicationController def new @schedule_item = current_user.created_schedule_items.build( - day: params[:day] || "sat", + day: params[:day] || "mon", flexible: false, is_public: ActiveModel::Type::Boolean.new.cast(params.dig(:schedule_item, :is_public)) ) diff --git a/app/models/schedule_item.rb b/app/models/schedule_item.rb index 486dba1..466d961 100644 --- a/app/models/schedule_item.rb +++ b/app/models/schedule_item.rb @@ -1,10 +1,11 @@ class ScheduleItem < ApplicationRecord EMBASSY_MODES = %w[new_passport stamping passport_pickup].freeze - HACK_DAY_SLUG = "sat-hackday" + HACK_DAY_SLUG = "tue-hackday" DEFAULT_PLAN_KINDS = %w[talk reception].freeze # One-off slugs that don't fit a default-plan kind but are still part of - # the main programming every attendee is auto-RSVPed to. - DEFAULT_PLAN_SLUGS = %w[thu-mystery].freeze + # the main programming every attendee is auto-RSVPed to. None for RMR + # currently — the BRR fork used this for a one-off "Mystery Activity". + DEFAULT_PLAN_SLUGS = [].freeze belongs_to :created_by, class_name: "User", optional: true has_many :plan_items, dependent: :destroy @@ -34,19 +35,15 @@ class ScheduleItem < ApplicationRecord validate :capacity_present_for_offered_modes, if: :embassy? DAY_META = { - "wed" => { label: "Wednesday", date: "April 29", subtitle: "Pre-Conference" }, - "thu" => { label: "Thursday", date: "April 30", subtitle: "Conference Day 1" }, - "fri" => { label: "Friday", date: "May 1", subtitle: "Conference Day 2" }, - "sat" => { label: "Saturday", date: "May 2", subtitle: "Activities & Ruby Embassy" }, - "sun" => { label: "Sunday", date: "May 3", subtitle: "Departures" } + "sun" => { label: "Sunday", date: "September 27", subtitle: "Pre-Conference" }, + "mon" => { label: "Monday", date: "September 28", subtitle: "Conference Day 1" }, + "tue" => { label: "Tuesday", date: "September 29", subtitle: "Conference Day 2" } }.freeze CONFERENCE_DATES = { - "wed" => Date.new(2026, 4, 29), - "thu" => Date.new(2026, 4, 30), - "fri" => Date.new(2026, 5, 1), - "sat" => Date.new(2026, 5, 2), - "sun" => Date.new(2026, 5, 3) + "sun" => Date.new(2026, 9, 27), + "mon" => Date.new(2026, 9, 28), + "tue" => Date.new(2026, 9, 29) }.freeze private_constant :CONFERENCE_DATES @@ -66,12 +63,10 @@ def self.upcoming_day_keys(today = Date.current) order( Arel.sql( "CASE day " \ - "WHEN 'wed' THEN 1 " \ - "WHEN 'thu' THEN 2 " \ - "WHEN 'fri' THEN 3 " \ - "WHEN 'sat' THEN 4 " \ - "WHEN 'sun' THEN 5 " \ - "ELSE 6 END" + "WHEN 'sun' THEN 1 " \ + "WHEN 'mon' THEN 2 " \ + "WHEN 'tue' THEN 3 " \ + "ELSE 4 END" ), :sort_time ) diff --git a/app/views/admin/schedule_items/_form.html.erb b/app/views/admin/schedule_items/_form.html.erb index e88e3a5..362a764 100644 --- a/app/views/admin/schedule_items/_form.html.erb +++ b/app/views/admin/schedule_items/_form.html.erb @@ -74,7 +74,7 @@
<%= f.label :host_url, "Speaker profile URL", class: "label" %> <%= f.url_field :host_url, class: "input", - placeholder: "https://blueridgeruby.com/speakers/..." %> + placeholder: "https://rockymtnruby.dev/#program" %>

Optional. If set, the speaker's name links to this URL on /schedule and /plan. Update this whenever you change the host so the link points to the right person. @@ -102,7 +102,7 @@

<%= f.check_box :flexible %> - <%= f.label :flexible, "Flexible / TBD (Saturday dashed treatment)" %> + <%= f.label :flexible, "Flexible / TBD (dashed treatment)" %>
diff --git a/app/views/shared/_day_filter.html.erb b/app/views/shared/_day_filter.html.erb index b1116ee..8194755 100644 --- a/app/views/shared/_day_filter.html.erb +++ b/app/views/shared/_day_filter.html.erb @@ -1,7 +1,7 @@ <%# locals: base_path - String, e.g. admin_schedule_items_path - selected_day - String or nil, the currently active day key ("wed", "thu", etc.) + selected_day - String or nil, the currently active day key ("sun", "mon", etc.) %>