Class: FieldDefinitions::File

Inherits:
FieldDefinition
  • Object
show all
Defined in:
app/models/iron/field_definitions/file.rb

Constant Summary collapse

FILE_TYPE_PRESETS =
{
  "images" => {
    extensions: %w[jpg jpeg png gif webp svg heic],
    mime_types: %w[image/jpeg image/png image/gif image/webp image/svg+xml image/heic]
  },
  "videos" => {
    extensions: %w[mp4 mov avi webm],
    mime_types: %w[video/mp4 video/quicktime video/x-msvideo video/webm]
  },
  "documents" => {
    extensions: %w[pdf doc docx xls xlsx ppt pptx txt],
    mime_types: %w[
      application/pdf
      application/msword
      application/vnd.openxmlformats-officedocument.wordprocessingml.document
      application/vnd.ms-excel
      application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
      application/vnd.ms-powerpoint
      application/vnd.openxmlformats-officedocument.presentationml.presentation
      text/plain
    ]
  },
  "audio" => {
    extensions: %w[mp3 wav ogg m4a],
    mime_types: %w[audio/mpeg audio/wav audio/ogg audio/mp4]
  }
}.freeze

Instance Method Summary collapse

Instance Method Details

#accepted_extensionsObject



41
42
43
44
45
46
47
48
49
# File 'app/models/iron/field_definitions/file.rb', line 41

def accepted_extensions
  return nil if file_scope == "all"

  extensions = []
  selected_presets.each do |preset|
    extensions.concat(FILE_TYPE_PRESETS[preset][:extensions]) if FILE_TYPE_PRESETS[preset]
  end
  extensions.uniq
end

#accepted_mime_typesObject



51
52
53
54
55
56
57
58
59
# File 'app/models/iron/field_definitions/file.rb', line 51

def accepted_mime_types
  return nil if file_scope == "all"

  mime_types = []
  selected_presets.each do |preset|
    mime_types.concat(FILE_TYPE_PRESETS[preset][:mime_types]) if FILE_TYPE_PRESETS[preset]
  end
  mime_types.uniq
end

#file_scopeObject



33
34
35
# File 'app/models/iron/field_definitions/file.rb', line 33

def file_scope
  super || "all"
end

#selected_presetsObject



37
38
39
# File 'app/models/iron/field_definitions/file.rb', line 37

def selected_presets
  super || []
end

#validation_descriptionObject



61
62
63
64
65
# File 'app/models/iron/field_definitions/file.rb', line 61

def validation_description
  return "All file types accepted" if file_scope == "all"

  "Accepted formats: #{accepted_extensions.join(', ')}" if accepted_extensions.present?
end