Module: DynamicActiveModel::Explorer

Defined in:
lib/dynamic-active-model/explorer.rb

Overview

The Explorer module provides a high-level interface for automatically discovering and setting up ActiveRecord models and their relationships from a database schema. It combines the functionality of Database and Associations classes into a simple one-call interface.

Examples:

Basic Usage

module DB; end
DynamicActiveModel::Explorer.explore(DB, database_config)

With Table Filtering

skip_tables = ['temporary_data', 'audit_logs']
DynamicActiveModel::Explorer.explore(DB, database_config, skip_tables)

With Custom Relationships

relationships = {
  'users' => {
    'manager_id' => 'manager',
    'department_id' => 'department'
  }
}
DynamicActiveModel::Explorer.explore(DB, database_config, [], relationships)

Class Method Summary collapse

Class Method Details

.build_relationships!(database, relationships) ⇒ void

This method returns an undefined value.

Sets up relationships between created models

Parameters:

  • database (Database)

    The database instance containing the models

  • relationships (Hash)

    Custom foreign key relationships to add



57
58
59
60
61
62
63
64
65
# File 'lib/dynamic-active-model/explorer.rb', line 57

def self.build_relationships!(database, relationships)
  relations = Associations.new(database)
  relationships.each do |table_name, foreign_keys|
    foreign_keys.each do |foreign_key, relationship_name|
      relations.add_foreign_key(table_name, foreign_key, relationship_name)
    end
  end
  relations.build!
end

.create_models!(base_module, connection_options, skip_tables) ⇒ Database

Creates ActiveRecord models from database tables

Parameters:

  • base_module (Module)

    The namespace for created models

  • connection_options (Hash)

    Database connection options

  • skip_tables (Array<String, Regexp>)

    Tables to exclude from model creation

Returns:

  • (Database)

    The configured database instance



43
44
45
46
47
48
49
50
51
# File 'lib/dynamic-active-model/explorer.rb', line 43

def self.create_models!(base_module, connection_options, skip_tables)
  database = Database.new(base_module, connection_options)
  skip_tables.each do |table_name|
    table_name = Regexp.new("^#{table_name}") if table_name.include?('*')
    database.skip_table(table_name)
  end
  database.create_models!
  database
end

.explore(base_module, connection_options, skip_tables = [], relationships = {}) ⇒ Database

Creates models and sets up relationships in a single call

Parameters:

  • base_module (Module)

    The namespace for created models

  • connection_options (Hash)

    Database connection options

  • skip_tables (Array<String, Regexp>) (defaults to: [])

    Tables to exclude from model creation

  • relationships (Hash) (defaults to: {})

    Custom foreign key relationships to add

Returns:

  • (Database)

    The configured database instance



32
33
34
35
36
# File 'lib/dynamic-active-model/explorer.rb', line 32

def self.explore(base_module, connection_options, skip_tables = [], relationships = {})
  database = create_models!(base_module, connection_options, skip_tables)
  build_relationships!(database, relationships)
  database
end