# frozen_string_literal: true
class ImageValidator < ApplicationEachValidator
class Validation < Validation
MAX_SIZE = 1.megabyte
CONTENT_TYPES = %w[
image/png
image/jpeg
image/gif
].freeze
def perform
return unless value.attached?
case value
when ActiveStorage::Attached::One
check value
when ActiveStorage::Attached::Many
value.attachments.each(&method(:check))
else
raise TypeError
end
def check(item)
unless item.blob.content_type.in? CONTENT_TYPES
error :image_format, content_type: item.blob.content_type
error :image_size unless item.blob.byte_size <= max_size
def max_size
MAX_SIZE