class ActiveRecord::Validations::BlobValidator

Public Instance Methods

validate_each(record, attribute, values) click to toggle source
# File lib/activestorage/validator/blob.rb, line 4
def validate_each(record, attribute, values) # rubocop:disable Metrics/AbcSize
  return unless values.attached?

  Array(values).each do |value|
    if options[:size_range].present?
      if options[:size_range].min > value.blob.byte_size
        record.errors.add(attribute, :min_size_error, min_size: ActiveSupport::NumberHelper.number_to_human_size(options[:size_range].min))
      elsif options[:size_range].max < value.blob.byte_size
        record.errors.add(attribute, :max_size_error, max_size: ActiveSupport::NumberHelper.number_to_human_size(options[:size_range].max))
      end
    end

    unless valid_content_type?(value.blob)
      record.errors.add(attribute, :content_type)
    end
  end
end

Private Instance Methods

valid_content_type?(blob) click to toggle source
# File lib/activestorage/validator/blob.rb, line 24
def valid_content_type?(blob)
  return true if options[:content_type].nil?

  case options[:content_type]
  when Regexp
    options[:content_type].match?(blob.content_type)
  when Array
    options[:content_type].include?(blob.content_type)
  when Symbol
    blob.public_send("#{options[:content_type]}?")
  else
    options[:content_type] == blob.content_type
  end
end