# frozen_string_literal: true require "date" require "extralite" require "ipaddr" require "oj" module Migrations module Database INTERMEDIATE_DB_SCHEMA_PATH = File.join(::Migrations.root_path, "db", "intermediate_db_schema") UPLOADS_DB_SCHEMA_PATH = File.join(::Migrations.root_path, "db", "uploads_db_schema") def self.migrate(db_path, migrations_path:) Migrator.new(db_path).migrate(migrations_path) end def self.reset!(db_path) Migrator.new(db_path).reset! end def self.connect(path) connection = Connection.new(path:) return connection unless block_given? begin yield(connection) ensure connection.close end nil end def self.format_datetime(value) value&.utc&.iso8601 end def self.format_date(value) value&.to_date&.iso8601 end def self.format_boolean(value) return nil if value.nil? value ? 1 : 0 end def self.format_ip_address(value) return nil if value.blank? IPAddr.new(value).to_s rescue ArgumentError nil end def self.to_blob(value) return nil if value.blank? ::Extralite::Blob.new(value) end def self.to_json(value) return nil if value.nil? ::Oj.dump(value, mode: :compat) end end end