class Convergence::Table

Attributes

columns[RW]
foreign_keys[RW]
indexes[RW]
table_name[RW]
table_options[RW]

Public Class Methods

new(table_name, options = {}) click to toggle source
# File lib/convergence/table.rb, line 47
def initialize(table_name, options = {})
  @table_name = table_name
  @table_options = options.reject { |k| k == :id }
  @columns = {}
  @indexes = {}
  @foreign_keys = {}
end

Public Instance Methods

boolean(column_name, options = {}) click to toggle source
# File lib/convergence/table.rb, line 17
def boolean(column_name, options = {})
  case options[:default]
  when TrueClass
    options[:default] = 1
  when FalseClass
    options[:default] = 0
  end
  tinyint(column_name, options.merge(limit: 1))
end
foreign_key(key_columns, options = {}) click to toggle source
# File lib/convergence/table.rb, line 33
def foreign_key(key_columns, options = {})
  if options[:reference].nil? || options[:reference_column].nil?
    fail ArgumentError.new("#{@table_name} - #{key_columns}: require reference/reference_column parameters")
  end
  key_name = options[:name]
  key_name = "#{table_name}_#{[key_columns].flatten.join('_')}_fk" if key_name.nil?
  @foreign_keys[key_name] = Convergence::ForeignKey.new(
    key_name,
    key_columns,
    options[:reference],
    [options[:reference_column]].flatten,
    options.reject { |k, _v| k == :reference || k == :reference_column })
end
index(index_columns, options = {}) click to toggle source
# File lib/convergence/table.rb, line 27
def index(index_columns, options = {})
  index_name = options[:name]
  index_name = "index_#{table_name}_on_#{[index_columns].flatten.join('_')}" if index_name.nil?
  @indexes[index_name] = Convergence::Index.new(index_name, index_columns, options)
end