Class: SchemaFerry::Converter::ColumnConverter

Inherits:
Object
  • Object
show all
Includes:
Warnings
Defined in:
lib/schema_ferry/converter/column_converter.rb

Constant Summary collapse

UNSIGNED_LIMIT_BUMP =

PG has no unsigned integers: bump to the next size that holds the full unsigned range. Keys/values are AR byte limits.

{ 1 => 2, 2 => 4, 3 => 4, 4 => 8 }.freeze

Instance Method Summary collapse

Constructor Details

#initialize(type_mapper) ⇒ ColumnConverter

Returns a new instance of ColumnConverter.



12
13
14
# File 'lib/schema_ferry/converter/column_converter.rb', line 12

def initialize(type_mapper)
  @type_mapper = type_mapper
end

Instance Method Details

#call(raw, table_name, rule, fk_columns = []) ⇒ Object



16
17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/schema_ferry/converter/column_converter.rb', line 16

def call(raw, table_name, rule, fk_columns = [])
  raw      = bump_unsigned_integer(raw, table_name, fk_columns.include?(raw[:name]))
  raw      = drop_zero_date_default(raw, table_name)
  override = rule&.column_type_overrides&.[](raw[:name])
  col_opts = raw.slice(:limit, :precision, :scale, :null, :default, :default_function, :comment)

  if override
    col_opts[:default] = override_default(raw, rule, override)
    ColumnSchema.new(name: raw[:name], type: override, **col_opts)
  else
    pg_type, pg_opts = @type_mapper.call(raw[:type], col_opts)
    ColumnSchema.new(name: raw[:name], type: pg_type, **pg_opts)
  end
end