module UploadDocumentsTool::Validators::ClassMethods

Public Instance Methods

create_validating_before_filter(attribute, validator_class, options) click to toggle source
# File lib/upload_documents_tool/validators.rb, line 59
def create_validating_before_filter(attribute, validator_class, options)
  if_clause = options.delete(:if)
  unless_clause = options.delete(:unless)
  send(:"before_#{attribute}_post_process", :if => if_clause, :unless => unless_clause) do |*args|
    validator_class.new(options.dup).validate(self)
  end
end
validate_before_processing(validator_class, options) click to toggle source
# File lib/upload_documents_tool/validators.rb, line 50
def validate_before_processing(validator_class, options)
  options = options.dup
  attributes = options.delete(:attributes)
  attributes.each do |attribute|
    options[:attributes] = [attribute]
    create_validating_before_filter(attribute, validator_class, options)
  end
end
validates_attachment(*attributes) click to toggle source

This method is a shortcut to validator classes that is in “Attachment…Validator” format. It is almost the same thing as the validates method that shipped with Rails, but this is customized to be using with attachment validators. This is helpful when you're using multiple attachment validators on a single attachment.

Example of using the validator:

validates_attachment :avatar, :presence => true,
   :content_type => { :content_type => "image/jpg" },
   :size => { :in => 0..10.kilobytes }
# File lib/upload_documents_tool/validators.rb, line 30
def validates_attachment(*attributes)
  options = attributes.extract_options!.dup

  UploadDocumentsTool::Validators.constants.each do |constant|
    if constant.to_s =~ /\AAttachment(.+)Validator\z/
      validator_kind = $1.underscore.to_sym

      if options.has_key?(validator_kind)
        validator_options = options.delete(validator_kind)
        validator_options = {} if validator_options == true
        conditional_options = options.slice(:if, :unless)
        Array.wrap(validator_options).each do |local_options|
          method_name = UploadDocumentsTool::Validators.const_get(constant.to_s).helper_method_name
          send(method_name, attributes, local_options.merge(conditional_options))
        end
      end
    end
  end
end