Guest

Gabriel Somoza

By: a guest on Jul 22nd, 2009  |  syntax: Ruby  |  size: 1.84 KB  |  hits: 42  |  expires: Never
download  |  raw  |  embed  |  report abuse
This paste has a previous version, view the difference. Copied
  1. # vendor/plugins/attachment_fu_hack/init.rb
  2.  
  3. #Extracted from http://scoop.cheerfactory.co.uk/2007/11/28/attachment-fu-validates-as-attachment-hack/
  4.  
  5. klass = Technoweenie::AttachmentFu::ClassMethods
  6. klass.module_eval do
  7.   def validates_as_attachment(error_messages = {})
  8.     validate :uploaded_data_is_present # verifica que haya datos subidos
  9.     validates_presence_of :size, :content_type, :filename, :if => :uploaded_data?
  10.     validate do |this|
  11.       this.attachment_attributes_valid?(error_messages) # verifica la validez de
  12.     end                                                 # cada atributo
  13.   end
  14. end
  15.  
  16. methods_klass = Technoweenie::AttachmentFu::InstanceMethods
  17. methods_klass.module_eval do
  18.   def uploaded_data? # llamado por el método validates_as_attachment de arriba
  19.     return false unless filename # filename debería ser nil si no hay datos
  20.     true
  21.   end
  22.  
  23.   # Valida los atributos “size” y “content_type” de acuerdo a la configuración
  24.   # del modelo.
  25.   def attachment_attributes_valid?(error_messages) #recibe mensajes como parámetro
  26.     @attachment_error_messages = error_messages # guarda los mensajes
  27.     if uploaded_data?
  28.       [:size, :content_type].each do |attr_name|
  29.         enum = attachment_options[attr_name] # valores posibles para el atributo
  30.         errors.add_to_base attachment_error_message_for(attr_name) unless enum.nil? || enum.include?(send(attr_name))
  31.       end
  32.     end
  33.   end
  34.  
  35.   def uploaded_data_is_present # valida si hay datos subidos o no
  36.     unless uploaded_data? # si no hay datos...
  37.       errors.add_to_base("You must select a file to upload.")#...agrega el error al objeto
  38.     end
  39.   end
  40.  
  41.   # Devuelve el mensaje de error para un atributo
  42.   def attachment_error_message_for(attribute)
  43.     @attachment_error_messages[attribute] || ActiveRecord::Errors.default_error_messages[:inclusion]
  44.   end
  45. end