Module: Async::Matrix::Bridge::Discord::DB

Defined in:
lib/async/matrix/bridge/discord/db.rb,
lib/async/matrix/bridge/discord/db/file.rb,
lib/async/matrix/bridge/discord/db/user.rb,
lib/async/matrix/bridge/discord/db/guild.rb,
lib/async/matrix/bridge/discord/db/portal.rb,
lib/async/matrix/bridge/discord/db/puppet.rb,
lib/async/matrix/bridge/discord/db/message.rb,
lib/async/matrix/bridge/discord/db/reaction.rb,
lib/async/matrix/bridge/discord/db/connection.rb

Overview

Database module for the Discord bridge.

Establishes a connection using the bridge config’s database section, runs Sequel migrations, and wires up all model classes to the database.

Supports both SQLite (with foreign keys + WAL) and PostgreSQL.

db = Async::Matrix::Bridge::Discord::DB.connect(config)
# All models are now ready:
DB::User.create(mxid: "@alice:example.com")
DB::Portal.where(discord_guild_id: "123").all

Defined Under Namespace

Modules: Connection Classes: CachedFile, Guild, Message, Portal, Puppet, Reaction, User

Constant Summary collapse

MIGRATIONS_PATH =
File.join(__dir__, "db", "migrations").freeze

Class Method Summary collapse

Class Method Details

.bind_models(db) ⇒ Object

Bind all model classes to the given database.

Parameters:

  • db (Sequel::Database)


63
64
65
66
67
68
69
70
71
# File 'lib/async/matrix/bridge/discord/db.rb', line 63

def self.bind_models(db)
  Async::Matrix::Bridge::Discord::DB::User.dataset        = db[:users]
  Async::Matrix::Bridge::Discord::DB::Guild.dataset       = db[:guilds]
  Async::Matrix::Bridge::Discord::DB::Portal.dataset      = db[:portals]
  Async::Matrix::Bridge::Discord::DB::Puppet.dataset      = db[:puppets]
  Async::Matrix::Bridge::Discord::DB::Message.dataset     = db[:messages]
  Async::Matrix::Bridge::Discord::DB::Reaction.dataset    = db[:reactions]
  Async::Matrix::Bridge::Discord::DB::CachedFile.dataset  = db[:files]
end

.connect(config) ⇒ Sequel::Database

Connect to the database, run migrations, and bind all models.

Parameters:

Returns:

  • (Sequel::Database)


46
47
48
49
50
51
# File 'lib/async/matrix/bridge/discord/db.rb', line 46

def self.connect(config)
  db = Connection.establish(config.database)
  migrate!(db)
  bind_models(db)
  db
end

.migrate!(db) ⇒ Object

Run pending migrations.

Parameters:

  • db (Sequel::Database)


56
57
58
# File 'lib/async/matrix/bridge/discord/db.rb', line 56

def self.migrate!(db)
  Sequel::Migrator.run(db, MIGRATIONS_PATH)
end