Sha256: 490ee898b3d4700a0191633003f11192184e6b84886996edcf0a7670b9e7444c

Contents?: true

Size: 1.6 KB

Versions: 33

Compression:

Stored size: 1.6 KB

Contents

class Message < ApplicationRecord

  belongs_to :discussion, optional: true
  belongs_to :assignment, foreign_key: :submission_id, primary_key: :submission_id, optional: true
  has_one :exercise, through: :assignment

  validates_presence_of :content, :sender
  validates_presence_of :submission_id, :unless => :discussion_id?
  markdown_on :content

  def notify!
    Mumukit::Nuntius.notify! 'student-messages', to_resource_h unless Organization.silenced?
  end

  def from_initiator?
    sender_user == discussion&.initiator
  end

  def from_user?(user)
    sender_user == user
  end

  def sender_user
    User.find_by(uid: sender)
  end

  def authorized?(user)
    from_user?(user) || user&.moderator_here?
  end

  def authorize!(user)
    raise Mumukit::Auth::UnauthorizedAccessError unless authorized?(user)
  end

  def to_resource_h
    as_json(except: [:id, :type, :discussion_id, :approved],
            include: {exercise: {only: [:bibliotheca_id]}})
      .merge(organization: Organization.current.name)
  end

  def read!
    update! read: true
  end

  def toggle_approved!
    toggle! :approved
  end

  def self.parse_json(json)
    message = json.delete 'message'
    json
      .except('uid', 'exercise_id')
      .merge(message)
  end

  def self.read_all!
    update_all read: true
  end

  def self.import_from_resource_h!(json)
    message_data = parse_json json
    Organization.find_by!(name: message_data.delete('organization')).switch!

    if message_data['submission_id'].present?
      Assignment.find_by(submission_id: message_data.delete('submission_id'))&.receive_answer! message_data
    end
  end
end

Version data entries

33 entries across 33 versions & 2 rubygems

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