# vendor/plugins/attachment_fu_hack/init.rb
#Extracted from http://scoop.cheerfactory.co.uk/2007/11/28/attachment-fu-validates-as-attachment-hack/
klass = Technoweenie::AttachmentFu::ClassMethods
klass.module_eval do
def validates_as_attachment(error_messages = {})
validate :uploaded_data_is_present # verifica que haya datos subidos
validates_presence_of :size, :content_type, :filename, :if => :uploaded_data?
validate do |this|
this.attachment_attributes_valid?(error_messages) # verifica la validez de
end # cada atributo
end
end
methods_klass = Technoweenie::AttachmentFu::InstanceMethods
methods_klass.module_eval do
def uploaded_data? # llamado por el método validates_as_attachment de arriba
return false unless filename # filename debería ser nil si no hay datos
true
end
# Valida los atributos “size” y “content_type” de acuerdo a la configuración
# del modelo.
def attachment_attributes_valid?(error_messages) #recibe mensajes como parámetro
@attachment_error_messages = error_messages # guarda los mensajes
if uploaded_data?
[:size, :content_type].each do |attr_name|
enum = attachment_options[attr_name] # valores posibles para el atributo
errors.add_to_base attachment_error_message_for(attr_name) unless enum.nil? || enum.include?(send(attr_name))
end
end
end
def uploaded_data_is_present # valida si hay datos subidos o no
unless uploaded_data? # si no hay datos...
errors.add_to_base("You must select a file to upload.")#...agrega el error al objeto
end
end
# Devuelve el mensaje de error para un atributo
def attachment_error_message_for(attribute)
@attachment_error_messages[attribute] || ActiveRecord::Errors.default_error_messages[:inclusion]
end
end