You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
45 lines
1.3 KiB
45 lines
1.3 KiB
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
|
|
|