Ruby on Rails, Paperclip y validaciones de dimensiones
Me he picado una extensión de Paperclip para porveer de validaciones de dimensiones para las imágenes adjuntas aquí la comparto contigo por si te resulta útil.
No he hecho un parche para Paperclip pues eso supone un gran esfuerzo en tests y demás y eso tendrá que esperar un poco.
Lo he organizado todo para que copies y pegues el código en un fichero en /lib y lo requieras desde el environment.rb con eso debería valer pero úsalo bajo tu entera responsabilidad :)
La extensión provee de dos nuevos validates:
- validates_attachment_width
- validates_attachment_height
Que se pueden usar con toda la convinación de opciones que el nativo ‘validates_attachment_size‘.
Por ejemplo:
validates_attachment_width :photo, :greater_than => 576, :less_than => 1000 validates_attachment_height :photo, :greater_than => 150, :less_than => 300 validates_attachment_width :photo, :in => 576..1000 validates_attachment_height :photo, :in => 150..300, :message => "file height must be between :min and :max pixels."
Tenemos por ejemplo la validación del ancho:
def validates_attachment_width name, options = {} min = options[:greater_than] || (options[:in] && options[:in].first) || 0 max = options[:less_than] || (options[:in] && options[:in].last) || (1.0/0) range = (min..max) message = options[:message] || "file width must be between :min and :max pixels." attachment_definitions[name][:validations][:width] = lambda do |attachment, instance| if attachment.file? && !range.include?( Geometry.from_file(attachment.queued_for_write[:original]).width.to_i ) message.gsub(/:min/, min.to_s).gsub(/:max/, max.to_s) end end end
El código completo lo tienes aquí: paperclip_validations_extended.rb.
Un ejemplo de tests y usos lo tienes aquí: paperclip_validations_extended_test.rb.
A mi me está funcionando.. y a tí?