Module: FileColumn::Validations::ClassMethods
- Defined in:
- lib/file_column/validations.rb
Overview
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
Constant Summary collapse
- EXT_REGEXP =
/\.([A-z0-9]+)$/
Instance Method Summary collapse
-
#validates_file_format_of(*attrs) ⇒ Object
This validates the file type of one or more file_columns.
-
#validates_filesize_of(*attrs) ⇒ Object
This validates the file size of one or more file_columns.
Instance Method Details
#validates_file_format_of(*attrs) ⇒ Object
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"]
30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/file_column/validations.rb', line 30 def validates_file_format_of(*attrs) = attrs.pop if attrs.last.is_a?Hash raise ArgumentError, "Please include the :in option." if ! || ![:in] [:in] = [[:in]] if [:in].is_a?String raise ArgumentError, "Invalid value for option :in" unless [:in].is_a?Array validates_each(attrs, ) do |record, attr, value| unless value.blank? mime_extensions = record.send("#{attr}_options")[:mime_extensions] extensions = [: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 |
#validates_filesize_of(*attrs) ⇒ Object
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
57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
# File 'lib/file_column/validations.rb', line 57 def validates_filesize_of(*attrs) = attrs.pop if attrs.last.is_a?Hash raise ArgumentError, "Please include the :in option." if ! || ![:in] raise ArgumentError, "Invalid value for option :in" unless [:in].is_a?Range validates_each(attrs, ) do |record, attr, value| unless value.blank? size = File.size(value) record.errors.add attr, "is smaller than the allowed size range." if size < [:in].first record.errors.add attr, "is larger than the allowed size range." if size > [:in].last end end end |