class ActiveDesigner::SchemaCreator

Attributes

output[R]

Public Instance Methods

create_tables(schema) click to toggle source
# File lib/active_designer/schema_creator.rb, line 18
def create_tables(schema)
  tables = {}
  table_index = 100
  column_index = 100
  reference_index = 100
  table_id = nil
  schema.each do |line|
    if line.include?("create_table")
      table_index += 1
      column_index = 100
      reference_index = 100
      table_name = format_name(line)
      table_id = "tbl-" + table_index.to_s
      tables[table_id] = {
        name: table_name,
        original_name: table_name,
        status: { original: true, modified: false, new: false, deleted: false },
        columns: {},
        references: {},
        id: table_id
      }
    elsif line.include?("t.")
      column_name = format_name(line)
      if !column_name.include?('_id')
        column_index += 1
        column_type = format_type(line)
        column_id = "col-#{table_index.to_s}-#{column_index.to_s}"
        tables[table_id][:columns][column_id] = {
          name: column_name,
          original_name: column_name,
          type: column_type,
          original_type: column_type,
          id: column_id,
          status: { original: true, new: false, modified: false, deleted: false }
        }
      end
    elsif line.include?("add_foreign_key")
      reference_index += 1
      components = line.split(" ")
      table_name = components[1].delete("\",")
      foreign_table_name = components[2].delete("\"")
      table_id = ""
      foreign_table_id = ""
      tables.each do |table|
        table_id = table[0] if table[1][:name] == table_name
        foreign_table_id = table[0] if table[1][:name] == foreign_table_name
      end
      reference_id = "ref-#{table_id.split('-')[1]}-#{reference_index}"
      tables[table_id][:references][reference_id] = {
        id: reference_id,
        table_id: table_id,
        foreign_table_name: foreign_table_name,
        foreign_table_id: foreign_table_id,
        status: { original: true, new: false, deleted: false }
      }
    end
  end
  tables
end
delete_comments(schema) click to toggle source
# File lib/active_designer/schema_creator.rb, line 11
def delete_comments(schema)
  t = schema.map do |line|
    line = line.strip
    line if line[0] != "#" && !line.empty?
  end.compact
end
format(schema) click to toggle source
# File lib/active_designer/schema_creator.rb, line 6
def format(schema)
  schema = delete_comments(schema.split("\n"))
  create_tables(schema)
end
format_name(line) click to toggle source
# File lib/active_designer/schema_creator.rb, line 78
def format_name(line)
  name = line.split(" ")[1].delete("\",")
end
format_type(line) click to toggle source
# File lib/active_designer/schema_creator.rb, line 82
def format_type(line)
  line.split(" ")[0].split(".")[1]
end