module FileColumn::Validations::ClassMethods
This module contains methods to create validations of uploaded files. All methods in this module will be included as class methods into ActiveRecord::Base
so that you can use them in your models like this:
class Entry < ActiveRecord::Base file_column :image validates_filesize_of :image, :in => 0..1.megabyte end
Constants
- EXT_REGEXP
Public Instance Methods
This validates the file type of one or more file_columns. A list of file columns should be given followed by an options hash.
Required options:
-
:in
=> list of extensions or mime types. If mime types are used they will be mapped into an extension via FileColumn::ClassMethods::MIME_EXTENSIONS.
Examples:
validates_file_format_of :field, :in => ["gif", "png", "jpg"] validates_file_format_of :field, :in => ["image/jpeg"]
# File lib/file_column/validations.rb, line 30 def validates_file_format_of(*attrs) options = attrs.pop if attrs.last.is_a?Hash raise ArgumentError, "Please include the :in option." if !options || !options[:in] options[:in] = [options[:in]] if options[:in].is_a?String raise ArgumentError, "Invalid value for option :in" unless options[:in].is_a?Array validates_each(attrs, options) do |record, attr, value| unless value.blank? mime_extensions = record.send("#{attr}_options")[:mime_extensions] extensions = options[:in].map{|o| mime_extensions[o] || o } record.errors.add attr, "is not a valid format." unless extensions.include?(value.scan(EXT_REGEXP).flatten.first) end end end
This validates the file size of one or more file_columns. A list of file columns should be given followed by an options hash.
Required options:
-
:in
=> A size range. Note that you can use ActiveSupport's numeric extensions for kilobytes, etc.
Examples:
validates_filesize_of :field, :in => 0..100.megabytes validates_filesize_of :field, :in => 15.kilobytes..1.megabyte
# File lib/file_column/validations.rb, line 57 def validates_filesize_of(*attrs) options = attrs.pop if attrs.last.is_a?Hash raise ArgumentError, "Please include the :in option." if !options || !options[:in] raise ArgumentError, "Invalid value for option :in" unless options[:in].is_a?Range validates_each(attrs, options) do |record, attr, value| unless value.blank? size = File.size(value) record.errors.add attr, "is smaller than the allowed size range." if size < options[:in].first record.errors.add attr, "is larger than the allowed size range." if size > options[:in].last end end end