Rails - validates_unlike: plugin para validar que una atributo no cumpla un RegExp
Publicado por Edgar González 11 Julio 2006 en Rails, Ruby.Haciendo algunos ajustes a rubycorner.com me consigo con que necesito validar que un atributo de un modelo no cumpla con una expresión regular dada.
Mi primera alternativa fue definir un método validate en mi modelo, similar a:
-
def validate
-
if my_field =~ /html|http|onclick|onmouseover/
-
errors.add("my_field", "should not contain html, http, onclick or onmouseover.")
-
end
-
end
Sin embargo este enfoque no es muy DRY que digamos, asi que lo que hice fue crear un nuevo método llamado validates_unlike, el cual simplemente valida que el contenido de un campo no haga match con el RegExp suministrado (lo mismo que validates_format_of, pero con la condición negada), el código es:
-
module ActiveRecord
-
module Validations
-
module ClassMethods
-
def validates_unlike(*attr_names)
-
configuration = { :message => ActiveRecord::Errors.default_error_messages[:invalid], :on => :save, :with => nil }
-
configuration.update(attr_names.pop) if attr_names.last.is_a?(Hash)
-
-
raise(ArgumentError, "A regular expression must be supplied as the :with option of the configuration hash") unless configuration[:with].is_a?(Regexp)
-
-
validates_each(attr_names, configuration) do |record, attr_name, value|
-
record.errors.add(attr_name, configuration[:message]) if value.to_s =~ configuration[:with]
-
end
-
end
-
end
-
end
-
end
El código puedes descargarlo como un plugin rails: validates_unlike-0.1.zip