class CollectionResource < ApplicationRecord include Rails.application.routes.url_helpers has_paper_trail attr_accessor :file scope :visible, -> { where(discarded_at: nil) } validates :short_display_name, presence: true def download_path if mandatory download_mandatory_collection_resource_path(log_type:, year:, resource_type:) else collection_resource_download_path(self) end end def validate_attached_file return errors.add(:file, :blank) unless file return errors.add(:file, :above_100_mb) if file.size > 100.megabytes argv = %W[file --brief --mime-type -- #{file.path}] output = `#{argv.shelljoin}` case resource_type when "paper_form" unless output.match?(/application\/pdf/) errors.add(:file, :must_be_pdf) end when "bulk_upload_template", "bulk_upload_specification" unless output.match?(/application\/vnd\.ms-excel|application\/vnd\.openxmlformats-officedocument\.spreadsheetml\.sheet/) errors.add(:file, :must_be_xlsx, resource: short_display_name.downcase) end end end def validate_short_display_name errors.add(:short_display_name, :blank) if short_display_name.blank? end def discard! CollectionResourcesService.new.delete_collection_resource(download_filename) update!(discarded_at: Time.zone.now) end end