Class: Convergence::Dumper
- Inherits:
-
Object
- Object
- Convergence::Dumper
show all
- Defined in:
- lib/convergence/dumper.rb
Defined Under Namespace
Classes: MysqlSchemaDumper, PostgresSchemaDumper, SqliteSchemaDumper
Constant Summary
collapse
- RAILS_TYPE_MAPPING =
Convergence's DSL type names follow MySQL terminology; map them to the
closest ActiveRecord migration column type.
{
tinyint: :integer,
smallint: :integer,
mediumint: :integer,
int: :integer,
bigint: :bigint,
float: :float,
double: :float,
decimal: :decimal,
char: :string,
varchar: :string,
tinyblob: :binary,
blob: :binary,
mediumblob: :binary,
longblob: :binary,
tinytext: :text,
text: :text,
mediumtext: :text,
longtext: :text,
date: :date,
time: :time,
datetime: :datetime,
timestamp: :datetime,
year: :integer,
json: :json,
enum: :string,
set: :string
}.freeze
- RAILS_UNSUPPORTED_COLUMN_OPTIONS =
Options that only make sense for convergence's own SQL generators, with no
equivalent in an ActiveRecord migration's create_table DSL.
%i[character_set collate extra after values].freeze
Instance Method Summary
collapse
Instance Method Details
#dump_dsl(tables) ⇒ Object
37
38
39
40
41
|
# File 'lib/convergence/dumper.rb', line 37
def dump_dsl(tables)
tables.map do |_, table|
dump_table_dsl(table)
end.join("\n\n")
end
|
#dump_rails_migration(tables, class_name, rails_version: '7.0') ⇒ Object
62
63
64
65
66
67
68
69
|
# File 'lib/convergence/dumper.rb', line 62
def dump_rails_migration(tables, class_name, rails_version: '7.0')
dsl = "class #{class_name} < ActiveRecord::Migration[#{rails_version}]\n"
dsl += " def change\n"
dsl += tables.map { |_, table| dump_table_rails_migration(table) }.join("\n\n")
dsl += "\n end\n"
dsl += 'end'
dsl
end
|
#dump_table_dsl(table) ⇒ Object
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
# File 'lib/convergence/dumper.rb', line 43
def dump_table_dsl(table)
table_argument = [table.table_name.to_sym.inspect]
table_argument << table.table_options.map { |k, v| key_value_text(k, v) }
dsl = "create_table #{table_argument.flatten.join(', ')} do |t|\n"
dsl += " #{table.columns.map { |_, column| dump_column(column) }.join("\n ")}"
dsl += "\n" if !table.indexes.empty? || !table.foreign_keys.empty?
dsl += "\n"
unless table.indexes.empty?
dsl += " #{table.indexes.map { |_, index| dump_index(index) }.join("\n ")}"
dsl += "\n"
end
unless table.foreign_keys.empty?
dsl += " #{table.foreign_keys.map { |_, key| dump_foreign_key(key) }.join("\n ")}"
dsl += "\n"
end
dsl += 'end'
dsl
end
|
#dump_table_rails_migration(table) ⇒ Object
71
72
73
74
75
76
77
78
79
80
|
# File 'lib/convergence/dumper.rb', line 71
def dump_table_rails_migration(table)
table_argument = [table.table_name.to_sym.inspect]
dsl = " create_table #{table_argument.join(', ')} do |t|\n"
body_lines = rails_column_lines(table.columns)
body_lines += table.indexes.map { |_, index| dump_rails_index(index) }
body_lines += table.foreign_keys.map { |_, key| dump_rails_foreign_key(key) }
dsl += body_lines.map { |line| " #{line}" }.join("\n")
dsl += "\n end"
dsl
end
|