module ActiveRecord::DatabaseValidations::MySQL
Constants
- TYPE_LIMITS
Public Class Methods
Source
# File lib/active_record/database_validations/mysql.rb, line 31 def self.column_range(column) args = {} unsigned = column.sql_type =~ / unsigned\z/ case column.type when :decimal args[:less_than] = maximum = 10 ** (column.precision - column.scale) if unsigned args[:greater_than_or_equal_to] = 0 else args[:greater_than] = 0 - maximum end when :integer args[:only_integer] = true args[:less_than] = unsigned ? 1 << (column.limit * 8) : 1 << (column.limit * 8 - 1) args[:greater_than_or_equal_to] = unsigned ? 0 : 0 - args[:less_than] end args end
Source
# File lib/active_record/database_validations/mysql.rb, line 20 def self.column_size_limit(column) column_type = column.sql_type.sub(/\(.*\z/, '').gsub(/\s/, '_').to_sym type_limit = TYPE_LIMITS.fetch(column_type, {}) [ column.limit || type_limit[:maximum], type_limit[:type], determine_encoding(column), ] end
Source
# File lib/active_record/database_validations/mysql.rb, line 52 def self.determine_encoding(column) column = ActiveRecord::Validations::TypedColumn.new(column) return nil unless column.text? case column.collation when /\Autf8/; Encoding::UTF_8 else raise NotImplementedError, "Don't know how to determine the Ruby encoding for MySQL's #{column.collation} collation." end end
Source
# File lib/active_record/database_validations/mysql.rb, line 61 def self.requires_transcoding?(value, column_encoding = nil) column_encoding.present? && column_encoding != value.encoding end
Source
# File lib/active_record/database_validations/mysql.rb, line 65 def self.value_for_column(value, column_encoding = nil) value = value.to_s unless value.is_a?(String) if requires_transcoding?(value, column_encoding) return value.encode(Encoding::UTF_8) end value end