Ectomancer.Installer.SchemaDiscovery (Ectomancer v1.2.1)

Copy Markdown View Source

Discovers Ecto schemas in a Phoenix/Elixir project.

Supports two discovery methods:

  1. File scanning: Scans lib/*/.ex files for use Ecto.Schema
  2. Module introspection: Uses Code.ensure_loaded? for compiled modules

Usage

schemas = Ectomancer.Installer.SchemaDiscovery.discover()

# Returns: [
#   %{
#     module: MyApp.Accounts.User,
#     table: "users",
#     context: "Accounts",
#     associations: [:posts],
#     writable_fields: [:email, :name]
#   },
#   ...
# ]

Summary

Functions

Analyzes a single schema module and extracts metadata.

Discovers all Ecto schemas in the current project.

Discovers schemas by scanning source files.

Discovers schemas using module introspection.

Functions

analyze_module(module)

@spec analyze_module(module()) :: %{
  table: String.t() | nil,
  associations: [atom()],
  writable_fields: [atom()]
}

Analyzes a single schema module and extracts metadata.

discover()

@spec discover() :: [
  %{
    module: module(),
    table: String.t() | nil,
    context: String.t() | nil,
    associations: [atom()],
    writable_fields: [atom()]
  }
]

Discovers all Ecto schemas in the current project.

Tries module introspection first (faster for compiled code), then falls back to file scanning for any missed schemas.

file_discovery()

@spec file_discovery() :: [map()]

Discovers schemas by scanning source files.

Useful for finding schemas that haven't been compiled yet.

module_introspection()

@spec module_introspection() :: [map()]

Discovers schemas using module introspection.

Works best for compiled modules. Returns nil for embedded schemas.