+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
validates_length_of :title, :within => 1..255
validates_inclusion_of :message_read, :in => [ true, false ]
validates_associated :sender, :recipient
+ validates_as_utf8 :title
end
--- /dev/null
+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