class Ridgepole::DSLParser::TableDefinition

Constants

ALIAS_TYPES
DEFAULT_PRIMARY_KEY_TYPE
TYPES

Attributes

__definition[R]

Public Class Methods

new(table_name, base) click to toggle source
# File lib/ridgepole/dsl_parser/table_definition.rb, line 8
def initialize(table_name, base)
  @__definition = {}
  @table_name = table_name
  @base = base
end

Public Instance Methods

belongs_to(*args)
Alias for: references
blob(*args) click to toggle source

XXX:

# File lib/ridgepole/dsl_parser/table_definition.rb, line 118
def blob(*args)
  options = args.extract_options!
  options = { limit: 65_535 }.merge(options)
  column_names = args

  column_names.each do |name|
    column_type = (0..0xff).cover?(options[:limit]) ? :blob : :binary
    column(name, column_type, options)
  end
end
check_constraint(expression, options = {}) click to toggle source
# File lib/ridgepole/dsl_parser/table_definition.rb, line 179
def check_constraint(expression, options = {})
  @base.add_check_constraint(@table_name, expression, options)
end
column(name, type, options = {}) click to toggle source
# File lib/ridgepole/dsl_parser/table_definition.rb, line 14
def column(name, type, options = {})
  name = name.to_s
  index_options = options.key?(:index) ? options.delete(:index) : false

  @__definition[name] = {
    type: type,
    options: options,
  }

  index(name, index_options.is_a?(Hash) ? index_options : {}) if index_options
end
exclusion_constraint(expression, options = {}) click to toggle source
# File lib/ridgepole/dsl_parser/table_definition.rb, line 183
def exclusion_constraint(expression, options = {})
  @base.add_exclusion_constraint(@table_name, expression, options)
end
foreign_key(name, options = {}) click to toggle source
# File lib/ridgepole/dsl_parser/table_definition.rb, line 142
def foreign_key(name, options = {})
  @base.add_foreign_key(@table_name, name, options)
end
index(name, options = {}) click to toggle source
# File lib/ridgepole/dsl_parser/table_definition.rb, line 138
def index(name, options = {})
  @base.add_index(@table_name, name, options)
end
references(*args) click to toggle source
# File lib/ridgepole/dsl_parser/table_definition.rb, line 152
def references(*args)
  options = args.extract_options!
  polymorphic = options.delete(:polymorphic)
  polymorphic_options = polymorphic.is_a?(Hash) ? polymorphic : {}
  # https://github.com/rails/rails/blob/5-2-1/activerecord/lib/active_record/connection_adapters/abstract/schema_definitions.rb#L167
  polymorphic_options.merge!(options.slice(:null, :first, :after))
  index_options = options.key?(:index) ? options.delete(:index) : true
  type = options.delete(:type) || DEFAULT_PRIMARY_KEY_TYPE
  foreign_key_options = options.delete(:foreign_key)

  args.each do |col|
    column("#{col}_id", type, options)
    column("#{col}_type", :string, polymorphic_options) if polymorphic
    if index_options
      columns = polymorphic ? ["#{col}_type", "#{col}_id"] : ["#{col}_id"]
      index(columns, index_options.is_a?(Hash) ? index_options : {})
    end
    if foreign_key_options # rubocop:disable Style/Next
      fk_opts = foreign_key_options.is_a?(Hash) ? foreign_key_options.dup : {}
      fk_opts.update(column: "#{col}_id") if col.to_s.singularize != col.to_s
      to_table = fk_opts.delete(:to_table) || col.to_s.pluralize
      @base.add_foreign_key(@table_name, to_table, fk_opts)
    end
  end
end
Also aliased as: belongs_to
timestamps(*args) click to toggle source
# File lib/ridgepole/dsl_parser/table_definition.rb, line 146
def timestamps(*args)
  options = { null: false }.merge(args.extract_options!)
  column(:created_at, :datetime, options.dup)
  column(:updated_at, :datetime, options.dup)
end
unique_constraint(column_name, options = {}) click to toggle source
# File lib/ridgepole/dsl_parser/table_definition.rb, line 187
def unique_constraint(column_name, options = {})
  @base.add_unique_constraint(@table_name, column_name, options)
end