class Convergence::Dumper
Public Instance Methods
dump_dsl(tables)
click to toggle source
# File lib/convergence/dumper.rb, line 2 def dump_dsl(tables) tables.map do |_, table| dump_table_dsl(table) end.join("\n\n") end
dump_table_dsl(table)
click to toggle source
# File lib/convergence/dumper.rb, line 8 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
Private Instance Methods
dump_column(column)
click to toggle source
# File lib/convergence/dumper.rb, line 29 def dump_column(column) argument = [column.column_name.to_sym.inspect] case [column.type, column.options[:limit]] when [:tinyint, '1'] column_type = "boolean" options = column.options.dup options.delete(:limit) options = options.merge(default: false) if options[:default] == "0" options = options.merge(default: true) if options[:default] == "1" argument << options.map { |k, v| key_value_text(k, v) } else column_type = column.type argument << column.options.map { |k, v| key_value_text(k, v) } end "t.#{column_type} #{argument.flatten.join(', ')}" end
dump_foreign_key(foreign_key)
click to toggle source
# File lib/convergence/dumper.rb, line 54 def dump_foreign_key(foreign_key) columns = single_or_multiple_symbol(foreign_key.from_columns) argument = [columns] argument << [key_value_symbol('reference', foreign_key.to_table)] argument << ["reference_column: #{single_or_multiple_symbol(foreign_key.to_columns)}"] argument << foreign_key.options.map { |k, v| key_value_text(k, v) } "t.foreign_key #{argument.flatten.join(', ')}" end
dump_index(index)
click to toggle source
# File lib/convergence/dumper.rb, line 47 def dump_index(index) columns = single_or_multiple_symbol(index.index_columns) argument = [columns] argument << index.options.map { |k, v| key_value_text(k, v) } "t.index #{argument.flatten.join(', ')}" end
key_value_symbol(k, v)
click to toggle source
# File lib/convergence/dumper.rb, line 81 def key_value_symbol(k, v) "#{k}: #{v.to_sym.inspect}" end
key_value_text(k, v)
click to toggle source
# File lib/convergence/dumper.rb, line 72 def key_value_text(k, v) value = if v.to_s == 'true' || v.to_s == 'false' || v.to_s =~ /^\d+$/ v else %(#{v.inspect}) end "#{k}: #{value}" end
single_or_multiple_symbol(values)
click to toggle source
# File lib/convergence/dumper.rb, line 63 def single_or_multiple_symbol(values) values_array = [values].flatten if values_array.size == 1 values_array.first.to_sym.inspect else values.map(&:to_sym).inspect end end