Sha256: 5ad648783a49cc73a4e6f5c63664bd24d1427734c83ebb081abeadea52e45e7c

Contents?: true

Size: 973 Bytes

Versions: 27

Compression:

Stored size: 973 Bytes

Contents

class Invitation < ApplicationRecord
  include Mumuki::Domain::Syncable

  belongs_to :course
  validates_uniqueness_of :code

  defaults do
    self.code ||= self.class.generate_code
  end

  def import_from_resource_h!(json)
    update! json.merge(course: Course.locate!(json[:course]))
  end

  def organization
    course.organization
  end

  def course_slug
    course.slug
  end

  def navigable_name
    I18n.t(:invitation_for, course: course_name)
  end

  def to_resource_h
    { code: code, course: course_slug, expiration_date: expiration_date }
  end

  def navigation_end?
    true
  end

  def to_param
    code
  end

  def expired?
    Time.now > expiration_date
  end

  def unexpired
    raise Mumuki::Domain::GoneError, "This invitation has already expired" if expired?
    self
  end

  def self.generate_code
    SecureRandom.urlsafe_base64 4
  end

  private

  def course_name
    course.name
  end

  def self.sync_key_id_field
    :code
  end
end

Version data entries

27 entries across 27 versions & 2 rubygems

Version Path
mumuki-domain-7.6.1 app/models/invitation.rb
mumuki-domain-7.6.0 app/models/invitation.rb
mumuki-laboratory-7.5.2 vendor/bundle/ruby/2.6.0/bundler/gems/mumuki-domain-ad16a5930cec/app/models/invitation.rb
mumuki-laboratory-7.5.1 vendor/bundle/ruby/2.3.0/bundler/gems/mumuki-domain-a059418e5fd8/app/models/invitation.rb
mumuki-domain-7.5.1 app/models/invitation.rb
mumuki-laboratory-7.5.0 vendor/bundle/ruby/2.6.0/bundler/gems/mumuki-domain-acb12583b793/app/models/invitation.rb
mumuki-domain-7.5.0 app/models/invitation.rb
mumuki-domain-7.4.1 app/models/invitation.rb
mumuki-domain-7.4.0 app/models/invitation.rb
mumuki-domain-7.3.2 app/models/invitation.rb
mumuki-domain-7.3.1 app/models/invitation.rb
mumuki-domain-7.2.3 app/models/invitation.rb
mumuki-domain-7.3.0 app/models/invitation.rb
mumuki-domain-7.2.2 app/models/invitation.rb
mumuki-domain-7.2.1 app/models/invitation.rb
mumuki-domain-7.2.0 app/models/invitation.rb
mumuki-laboratory-7.1.0 vendor/bundle/ruby/2.3.0/bundler/gems/mumuki-domain-925adf85cca8/app/models/invitation.rb
mumuki-domain-7.1.0 app/models/invitation.rb
mumuki-laboratory-7.0.12 vendor/bundle/ruby/2.3.0/bundler/gems/mumuki-domain-74da3d4af98c/app/models/invitation.rb
mumuki-domain-7.0.6 app/models/invitation.rb