Module: DatabaseValidation::Detector
- Defined in:
- lib/database_validation.rb
Overview
tested with ‘mysql’ and ‘mysql2’ adapters
Class Method Summary collapse
Class Method Details
.detect_validations(base) ⇒ Object
13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
# File 'lib/database_validation.rb', line 13 def self.detect_validations(base) base.columns.each do |field| next if field.name == base.primary_key # don't add validations here allow_nil = field.null base.send(:validates_presence_of, field.name.to_sym, :allow_nil => allow_nil) unless allow_nil next if field.limit.nil? if [:integer, :float].include?(field.type) unsigned = field.sql_type.include?('unsigned') maximum = unsigned ? 2 ** (8 * field.limit) : 2 ** (8 * field.limit) / 2 minimum = unsigned ? -(2 ** (8 * field.limit)) - 1 : -(2 ** (8 * field.limit) / 2) - 1 base.send(:validates_numericality_of, field.name.to_sym, :less_than => maximum, :greater_than => minimum, :allow_nil => allow_nil) else maximum = field.limit base.send(:validates_length_of, field.name.to_sym, :maximum => maximum, :allow_nil => allow_nil) end end ActiveRecord::Base.connection.indexes(base.table_name).each do |key| col_syms = key.columns.map(&:to_sym) base.send(:validates_uniqueness_of, col_syms.first.to_sym, :scope => col_syms.slice(1, -1)) if key.unique end end |