class CastingCallInterview < ApplicationRecord belongs_to :casting_call has_many_attached :files has_secure_token validates :performer_name, presence: true validate :zoom_meeting_url_validation scope :completed, -> { where.not(interviewed_at: nil) } def join_zoom_meeting_url uri = URI.parse(self.zoom_meeting_url) zoom_meeting_id = uri.path.gsub("/j/", "") zoom_meeting_pwd = uri.query.gsub("pwd=", "") "zoommtg://zoom.us/join?confno=#{zoom_meeting_id}&pwd=#{zoom_meeting_pwd}" end def zip_file_name "#{self.casting_call.title.parameterize}_#{self.performer_name.parameterize}_#{Time.now.strftime('%Y-%m-%d_%H-%M-%S')}" end def zoom_meeting_url_validation # valid url format : # https://us01web.zoom.us/j/12345?pwd=Ab103odw3ok343ko valid_url_regex = %r{^https\://[a-z0-9]+\.zoom.us/j/[0-9]+\?pwd\=.+} return true if zoom_meeting_url.match valid_url_regex errors.add(:base, invalid_meeting_url_message) end private def invalid_meeting_url_message I18n.t('casting_call_interviews.validation_errors.invalid_meeting_url') end end