Coursemology/coursemology2

View on GitHub
app/controllers/concerns/course/lesson_plan/acts_as_lesson_plan_item_concern.rb

Summary

Maintainability
A
0 mins
Test Coverage
# frozen_string_literal: true
module Course::LessonPlan::ActsAsLessonPlanItemConcern
  extend ActiveSupport::Concern

  module ClassMethods
    # Use method to build new specific lesson_plan_items
    # Refer to app/controllers/course/assessment/question/controller.rb for motivation
    def build_and_authorize_new_lesson_plan_item(item_name, options)
      before_action only: options[:only], except: options[:except] do
        specific_item = options[:class].new
        specific_item.lesson_plan_item.course = @course
        if action_name != 'new'
          item_params = send("#{item_name}_params")
          specific_item.assign_attributes(item_params.except(:item))
        end
        authorize!(action_name.to_sym, specific_item)
        instance_variable_set("@#{item_name}", specific_item) unless instance_variable_get("@#{item_name}")
      end
    end
  end
end