Sha256: 5f18b6e345fc858b709cc897c8a8d77f767403b3210703894d52b68cb97800e3

Contents?: true

Size: 1.12 KB

Versions: 10

Compression:

Stored size: 1.12 KB

Contents

class Course < ApplicationRecord
  include Syncable
  include Mumukit::Platform::Course::Helpers

  validates_presence_of :slug, :shifts, :code, :days, :period, :description, :organization_id
  validates_uniqueness_of :slug
  belongs_to :organization

  has_many :invitations

  alias_attribute :name, :code

  def current_invitation
    invitations.where('expiration_date > ?', Time.now).take
  end

  def import_from_resource_h!(resource_h)
    update! Mumukit::Platform::Course::Helpers.slice_platform_json(resource_h)
  end

  def slug=(slug)
    s = Mumukit::Auth::Slug.parse(slug)

    self[:slug] = slug
    self[:code] = s.course
    self[:organization_id] = Organization.locate!(s.organization).id
  end

  def invite!(expiration_date)
    if closed?
      generate_invitation! expiration_date
    else
      current_invitation
    end
  end

  def closed?
    current_invitation.blank? || current_invitation.expired?
  end

  def generate_invitation!(expiration_date)
    invitation = invitations.build expiration_date: expiration_date, course: self
    invitation.save_and_notify!
  end

  def self.sync_key_id_field
    :slug
  end
end

Version data entries

10 entries across 10 versions & 1 rubygems

Version Path
mumuki-domain-6.5.1 app/models/course.rb
mumuki-domain-6.5.0 app/models/course.rb
mumuki-domain-6.4.3 app/models/course.rb
mumuki-domain-6.4.2 app/models/course.rb
mumuki-domain-6.4.1 app/models/course.rb
mumuki-domain-6.4.0 app/models/course.rb
mumuki-domain-6.2.2 app/models/course.rb
mumuki-domain-6.2.1 app/models/course.rb
mumuki-domain-6.3.0 app/models/course.rb
mumuki-domain-6.2.0 app/models/course.rb