class GeneratedSchemaValidations::Table

Constants

Validation

Attributes

table_name[R]

Public Class Methods

new(table_name, &block) click to toggle source
# File lib/generated_schema_validations/table.rb, line 12
def initialize(table_name, &block)
  @table_name = table_name
  @column_names = []
  @possible_belongs_to_not_null_columns = []
  @unique_indexes = []
  @validations = []

  instance_eval(&block)
end

Public Instance Methods

bigint(name, column_options = {}) click to toggle source
# File lib/generated_schema_validations/table.rb, line 55
def bigint(name, column_options = {})
  null_validation(:bigint, name, column_options)

  validates name, :numericality, allow_nil: true
end
binary(name, column_options = {}) click to toggle source
# File lib/generated_schema_validations/table.rb, line 91
def binary(name, column_options = {})
  null_validation(:binary, name, column_options)
end
boolean(name, column_options = {}) click to toggle source
# File lib/generated_schema_validations/table.rb, line 87
def boolean(name, column_options = {})
  null_validation(:boolean, name, column_options)
end
date(name, column_options = {}) click to toggle source
# File lib/generated_schema_validations/table.rb, line 82
def date(name, column_options = {})
  null_validation(:date, name, column_options)
  validates name, :date_in_db_range
end
datetime(name, column_options = {}) click to toggle source
# File lib/generated_schema_validations/table.rb, line 77
def datetime(name, column_options = {})
  null_validation(:datetime, name, column_options)
  validates name, :date_time_in_db_range
end
decimal(name, column_options = {}) click to toggle source
# File lib/generated_schema_validations/table.rb, line 103
def decimal(name, column_options = {})
  null_validation(:decimal, name, column_options)
  return if column_options[:array]
  return if column_options[:precision].blank? || column_options[:scale].blank?

  limit = 10**(column_options[:precision] - (column_options[:scale] || 0))
  validates name, :numericality, allow_nil: true, greater_than: -limit, less_than: limit
end
float(name, column_options = {}) click to toggle source
# File lib/generated_schema_validations/table.rb, line 112
def float(name, column_options = {})
  null_validation(:float, name, column_options)
  return if column_options[:array]

  validates name, :numericality, allow_nil: true
end
index(names, index_options = {}) click to toggle source
# File lib/generated_schema_validations/table.rb, line 127
def index(names, index_options = {})
  names = [names] unless names.is_a?(Array)
  return unless index_options[:unique]
  return unless names.all? { |name| name.to_s.in?(@column_names) }

  @unique_indexes.push(names.map(&:to_s))
end
integer(name, column_options = {}) click to toggle source
# File lib/generated_schema_validations/table.rb, line 61
def integer(name, column_options = {})
  null_validation(:integer, name, column_options)

  return if column_options[:array]

  integer_range = ::ActiveRecord::Type::Integer.new.send(:range)
  options = { allow_nil: true, only_integer: true, greater_than_or_equal_to: integer_range.begin }
  if integer_range.exclude_end?
    options[:less_than] = integer_range.end
  else
    options[:less_than_or_equal_to] = integer_range.end
  end

  validates name, :numericality, options
end
json(name, column_options = {}) click to toggle source
# File lib/generated_schema_validations/table.rb, line 99
def json(name, column_options = {})
  null_validation(:json, name, column_options)
end
null_validation(datatype, name, column_options) click to toggle source
# File lib/generated_schema_validations/table.rb, line 38
def null_validation(datatype, name, column_options)
  @column_names.push(name.to_s)

  return if column_options[:null] != false

  @possible_belongs_to_not_null_columns.push(name.to_sym) if datatype.in?(%i[bigint integer uuid])
  if datatype == :boolean
    validates name, :inclusion, in: [true, false], message: :blank
  else
    validates name, :presence
  end
end
string(name, column_options = {}) click to toggle source
# File lib/generated_schema_validations/table.rb, line 95
def string(name, column_options = {})
  text(name, column_options)
end
text(name, column_options = {}) click to toggle source
# File lib/generated_schema_validations/table.rb, line 119
def text(name, column_options = {})
  null_validation(:text, name, column_options)
  return if column_options[:array]
  return if column_options[:limit].blank?

  validates name, :length, allow_nil: true, maximum: column_options[:limit]
end
to_s() click to toggle source
# File lib/generated_schema_validations/table.rb, line 22
def to_s
  string = "\n"
  string += "def dbv_#{table_name}_validations\n"
  if @possible_belongs_to_not_null_columns.present?
    string += "  belongs_to_presence_validations_for(#{@possible_belongs_to_not_null_columns.inspect})\n"
  end
  string += "  belongs_to_uniqueness_validations_for(#{@unique_indexes.inspect})\n" if @unique_indexes.present?
  string += "  uniqueness_validations_for(#{@unique_indexes.inspect})\n" if @unique_indexes.present?
  string += @validations.uniq.map { |v| "  #{v}\n" }.join
  "#{string}end\n"
end
uuid(name, column_options = {}) click to toggle source
# File lib/generated_schema_validations/table.rb, line 51
def uuid(name, column_options = {})
  null_validation(:uuid, name, column_options)
end
validates(attribute, validator, options = {}) click to toggle source
# File lib/generated_schema_validations/table.rb, line 34
def validates(attribute, validator, options = {})
  @validations.push(Validation.new(attribute, validator, options))
end