41 lines
1.1 KiB
Ruby
41 lines
1.1 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
class GwEvent < ApplicationRecord
|
|
include GranblueEnums
|
|
|
|
has_many :crew_gw_participations, dependent: :destroy
|
|
has_many :crews, through: :crew_gw_participations
|
|
|
|
enum :element, ELEMENTS
|
|
|
|
validates :element, presence: true
|
|
validates :start_date, presence: true
|
|
validates :end_date, presence: true
|
|
validates :event_number, presence: true, uniqueness: true
|
|
|
|
validate :end_date_after_start_date
|
|
|
|
scope :upcoming, -> { where('start_date > ?', Date.current).order(start_date: :asc) }
|
|
scope :past, -> { where('end_date < ?', Date.current).order(start_date: :desc) }
|
|
scope :current, -> { where('start_date <= ? AND end_date >= ?', Date.current, Date.current) }
|
|
|
|
def active?
|
|
start_date <= Date.current && end_date >= Date.current
|
|
end
|
|
|
|
def upcoming?
|
|
start_date > Date.current
|
|
end
|
|
|
|
def finished?
|
|
end_date < Date.current
|
|
end
|
|
|
|
private
|
|
|
|
def end_date_after_start_date
|
|
return unless start_date.present? && end_date.present?
|
|
|
|
errors.add(:end_date, 'must be after start date') if end_date < start_date
|
|
end
|
|
end
|