Merge changeset browser branch to trunk.
[rails.git] / lib / validators.rb
1 module ActiveRecord
2   module Validations
3     module ClassMethods
4       
5       # error message when invalid UTF-8 is detected
6       @@invalid_utf8_message = " is invalid UTF-8"
7
8       ##
9       # validation method to be included like any other validations methods
10       # in the models definitions. this one checks that the named attribute
11       # is a valid UTF-8 format string.
12       def validates_as_utf8(*attrs)
13         validates_each(attrs) do |record, attr, value|
14           record.errors.add(attr, @@invalid_utf8_message) unless valid_utf8? value
15         end
16       end    
17       
18       ##
19       # Checks that a string is valid UTF-8 by trying to convert it to UTF-8
20       # using the iconv library, which is in the standard library.
21       def valid_utf8?(str)
22         return true if str.nil?
23         Iconv.conv("UTF-8", "UTF-8", str)
24         return true
25
26       rescue
27         return false
28       end  
29       
30     end
31   end
32 end