Sha256: fa970732d3adb6c29daed0e5af279d1549699ac9c5e9e6f3ee2b4aa90c3554ec

Contents?: true

Size: 1.55 KB

Versions: 43

Compression:

Stored size: 1.55 KB

Contents

module Cmor::Files
  class Folder < ApplicationRecord
    include ActsAsPublished::ActiveRecord

    has_many_attached :assets

    acts_as_published

    validates :name, presence: true, uniqueness: true

    def human
      "#{self.class.model_name.human}: #{I18n.l(created_at)}"
    end

    def assets_count
      assets.count
    end

    module FileDetailsConcern
      extend ActiveSupport::Concern

      included do
        has_many :file_details, inverse_of: :folder, dependent: :destroy, autosave: true
        before_validation :cleanup_orphaned_file_details
        before_validation :ensure_file_details
      end

      def append_assets
        assets
      end

       def append_assets=(assets)
          if Rails.version < '6.0.0'
            self.assets = assets
          else
            self.assets.attach(assets)
          end
        end

      def overwrite_assets
        assets
      end

      def overwrite_assets=(assets)
        return if assets.nil? || assets.empty?
        self.file_details.map { |fd| fd.mark_for_destruction }
        self.assets = assets
      end

      private

      def cleanup_orphaned_file_details
        file_details.each do |file_detail|
          file_detail.destroy if file_detail.asset.nil?
        end
      end

      def ensure_file_details
        (assets - file_details.all.map(&:asset)).map do |asset|
          build_file_detail_for_asset(asset)
        end
      end

      def build_file_detail_for_asset(asset)
        file_details.build(asset: asset)
      end
    end

    include FileDetailsConcern
  end
end

Version data entries

43 entries across 43 versions & 1 rubygems

Version Path
cmor_files-0.0.44.pre app/models/cmor/files/folder.rb
cmor_files-0.0.43.pre app/models/cmor/files/folder.rb
cmor_files-0.0.42.pre app/models/cmor/files/folder.rb
cmor_files-0.0.41.pre app/models/cmor/files/folder.rb
cmor_files-0.0.40.pre app/models/cmor/files/folder.rb
cmor_files-0.0.39.pre app/models/cmor/files/folder.rb
cmor_files-0.0.38.pre app/models/cmor/files/folder.rb
cmor_files-0.0.37.pre app/models/cmor/files/folder.rb
cmor_files-0.0.36.pre app/models/cmor/files/folder.rb
cmor_files-0.0.35.pre app/models/cmor/files/folder.rb
cmor_files-0.0.34.pre app/models/cmor/files/folder.rb
cmor_files-0.0.33.pre app/models/cmor/files/folder.rb
cmor_files-0.0.32.pre app/models/cmor/files/folder.rb
cmor_files-0.0.31.pre app/models/cmor/files/folder.rb
cmor_files-0.0.30.pre app/models/cmor/files/folder.rb
cmor_files-0.0.29.pre app/models/cmor/files/folder.rb
cmor_files-0.0.28.pre app/models/cmor/files/folder.rb
cmor_files-0.0.27.pre app/models/cmor/files/folder.rb
cmor_files-0.0.26.pre app/models/cmor/files/folder.rb
cmor_files-0.0.25.pre app/models/cmor/files/folder.rb