Improve character validator error messages
[rails.git] / app / validators / characters_validator.rb
1 class CharactersValidator < ActiveModel::EachValidator
2   INVALID_CHARS = "\x00-\x08\x0b-\x0c\x0e-\x1f\x7f\ufffe\uffff".freeze
3   INVALID_URL_CHARS = "/;.,?%#".freeze
4
5   def validate_each(record, attribute, value)
6     record.errors[attribute] << (options[:message] || I18n.t("validations.invalid_characters")) if value =~ /[#{INVALID_CHARS}]/
7
8     if options[:url_safe]
9       record.errors[attribute] << (options[:message] || I18n.t("validations.url_characters", :characters => INVALID_URL_CHARS)) if value =~ /[#{INVALID_URL_CHARS}]/
10     end
11   end
12 end