Class: Alchemy::Attachment
- Inherits:
-
BaseRecord
- Object
- ActiveRecord::Base
- BaseRecord
- Alchemy::Attachment
- Includes:
- Filetypes, NameConversions, RelatableResource, Taggable, TouchElements
- Defined in:
- app/models/alchemy/attachment.rb
Constant Summary
Constants included from RelatableResource
RelatableResource::RELATED_INGREDIENTS_SUBQUERY
Constants included from Filetypes
Filetypes::ARCHIVE_FILE_TYPES, Filetypes::AUDIO_FILE_TYPES, Filetypes::EXCEL_FILE_TYPES, Filetypes::IMAGE_FILE_TYPES, Filetypes::POWERPOINT_FILE_TYPES, Filetypes::TEXT_FILE_TYPES, Filetypes::VCARD_FILE_TYPES, Filetypes::VIDEO_FILE_TYPES, Filetypes::WORD_FILE_TYPES
Constants included from SearchableResource
SearchableResource::SEARCHABLE_COLUMN_TYPES
Class Method Summary collapse
- .allowed_filetypes ⇒ Object
- .file_types(scope = all, from_extensions: nil) ⇒ Object
- .last_upload ⇒ Object
- .ransackable_associations(_auth_object = nil) ⇒ Object
- .ransackable_attributes(_auth_object = nil) ⇒ Object
- .ransackable_scopes(_auth_object = nil) ⇒ Object
- .searchable_alchemy_resource_attributes ⇒ Object
-
.url_class ⇒ Object
The class used to generate URLs for attachments.
-
.url_class=(klass) ⇒ Object
Set a different attachment url class.
Instance Method Summary collapse
-
#deletable? ⇒ Boolean
Override Alchemy::RelatableResource#deletable? to also consider
/attachment/:id/downloadlinks inside ingredient values (e.g. Richtext markup, Link ingredients, raw Html). -
#extension ⇒ Object
(also: #suffix)
File format suffix.
- #file_mime_type ⇒ Object
-
#file_name ⇒ Object
File name.
-
#file_size ⇒ Object
File size.
-
#icon_css_class ⇒ Object
Returns a css class name for kind of file.
-
#restricted? ⇒ Boolean
Checks if the attachment is restricted, because it is attached on restricted pages only.
-
#slug ⇒ Object
An url save filename without format suffix.
- #svg? ⇒ Boolean
-
#url(options = {}) ⇒ Object
Instance methods.
Methods included from TouchElements
Methods included from Taggable
Methods included from NameConversions
#convert_to_urlname, #sanitized_filename
Methods included from ConfigMissing
Methods included from SearchableResource
#ransackable_associations, #ransackable_attributes, #ransackable_scopes, #ransortable_attributes
Class Method Details
.allowed_filetypes ⇒ Object
115 116 117 |
# File 'app/models/alchemy/attachment.rb', line 115 def allowed_filetypes Alchemy.config.uploader.allowed_filetypes. end |
.file_types(scope = all, from_extensions: nil) ⇒ Object
106 107 108 109 110 111 112 113 |
# File 'app/models/alchemy/attachment.rb', line 106 def file_types(scope = all, from_extensions: nil) if from_extensions.present? scope = by_file_type( Array(from_extensions).map { |extension| Marcel::MimeType.for(extension:) } ) end Alchemy.storage_adapter.file_formats(name, scope:) end |
.last_upload ⇒ Object
87 88 89 90 91 92 |
# File 'app/models/alchemy/attachment.rb', line 87 def last_upload last_id = Attachment.maximum(:id) return Attachment.all unless last_id where(id: last_id) end |
.ransackable_associations(_auth_object = nil) ⇒ Object
102 103 104 |
# File 'app/models/alchemy/attachment.rb', line 102 def ransackable_associations(_auth_object = nil) Alchemy.storage_adapter.ransackable_associations(name) end |
.ransackable_attributes(_auth_object = nil) ⇒ Object
98 99 100 |
# File 'app/models/alchemy/attachment.rb', line 98 def ransackable_attributes(_auth_object = nil) Alchemy.storage_adapter.ransackable_attributes(name) end |
.ransackable_scopes(_auth_object = nil) ⇒ Object
119 120 121 |
# File 'app/models/alchemy/attachment.rb', line 119 def ransackable_scopes(_auth_object = nil) %i[by_file_type not_file_type recent last_upload without_tag deletable] end |
.searchable_alchemy_resource_attributes ⇒ Object
94 95 96 |
# File 'app/models/alchemy/attachment.rb', line 94 def searchable_alchemy_resource_attributes Alchemy.storage_adapter.searchable_alchemy_resource_attributes(name) end |
.url_class ⇒ Object
The class used to generate URLs for attachments
76 77 78 |
# File 'app/models/alchemy/attachment.rb', line 76 def url_class @_url_class ||= Alchemy.storage_adapter. end |
.url_class=(klass) ⇒ Object
Set a different attachment url class
83 84 85 |
# File 'app/models/alchemy/attachment.rb', line 83 def url_class=(klass) @_url_class = klass end |
Instance Method Details
#deletable? ⇒ Boolean
Override Alchemy::RelatableResource#deletable? to also consider /attachment/:id/download links inside ingredient values (e.g. Richtext markup, Link ingredients, raw Html).
145 146 147 |
# File 'app/models/alchemy/attachment.rb', line 145 def deletable? super && !referenced_in_ingredient_value? end |
#extension ⇒ Object Also known as: suffix
File format suffix
169 170 171 |
# File 'app/models/alchemy/attachment.rb', line 169 def extension Alchemy.storage_adapter.file_extension(self) end |
#file_mime_type ⇒ Object
164 165 166 |
# File 'app/models/alchemy/attachment.rb', line 164 def file_mime_type Alchemy.storage_adapter.file_mime_type(self) end |
#file_name ⇒ Object
File name
155 156 157 |
# File 'app/models/alchemy/attachment.rb', line 155 def file_name Alchemy.storage_adapter.file_name(self) end |
#file_size ⇒ Object
File size
160 161 162 |
# File 'app/models/alchemy/attachment.rb', line 160 def file_size Alchemy.storage_adapter.file_size(self) end |
#icon_css_class ⇒ Object
Returns a css class name for kind of file
180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 |
# File 'app/models/alchemy/attachment.rb', line 180 def icon_css_class case file_mime_type when "application/pdf" "file-pdf-2" when *TEXT_FILE_TYPES "file-text" when *EXCEL_FILE_TYPES "file-excel-2" when *POWERPOINT_FILE_TYPES "file-ppt-2" when *WORD_FILE_TYPES "file-word-2" when *VCARD_FILE_TYPES "profile" when *ARCHIVE_FILE_TYPES "file-zip" when *AUDIO_FILE_TYPES "file-music" when *IMAGE_FILE_TYPES "file-image" when *VIDEO_FILE_TYPES "file-video" else "file-3" end end |
#restricted? ⇒ Boolean
Checks if the attachment is restricted, because it is attached on restricted pages only
150 151 152 |
# File 'app/models/alchemy/attachment.rb', line 150 def restricted? pages.any? && pages.not_restricted.blank? end |
#slug ⇒ Object
An url save filename without format suffix
138 139 140 |
# File 'app/models/alchemy/attachment.rb', line 138 def slug CGI.escape(file_name.gsub(/\.#{extension}$/, "").tr(".", " ")) end |
#svg? ⇒ Boolean
174 175 176 |
# File 'app/models/alchemy/attachment.rb', line 174 def svg? file_mime_type == "image/svg+xml" end |
#url(options = {}) ⇒ Object
Instance methods
133 134 135 |
# File 'app/models/alchemy/attachment.rb', line 133 def url( = {}) self.class.url_class.new(self).call() end |