Coursemology/coursemology2

View on GitHub
app/models/concerns/course/video/submission/todo_concern.rb

Summary

Maintainability
A
1 hr
Test Coverage
# frozen_string_literal: true
module Course::Video::Submission::TodoConcern
  extend ActiveSupport::Concern

  included do
    after_create :complete_todo
    after_destroy :restart_todo
  end

  def todo
    @todo ||= begin
      lesson_plan_item_id = video.lesson_plan_item.id
      Course::LessonPlan::Todo.find_by(item_id: lesson_plan_item_id, user_id: creator_id)
    end
  end

  private

  def complete_todo
    return unless todo

    todo.update_attribute(:workflow_state, 'completed') unless todo.completed?
  rescue ActiveRecord::ActiveRecordError => e
    raise ActiveRecord::Rollback, e.message
  end

  # Skip callback if video is deleted as todo will be deleted.
  def restart_todo
    return if video.destroying? || todo.nil?

    todo.update_attribute(:workflow_state, 'not_started') unless todo.not_started?
  rescue ActiveRecord::ActiveRecordError => e
    raise ActiveRecord::Rollback, e.message
  end
end