Coursemology/coursemology2

View on GitHub
lib/extensions/materials/active_record/base.rb

Summary

Maintainability
A
0 mins
Test Coverage
# frozen_string_literal: true
module Extensions::Materials::ActiveRecord::Base
  module ClassMethods
    # Declare this to allow models to support materials uploads.
    def has_one_folder # rubocop:disable Naming/PredicateName
      after_initialize :build_new_record_folder, if: :new_record?

      has_one :folder, as: :owner, class_name: Course::Material::Folder.name,
                       inverse_of: :owner, dependent: :destroy, autosave: true
      has_many :materials, through: :folder, class_name: Course::Material.name

      include Extensions::Materials::ActiveRecord::Base::InstanceMethods
    end
  end

  module InstanceMethods
    def files_attributes=(files)
      build_new_record_folder
      folder.build_materials(files)
    end

    private

    def build_new_record_folder
      build_folder unless folder
    end
  end
end