7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
# File 'lib/active_record/validations/string_truncator.rb', line 7
def truncate_string(field)
method_name = :"truncate_#{field}_at_database_limit"
define_method(method_name) do
return unless self.changes.key?(field.to_s)
return if self[field].nil?
column = self.class.columns_hash[field.to_s]
limit = StringTruncator.mysql_textual_column_limit(column)
case column.type
when :string
value = self[field].to_s
if limit && value.length > limit
self[field] = value.slice(0, limit)
end
when :text
value = self[field].to_s
value.encode!('utf-8') if value.encoding != Encoding::UTF_8
if limit && value.bytesize > limit
self[field] = value.mb_chars.limit(limit).to_s
end
end
return end
return method_name
end
|