class Slimer::Database
@abstract Wraps Sequel.connect to easily interface with the Slimer
database
Constants
- MAX_CONNECTION_RETRIES
- REQUIRED_TABLES
Attributes
url[R]
Public Class Methods
connection(url)
click to toggle source
# File lib/slimer/database.rb, line 23 def self.connection(url) db = new(url) # Sequel::Model requires a connection before you can subclass. Now that # we have a connection, require the models. connection = db.connection db.load_models connection end
new(url)
click to toggle source
# File lib/slimer/database.rb, line 16 def initialize(url) @url = url add_supported_extensions resolve_missing_tables! connection.loggers << Slimer.logger if connection.loggers.empty? end
Public Instance Methods
connection()
click to toggle source
# File lib/slimer/database.rb, line 32 def connection retry_count = 1 @connection ||= Sequel.connect(url) rescue Sequel::DatabaseConnectionError Slimer.logger.warn "Waiting for database to become available... #{retry_count}" sleep 1 and retry if retry_count >= MAX_CONNECTION_RETRIES end
Also aliased as: connect
create!()
click to toggle source
# File lib/slimer/database.rb, line 47 def create! create_substances unless connection.table_exists?(:substances) create_api_keys unless connection.table_exists?(:api_keys) end
load_models()
click to toggle source
# File lib/slimer/database.rb, line 56 def load_models require_relative "api_key" unless defined?(Slimer::ApiKey) require_relative "substance" unless defined?(Slimer::Substance) end
migrated?()
click to toggle source
# File lib/slimer/database.rb, line 52 def migrated? REQUIRED_TABLES.all? { |t| connection.table_exists?(t) } end
resolve_missing_tables!()
click to toggle source
# File lib/slimer/database.rb, line 41 def resolve_missing_tables! return if migrated? create! end
Private Instance Methods
add_supported_extensions()
click to toggle source
# File lib/slimer/database.rb, line 63 def add_supported_extensions return if connection.database_type != :postgres connection.extension :pg_json Sequel.extension :pg_json_ops end
create_api_keys()
click to toggle source
# File lib/slimer/database.rb, line 95 def create_api_keys connection.create_table(:api_keys, ignore_index_errors: true) do primary_key :id String :name String :token end end
create_substances()
click to toggle source
# File lib/slimer/database.rb, line 70 def create_substances return create_substances_for_postgres if connection.database_type == :postgres connection.create_table(:substances, ignore_index_errors: true) do primary_key :id String :uid String :group, default: Slimer::DEFAULT_GROUP String :payload, text: true String :metadata, text: true full_text_index :payload full_text_index :metadata end end
create_substances_for_postgres()
click to toggle source
# File lib/slimer/database.rb, line 84 def create_substances_for_postgres connection.create_table(:substances, ignore_index_errors: true) do String :uid String :group, default: Slimer::DEFAULT_GROUP JSONB :payload JSONB :metadata index :payload, type: :gin index :metadata, type: :gin end end