Sha256: 1a05191e2732e666eb2bcb078fdbef3363e066cd657a35d2c5c5b579d5c56d77

Contents?: true

Size: 1.81 KB

Versions: 1

Compression:

Stored size: 1.81 KB

Contents

# frozen_string_literal: true

require 'whatup'
require 'whatup/server/redirection'
require 'whatup/server/logger'

module Whatup
  module Server
    module DbInit
      extend Redirection
      extend WhatupLogger

      class << self
        def setup_db!
          log.debug { 'Setting up database ...' }

          db = "#{Dir.home}/.whatup.db"

          if File.exist?(db)
            log.debug { "Using existing database `#{db}" }
          else
            log.debug { "Creating new database `#{db}" }
            SQLite3::Database.new(db)
          end

          ActiveRecord::Base.establish_connection adapter: 'sqlite3',
                                                  database: db

          truncate_sql = <<~SQL
            DROP TABLE IF EXISTS clients_rooms;
            DROP TABLE IF EXISTS clients;
            DROP TABLE IF EXISTS messages;
            DROP TABLE IF EXISTS rooms;
          SQL
          log.debug { "Truncating existing data ...\n#{truncate_sql}" }
          ActiveRecord::Base.connection.execute truncate_sql

          StringIO.new.tap do |io|
            redirect(stdout: io) { create_tables! }
            log.debug { "Creating tables ...\n#{io&.string}" }
          end
        end

        private

        def create_tables!
          ActiveRecord::Schema.define do
            create_table :clients, force: true do |t|
              t.string :name
              t.references :room
              t.timestamps
            end
            create_table :messages, force: true do |t|
              t.string :content
              t.references :sender
              t.references :recipient
              t.timestamps
            end
            create_table :rooms, force: true do |t|
              t.string :name
              t.timestamps
            end
          end
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
whatup-0.3.5 lib/whatup/server/db_init.rb