Commit ee4107ab by Prem Sichanugrist

Add `validates_attachment` method to model

parent b3a63edb
......@@ -11,5 +11,35 @@ module Paperclip
extend HelperMethods
include HelperMethods
end
module ClassMethods
# 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 }
#
def validates_attachment(*attributes)
options = attributes.extract_options!.dup
Paperclip::Validators.constants.each do |constant|
if constant.to_s =~ /^Attachment(.+)Validator$/
validator_kind = $1.underscore.to_sym
if options.has_key?(validator_kind)
options[:"attachment_#{validator_kind}"] = options.delete(validator_kind)
end
end
end
validates(*attributes + [options])
end
end
end
end
require './test/helper'
class ValidatorsTest < Test::Unit::TestCase
def setup
rebuild_model
end
context "using the helper" do
setup do
Dummy.validates_attachment :avatar, :presence => true, :content_type => { :content_type => "image/jpg" }, :size => { :in => 0..10.kilobytes }
end
should "add the attachment_presence validator to the class" do
assert Dummy.validators_on(:avatar).any?{ |validator| validator.kind == :attachment_presence }
end
should "add the attachment_content_type validator to the class" do
assert Dummy.validators_on(:avatar).any?{ |validator| validator.kind == :attachment_content_type }
end
should "add the attachment_size validator to the class" do
assert Dummy.validators_on(:avatar).any?{ |validator| validator.kind == :attachment_size }
end
end
end
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment