module RecordMold
Constants
- VERSION
Public Class Methods
included(model)
click to toggle source
# File lib/record_mold.rb, line 2 def self.included(model) exception_columns = model.send(:timestamp_attributes_for_create) + model.send(:timestamp_attributes_for_update) + model.defined_enums.keys exception_columns = (exception_columns + exception_columns.map { |column| model.attribute_aliases[column] }.compact).uniq model.columns.each do |field| next if field.name == model.primary_key next if exception_columns.include?(field.name) allow_nil = field.null case field.type when :boolean model.send(:validates_inclusion_of, field.name.to_sym, in: [true, false], allow_nil: allow_nil) when :integer, :float options = { only_integer: field.type == :integer, allow_nil: allow_nil } if field.limit && field.type == :integer unsigned = field.sql_type.include?('unsigned') options[:less_than] = unsigned ? 2 ** (8 * field.limit) : 2 ** (8 * field.limit) / 2 options[:greater_than] = unsigned ? -(2 ** (8 * field.limit)) - 1 : -(2 ** (8 * field.limit) / 2) - 1 end model.send(:validates_numericality_of, field.name.to_sym, **options) when :string, :text if field.limit maximum = field.limit model.send(:validates_length_of, field.name.to_sym, maximum: maximum, allow_nil: allow_nil) end else model.send(:validates_presence_of, field.name.to_sym) unless allow_nil end end ActiveRecord::Base.connection.indexes(model.table_name).each do |key| col_syms = key.columns.map(&:to_sym) model.send(:validates_uniqueness_of, col_syms.first.to_sym, scope: col_syms[1..-1]) if key.unique end end