class HecksAdapters::SQLDatabase::SchemaFactory
Build a Schema
Factory
Public Class Methods
new(domain_spec)
click to toggle source
# File lib/schema_factory.rb, line 5 def initialize(domain_spec) @domain_spec = domain_spec @tables = Table.factory(domain_objects) @join_tables = [] end
Public Instance Methods
build()
click to toggle source
# File lib/schema_factory.rb, line 11 def build @tables.each do |table| swap_domain_references(table) build_join_tables(table) remove_domain_columns(table) end Schema.new(@tables + @join_tables) end
Private Instance Methods
add_db_reference(column, table)
click to toggle source
# File lib/schema_factory.rb, line 47 def add_db_reference(column, table) table.columns << foreign_key_column(column.referenced_object) end
build_join_tables(table)
click to toggle source
# File lib/schema_factory.rb, line 33 def build_join_tables(table) table.join_table_columns.each do |column| @join_tables << JoinTable.new(table, column) end end
domain_objects()
click to toggle source
# File lib/schema_factory.rb, line 23 def domain_objects @domain_spec.domain_modules.values.flat_map(&:objects) end
foreign_key_column(column_name, is_list = false)
click to toggle source
# File lib/schema_factory.rb, line 51 def foreign_key_column(column_name, is_list = false) Column.new(name: column_name + '_id', type: 'String', is_list: is_list) end
remove_domain_columns(table)
click to toggle source
# File lib/schema_factory.rb, line 39 def remove_domain_columns(table) (table.foreign_key_columns + table.join_table_columns).each do |column| table.columns = table.columns.select do |table_column| table_column != column end end end
swap_domain_references(table)
click to toggle source
# File lib/schema_factory.rb, line 27 def swap_domain_references(table) table.foreign_key_columns.each do |column| add_db_reference(column, table) end end