Added custom validator for UTF-8 strings.

This commit is contained in:
Matt Amos 2008-10-29 16:27:15 +00:00
parent b4c46ba4b8
commit 32b280eb8d
2 changed files with 35 additions and 0 deletions

View file

@ -1,3 +1,5 @@
require 'validators'
class Message < ActiveRecord::Base
belongs_to :sender, :class_name => "User", :foreign_key => :from_user_id
belongs_to :recipient, :class_name => "User", :foreign_key => :to_user_id
@ -6,4 +8,5 @@ class Message < ActiveRecord::Base
validates_length_of :title, :within => 1..255
validates_inclusion_of :message_read, :in => [ true, false ]
validates_associated :sender, :recipient
validates_as_utf8 :title
end

32
lib/validators.rb Normal file
View file

@ -0,0 +1,32 @@
module ActiveRecord
module Validations
module ClassMethods
# error message when invalid UTF-8 is detected
@@invalid_utf8_message = " is invalid UTF-8"
##
# validation method to be included like any other validations methods
# in the models definitions. this one checks that the named attribute
# is a valid UTF-8 format string.
def validates_as_utf8(*attrs)
validates_each(attrs) do |record, attr, value|
record.errors.add(attr, @@invalid_utf8_message) unless valid_utf8? value
end
end
##
# Checks that a string is valid UTF-8 by trying to convert it to UTF-8
# using the iconv library, which is in the standard library.
def valid_utf8?(str)
return true if str.nil?
Iconv.conv("UTF-8", "UTF-8", str)
return true
rescue
return false
end
end
end
end