Module: HotwireClub::MCP::Database

Defined in:
lib/hotwire_club/mcp/database.rb,
lib/hotwire_club/mcp/database/adapter.rb,
lib/hotwire_club/mcp/database/relations/docs.rb,
lib/hotwire_club/mcp/database/relations/tags.rb,
lib/hotwire_club/mcp/database/relations/chunks.rb,
lib/hotwire_club/mcp/database/relations/doc_tags.rb,
lib/hotwire_club/mcp/database/repositories/docs_repo.rb,
lib/hotwire_club/mcp/database/repositories/tags_repo.rb,
lib/hotwire_club/mcp/database/repositories/chunks_repo.rb

Overview

Database module for ROM container setup

Defined Under Namespace

Classes: Adapter, Chunks, ChunksRepo, DocTags, Docs, DocsRepo, Tags, TagsRepo

Class Method Summary collapse

Class Method Details

.container(db_path = nil) ⇒ ROM::Container

Create and configure ROM container

Parameters:

  • db_path (String, nil) (defaults to: nil)

    Database path (defaults to Schema::DB_PATH)

Returns:

  • (ROM::Container)

    Configured ROM container



18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/hotwire_club/mcp/database.rb', line 18

def self.container(db_path = nil)
  db_path ||= Schema::DB_PATH
  # Use absolute path with three slashes for SQLite URI format
  # URI encode the path to handle spaces and special characters
  absolute_path = File.expand_path(db_path)
  encoded_path = URI::RFC2396_PARSER.escape(absolute_path)
  sqlite_uri = "sqlite:///#{encoded_path}"

  ROM.container(:sql, sqlite_uri) do |config|
    # auto_registration expects files in subdirectories (relations/, mappers/, commands/)
    # It will automatically require and register relation classes from database/relations/
    config.auto_registration(
      File.join(__dir__, "database"),
      namespace: "HotwireClub::MCP::Database",
    )
  end
end