Sha256: 1978638a9223c7eb0199cda4d7f23cfb49d8307a069f3a96cfb21a9454357e96

Contents?: true

Size: 1.04 KB

Versions: 3

Compression:

Stored size: 1.04 KB

Contents

class ExamRegistration < ApplicationRecord
  include WithTimedEnablement

  belongs_to :organization
  has_and_belongs_to_many :exams
  has_many :authorization_requests, class_name: 'ExamAuthorizationRequest', through: :exams

  enum authorization_criterion_type: %i(none passed_exercises), _prefix: :authorization_criterion

  before_save :ensure_valid_authorization_criterion!

  delegate :meets_authorization_criteria?, :process_request!, to: :authorization_criterion

  def authorization_criterion
    @authorization_criterion ||= ExamRegistration::AuthorizationCriterion.parse(authorization_criterion_type, authorization_criterion_value)
  end

  def ensure_valid_authorization_criterion!
    authorization_criterion.ensure_valid!
  end

  def start!(users)
    users.each &method(:notify_user!)
  end

  def process_requests!
    authorization_requests.each do |it|
      process_request! it
      it.try_authorize!
    end
  end

  private

  def notify_user!(user)
    Notification.create! organization: organization, user: user, target: self
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
mumuki-domain-8.5.0 app/models/exam_registration.rb
mumuki-domain-8.4.0 app/models/exam_registration.rb
mumuki-domain-8.3.1 app/models/exam_registration.rb