From f712dacfaf0446943947236ed9674cbee4003d5e Mon Sep 17 00:00:00 2001 From: Akira Matsuda Date: Tue, 23 Dec 2025 12:20:06 +0900 Subject: [PATCH 1/5] Define Event#state enum --- app/models/event.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/models/event.rb b/app/models/event.rb index a4992c022..806cfdd60 100644 --- a/app/models/event.rb +++ b/app/models/event.rb @@ -1,5 +1,5 @@ class Event < ApplicationRecord - attribute :state, :string, default: 'draft' + enum :state, {draft: 'draft', open: 'open', closed: 'closed'}, default: :draft has_many :teammates, dependent: :destroy has_many :staff, through: :teammates, source: :user From 8606a8b86745e13adcecac53fe5e946e4cc35bce Mon Sep 17 00:00:00 2001 From: Akira Matsuda Date: Tue, 23 Dec 2025 12:21:12 +0900 Subject: [PATCH 2/5] Access Event#state with labels --- app/controllers/staff/events_controller.rb | 2 +- spec/lib/event_stats_spec.rb | 2 +- spec/support/shared_examples/an_open_event.rb | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/controllers/staff/events_controller.rb b/app/controllers/staff/events_controller.rb index effab3f1b..4dadb0469 100644 --- a/app/controllers/staff/events_controller.rb +++ b/app/controllers/staff/events_controller.rb @@ -46,7 +46,7 @@ def update def open_cfp authorize_update - if @event.update(state: Event::STATUSES[:open]) + if @event.update(state: :open) flash[:info] = "Your CFP was successfully opened." else flash['danger alert-confirm'] = "There was a problem opening your CFP: #{@event.errors.full_messages.to_sentence}" diff --git a/spec/lib/event_stats_spec.rb b/spec/lib/event_stats_spec.rb index ed088c46c..7f2aa0403 100644 --- a/spec/lib/event_stats_spec.rb +++ b/spec/lib/event_stats_spec.rb @@ -35,7 +35,7 @@ end context 'closed event' do - before { event.update(state: Event::STATUSES[:closed]) } + before { event.update(state: :closed) } it 'includes no track stats' do expect(subject.program).to have_key Track::NO_TRACK diff --git a/spec/support/shared_examples/an_open_event.rb b/spec/support/shared_examples/an_open_event.rb index ade4e252c..d9277bc98 100644 --- a/spec/support/shared_examples/an_open_event.rb +++ b/spec/support/shared_examples/an_open_event.rb @@ -1,5 +1,5 @@ RSpec.shared_examples_for 'an open event' do - let(:event) { create :event, name: 'Best Event', state: Event::STATUSES[:open] } + let(:event) { create :event, name: 'Best Event', state: :open } let(:withdrawn) { Proposal::State::WITHDRAWN } let(:accepted) { Proposal::State::ACCEPTED } From 6fe797239d14f37d544878b3a5b5dcd3809002b1 Mon Sep 17 00:00:00 2001 From: Akira Matsuda Date: Tue, 23 Dec 2025 12:21:48 +0900 Subject: [PATCH 3/5] Use defined Event.states to retrieve Enum values --- app/models/event.rb | 15 +++++++-------- app/views/staff/events/info.html.haml | 2 +- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/app/models/event.rb b/app/models/event.rb index 806cfdd60..0312eced1 100644 --- a/app/models/event.rb +++ b/app/models/event.rb @@ -48,8 +48,7 @@ def to_param slug end - validate :checklist_complete?, on: :update, - if: Proc.new { |e| e.state == STATUSES[:open] } + validate :checklist_complete?, on: :update, if: -> { state == Event.states[:open] } def initialize_speaker_emails SpeakerEmailTemplate::TYPES.each do |type| @@ -125,7 +124,7 @@ def draft? end def open? - state == STATUSES[:open] && (closes_at.nil? || closes_at > Time.current) + state == Event.states[:open] && (closes_at.nil? || closes_at > Time.current) end def closed? @@ -133,16 +132,16 @@ def closed? end def past_open? - state == STATUSES[:open] && closes_at < Time.current + state == Event.states[:open] && closes_at < Time.current end def status if open? - STATUSES[:open] + Event.states[:open] elsif draft? - STATUSES[:draft] + Event.states[:draft] else - STATUSES[:closed] + Event.states[:closed] end end @@ -231,7 +230,7 @@ def mention_names private def update_closes_at_if_manually_closed - if changes.key?(:state) && changes[:state] == [STATUSES[:open], STATUSES[:closed]] + if changes.key?(:state) && changes[:state] == [Event.states[:open], Event.states[:closed]] self.closes_at = Time.current end end diff --git a/app/views/staff/events/info.html.haml b/app/views/staff/events/info.html.haml index 6b7d3e253..ca13ececd 100644 --- a/app/views/staff/events/info.html.haml +++ b/app/views/staff/events/info.html.haml @@ -14,7 +14,7 @@ = link_to "Change Status", '#', class: "btn btn-primary", data: {action: 'click->status-toggle#show'} .status-dropdown.float-end{data: {status_toggle_target: 'dropdown'}} = form_for(event, url: update_status_event_staff_path(event)) do |f| - = f.select(:state, options_for_select(Event::STATUSES.values, f.object.state)) + = f.select(:state, options_for_select(Event.states.keys, f.object.state)) = link_to "Cancel", '#', class: "btn btn-danger", data: {action: 'click->status-toggle#hide'} = f.submit "Update Status", class: "btn btn-success" %h1 Event Info From b4a4a87292da5d93e0b24f0a26cc81d83c277e83 Mon Sep 17 00:00:00 2001 From: Akira Matsuda Date: Tue, 23 Dec 2025 12:22:48 +0900 Subject: [PATCH 4/5] AR Enum defines them --- app/models/event.rb | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/app/models/event.rb b/app/models/event.rb index 0312eced1..151980c69 100644 --- a/app/models/event.rb +++ b/app/models/event.rb @@ -30,8 +30,7 @@ class Event < ApplicationRecord store_accessor :speaker_notification_emails, :waitlist scope :a_to_z, -> { order('name ASC') } - scope :live, -> { where("state = 'open' and (closes_at is null or closes_at > ?)", Time.current) } - scope :not_draft, -> { where "state != 'draft'"} + scope :live, -> { open.where('closes_at is null or closes_at > ?', Time.current) } validates :name, presence: true validates :slug, presence: true, uniqueness: true @@ -119,10 +118,6 @@ def to_s name end - def draft? - state == STATUSES[:draft] - end - def open? state == Event.states[:open] && (closes_at.nil? || closes_at > Time.current) end From f0e1cd9d65c41ea9fd0aa3db6b5bb5f257b78a24 Mon Sep 17 00:00:00 2001 From: Akira Matsuda Date: Tue, 23 Dec 2025 12:22:56 +0900 Subject: [PATCH 5/5] Unused constant --- app/models/event.rb | 4 ---- 1 file changed, 4 deletions(-) diff --git a/app/models/event.rb b/app/models/event.rb index 151980c69..7aad51aca 100644 --- a/app/models/event.rb +++ b/app/models/event.rb @@ -39,10 +39,6 @@ class Event < ApplicationRecord before_validation :generate_slug before_save :update_closes_at_if_manually_closed - STATUSES = { draft: 'draft', - open: 'open', - closed: 'closed' } - def to_param slug end