Sha256: cae28bf6c29cc590495a442935fb525104b558f4f54462cca26666fe974091cc

Contents?: true

Size: 882 Bytes

Versions: 1

Compression:

Stored size: 882 Bytes

Contents

# frozen_string_literal: true

require 'action_dispatch'

class MiniDefender::Rules::MimeTypes < MiniDefender::Rule
  def initialize(types)
    unless types.is_a?(Array) && types.all?{ |t| t.is_a?(String) }
      raise ArgumentError, 'Expected an array of strings.'
    end

    @types = types
    @file = false
  end

  def self.signature
    'mime'
  end

  def self.make(args)
    unless args.length > 0
      raise ArgumentError, 'Expected at least one MIME type.'
    end

    new(args.map(&:downcase).map(&:strip))
  end

  def passes?(attribute, value, validator)
    @file = value.is_a?(ActionDispatch::Http::UploadedFile)
    @file && @types.include?(value.content_type)
  end

  def message(attribute, value, validator)
    if @file
      "The file should be one of the following types #{@types.to_sentence}"
    else
      'The field should be a file.'
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
mini_defender-0.6.5 lib/mini_defender/rules/mime_types.rb