32 lines
931 B
Ruby
32 lines
931 B
Ruby
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
|