class Event < ActiveRecord::Base belongs_to :region, foreign_key: 'region' has_many :notes has_one :related_city, foreign_key: :name, primary_key: :city, class_name: City validates_presence_of :title, :description, :city, :region, :url, :contact validates_format_of :url, with: /\Ahttps?:\/\/.*\z/ validates :contact, email: true validates :submitter, email: true scope :moderated, -> { where moderated: 1 } scope :past, -> { where('end_time < now()').order(start_time: :desc) } scope :future, -> { where('end_time >= now()').order(start_time: :asc) } scope :future_30, -> { where('start_time >= now() and end_time <= ?', Date.today + 30) .order(:start_time) } scope :year, -> year { where 'end_time >= ? and start_time < ?', "#{year}-1-1", "#{year.to_i+1}-1-1" } scope :month, -> year, month { where 'end_time >= ? and start_time <= ?', "#{year}-#{month.to_i-1}-23", "#{month == '12' ? year.to_i+1 : year}-#{month == '12' ? 1 : month.to_i+1}-7" } scope :region, -> region { where 'region = ? or locality', region } scope :tag, -> tag { where 'tags like ?', "%#{tag}%" } before_validation(on: :create) do self.submission_time = Date.today self.decision_time = Date.today if self.submitter.empty? self.submitter = self.contact end end before_create do self.secret = SecureRandom.urlsafe_base64(32)[0...32] self.moderator_mail_id = SecureRandom.urlsafe_base64(32)[0...32] self.submitter_mail_id = SecureRandom.urlsafe_base64(32)[0...32] end def same_day? start_time.to_date == end_time.to_date end end