Added custom validator for UTF-8 strings.
This commit is contained in:
parent
b4c46ba4b8
commit
32b280eb8d
2 changed files with 35 additions and 0 deletions
|
@ -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
32
lib/validators.rb
Normal 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
|
Loading…
Add table
Add a link
Reference in a new issue