Class: Alchemy::Attachment

Inherits:
BaseRecord
  • Object
show all
Includes:
Filetypes, NameConversions, RelatableResource, Taggable, TouchElements
Defined in:
app/models/alchemy/attachment.rb

Constant Summary

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

Instance Method Summary collapse

Methods included from RelatableResource

#deletable?

Methods included from TouchElements

included

Methods included from Taggable

included, #tag_list=

Methods included from NameConversions

#convert_to_urlname, #sanitized_filename

Methods included from ConfigMissing

#const_missing

Methods included from SearchableResource

#ransackable_associations, #ransackable_attributes, #ransackable_scopes, #ransortable_attributes

Class Method Details

.allowed_filetypesObject



88
89
90
# File 'app/models/alchemy/attachment.rb', line 88

def allowed_filetypes
  Alchemy.config.uploader.allowed_filetypes.alchemy_attachments
end

.file_types(scope = all, from_extensions: nil) ⇒ Object



79
80
81
82
83
84
85
86
# File 'app/models/alchemy/attachment.rb', line 79

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_uploadObject



60
61
62
63
64
65
# File 'app/models/alchemy/attachment.rb', line 60

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



75
76
77
# File 'app/models/alchemy/attachment.rb', line 75

def ransackable_associations(_auth_object = nil)
  Alchemy.storage_adapter.ransackable_associations(name)
end

.ransackable_attributes(_auth_object = nil) ⇒ Object



71
72
73
# File 'app/models/alchemy/attachment.rb', line 71

def ransackable_attributes(_auth_object = nil)
  Alchemy.storage_adapter.ransackable_attributes(name)
end

.ransackable_scopes(_auth_object = nil) ⇒ Object



92
93
94
# File 'app/models/alchemy/attachment.rb', line 92

def ransackable_scopes(_auth_object = nil)
  i[by_file_type not_file_type recent last_upload without_tag deletable]
end

.searchable_alchemy_resource_attributesObject



67
68
69
# File 'app/models/alchemy/attachment.rb', line 67

def searchable_alchemy_resource_attributes
  Alchemy.storage_adapter.searchable_alchemy_resource_attributes(name)
end

.url_classObject

The class used to generate URLs for attachments



49
50
51
# File 'app/models/alchemy/attachment.rb', line 49

def url_class
  @_url_class ||= Alchemy.storage_adapter.attachment_url_class
end

.url_class=(klass) ⇒ Object

Set a different attachment url class

See Also:

  • Url


56
57
58
# File 'app/models/alchemy/attachment.rb', line 56

def url_class=(klass)
  @_url_class = klass
end

Instance Method Details

#extensionObject Also known as: suffix

File format suffix



135
136
137
# File 'app/models/alchemy/attachment.rb', line 135

def extension
  Alchemy.storage_adapter.file_extension(self)
end

#file_mime_typeObject



130
131
132
# File 'app/models/alchemy/attachment.rb', line 130

def file_mime_type
  Alchemy.storage_adapter.file_mime_type(self)
end

#file_nameObject

File name



121
122
123
# File 'app/models/alchemy/attachment.rb', line 121

def file_name
  Alchemy.storage_adapter.file_name(self)
end

#file_sizeObject

File size



126
127
128
# File 'app/models/alchemy/attachment.rb', line 126

def file_size
  Alchemy.storage_adapter.file_size(self)
end

#icon_css_classObject

Returns a css class name for kind of file



146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
# File 'app/models/alchemy/attachment.rb', line 146

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

Returns:

  • (Boolean)


116
117
118
# File 'app/models/alchemy/attachment.rb', line 116

def restricted?
  pages.any? && pages.not_restricted.blank?
end

#slugObject

An url save filename without format suffix



111
112
113
# File 'app/models/alchemy/attachment.rb', line 111

def slug
  CGI.escape(file_name.gsub(/\.#{extension}$/, "").tr(".", " "))
end

#svg?Boolean

Returns:

  • (Boolean)


140
141
142
# File 'app/models/alchemy/attachment.rb', line 140

def svg?
  file_mime_type == "image/svg+xml"
end

#url(options = {}) ⇒ Object

Instance methods



106
107
108
# File 'app/models/alchemy/attachment.rb', line 106

def url(options = {})
  self.class.url_class.new(self).call(options)
end