class Mumuki::Classroom::Event::ProgressTransfer::Base

Attributes

indicator[R]
source_organization[R]

Public Class Methods

new(indicator, source_organization, destination_organization) click to toggle source
# File lib/mumuki/classroom/event/progress_transfer/base.rb, line 4
def initialize(indicator, source_organization, destination_organization)
  @indicator = indicator
  @source_organization = source_organization
  @destination_organization = destination_organization
end

Public Instance Methods

execute!() click to toggle source
# File lib/mumuki/classroom/event/progress_transfer/base.rb, line 10
def execute!
  raise ActiveRecord::RecordNotFound, "Mumuki::Classroom::Student not found" unless old_student && new_student

  new_student.destroy_progress_for_guide!(indicator.content)
  destination_organization.switch!

  indicator.assignments.each do |assignment|
    transfer_sibling_for(assignment)&.update! organization: destination_organization.name,
                                              course: new_course,
                                              guide: guide_h
  end

  transfer_guide_progress!
  update_student!(old_student)
  update_student!(new_student)
end

Private Instance Methods

classroom_sibling_for(assignment) click to toggle source
# File lib/mumuki/classroom/event/progress_transfer/base.rb, line 49
def classroom_sibling_for(assignment)
  Mumuki::Classroom::Assignment.classroom_sibling_for(assignment, source_organization.name)
end
destination_organization() click to toggle source
# File lib/mumuki/classroom/event/progress_transfer/base.rb, line 34
def destination_organization
  @destination_organization
end
guide() click to toggle source
# File lib/mumuki/classroom/event/progress_transfer/base.rb, line 86
def guide
  indicator.content
end
guide_h() click to toggle source
# File lib/mumuki/classroom/event/progress_transfer/base.rb, line 94
def guide_h
  @guide_h ||= guide.as_json(
    only: [:slug, :name],
    include: {
      language: {
        only: [:name, :devicon]
      }
    }
  ).merge(
    parent: {
      type: guide_parent.class.to_s,
      name: guide.name,
      position: guide_parent.number,
      chapter: guide.chapter.as_json(only: [:id], methods: [:name])
    }
  )
end
guide_parent() click to toggle source
# File lib/mumuki/classroom/event/progress_transfer/base.rb, line 90
def guide_parent
  guide.usage_in_organization
end
guide_progress() click to toggle source
# File lib/mumuki/classroom/event/progress_transfer/base.rb, line 45
def guide_progress
  Mumuki::Classroom::GuideProgress.find_by(guide_progress_query)
end
guide_progress_query() click to toggle source
# File lib/mumuki/classroom/event/progress_transfer/base.rb, line 73
def guide_progress_query
  {
    organization: source_organization,
    course: old_course,
    'guide.slug': guide.slug,
    'student.uid': user.uid
  }
end
new_course() click to toggle source
# File lib/mumuki/classroom/event/progress_transfer/base.rb, line 65
def new_course
  new_student.course
end
new_student() click to toggle source
# File lib/mumuki/classroom/event/progress_transfer/base.rb, line 53
def new_student
  @new_student ||= student_for destination_organization.name
end
old_course() click to toggle source
# File lib/mumuki/classroom/event/progress_transfer/base.rb, line 69
def old_course
  old_student.course
end
old_student() click to toggle source
# File lib/mumuki/classroom/event/progress_transfer/base.rb, line 57
def old_student
  @old_student ||= student_for source_organization
end
student_for(organization) click to toggle source
# File lib/mumuki/classroom/event/progress_transfer/base.rb, line 61
def student_for(organization)
  Mumuki::Classroom::Student.last_updated_student_by organization: organization, uid: user.uid
end
transfer_guide_progress!() click to toggle source
# File lib/mumuki/classroom/event/progress_transfer/base.rb, line 38
def transfer_guide_progress!
  transfer_item.update!(guide: guide_h,
                        student: new_student.dup,
                        organization: destination_organization.name,
                        course: new_course)
end
update_student!(student) click to toggle source
# File lib/mumuki/classroom/event/progress_transfer/base.rb, line 29
def update_student!(student)
  student.update_all_stats
  student.update_last_assignment_for
end
user() click to toggle source
# File lib/mumuki/classroom/event/progress_transfer/base.rb, line 82
def user
  indicator.user
end