Class: DatabaseDocumenter::Exporters::ExportToMd

Inherits:
BaseExporter
  • Object
show all
Defined in:
lib/database_documenter/exporters/export_to_md.rb

Constant Summary

Constants inherited from BaseExporter

BaseExporter::APP_NAME, BaseExporter::HEADER_SECOND_LINE

Instance Attribute Summary

Attributes inherited from BaseExporter

#commented_cols_count, #generated_cols_count, #printed_tables, #table_data

Instance Method Summary collapse

Methods inherited from BaseExporter

#initialize, #load_all_models, #skip_class?

Constructor Details

This class inherits a constructor from DatabaseDocumenter::Exporters::BaseExporter

Instance Method Details

#callObject



5
6
7
8
# File 'lib/database_documenter/exporters/export_to_md.rb', line 5

def call
  load_all_models
  generate_md_document
end

#generate_md_documentObject



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/database_documenter/exporters/export_to_md.rb', line 10

def generate_md_document
  md_file_header = StringIO.new
  md_file_body = StringIO.new
  md_file = File.open("database.md", "w")

  generate_md_file_header(md_file_header)

  ActiveRecord::Base.descendants.each do |klass|
    next if skip_class?(klass)

    (md_file_header, md_file_body, klass)
    generate_table_columns(md_file_body, klass)
  end
  md_file.puts md_file_header.string
  md_file.puts md_file_body.string
  md_file.close
end

#generate_md_file_header(md_file_header) ⇒ Object



28
29
30
31
32
# File 'lib/database_documenter/exporters/export_to_md.rb', line 28

def generate_md_file_header(md_file_header)
  md_file_header << "# #{APP_NAME} Database Design\n"
  md_file_header << "#{HEADER_SECOND_LINE}\n"
  md_file_header << "# Tables \n"
end

#generate_table_columns(md_file_body, klass) ⇒ Object



59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
# File 'lib/database_documenter/exporters/export_to_md.rb', line 59

def generate_table_columns(md_file_body, klass)
  columns_data = table_data.get_columns_data(klass)

  md_file_body << "### Table attributes\n"
  md_file_body << "|Attribute|Description|Type|Example of values|\n"
  md_file_body << "|---|---|---|---|\n"

  columns_data.each do |col|
    description = StringIO.new
    col[:description].each do |column_description|
      description << "- #{column_description}\n"
    end
    md_file_body.puts "|#{col[:name]}|#{col[:description][0]}|#{col[:type]}|#{col[:value]}|\n"
  end
  md_file_body.puts "\n"
end

#generate_table_metadata(md_file_header, md_file_body, klass) ⇒ Object



34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/database_documenter/exporters/export_to_md.rb', line 34

def (md_file_header, md_file_body, klass)
   = table_data.(klass)

  md_file_header << "- [#{klass.table_name}](##{klass.table_name})\n"

  md_file_body << "\n"
  md_file_body << "## #{klass.table_name}\n"
  md_file_body << "### Table details\n"
  md_file_body << "|Key|Value|\n"
  md_file_body << "|---|---|\n"
  md_file_body << "|Table Name|#{[:name]}|\n"
  md_file_body << "|Description|#{[:description]}|\n"
  md_file_body << "|Primary Key|#{[:primary_key]}|\n"

  md_file_body << "\n"

  # TODO: Update DatabaseDocumenter::TableData to return this value as a String
  # And let every Exporter renders it according to the required format
  sql_code = [:sql_code].contents.map(&:runs).map(&:first).map(&:text_content).join("\n")
  md_file_body << "### Table SQL Code\n"
  md_file_body << "```SQL\n"
  md_file_body << "#{sql_code}\n"
  md_file_body << "```\n"
end