39 lines
1.1 KiB
Ruby
39 lines
1.1 KiB
Ruby
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
|