Module: ActiveRecord::DatabaseValidations::StringTruncator::ClassMethods

Defined in:
lib/active_record/validations/string_truncator.rb

Instance Method Summary collapse

Instance Method Details

#truncate_string(field) ⇒ Object



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 # to make sure the callback chain doesn't halt
  end
  return method_name
end