Class: Slimer::Database Abstract
- Inherits:
-
Object
- Object
- Slimer::Database
- Defined in:
- lib/slimer/database.rb
Overview
This class is abstract.
Wraps Sequel.connect to easily interface with the Slimer database
Constant Summary collapse
- MAX_CONNECTION_RETRIES =
10
- REQUIRED_TABLES =
%i[api_keys substances].freeze
Instance Attribute Summary collapse
-
#url ⇒ Object
readonly
Returns the value of attribute url.
Class Method Summary collapse
Instance Method Summary collapse
- #connection ⇒ Object (also: #connect)
- #create! ⇒ Object
-
#initialize(url) ⇒ Database
constructor
A new instance of Database.
- #load_models ⇒ Object
- #migrated? ⇒ Boolean
- #resolve_missing_tables! ⇒ Object
Constructor Details
Instance Attribute Details
#url ⇒ Object (readonly)
Returns the value of attribute url.
11 12 13 |
# File 'lib/slimer/database.rb', line 11 def url @url end |
Class Method Details
.connection(url) ⇒ Object
23 24 25 26 27 28 29 30 |
# 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 |
Instance Method Details
#connection ⇒ Object Also known as: connect
32 33 34 35 36 37 38 |
# 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 |
#create! ⇒ Object
47 48 49 50 |
# 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 ⇒ Object
56 57 58 59 |
# 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? ⇒ Boolean
52 53 54 |
# File 'lib/slimer/database.rb', line 52 def migrated? REQUIRED_TABLES.all? { |t| connection.table_exists?(t) } end |
#resolve_missing_tables! ⇒ Object
41 42 43 44 45 |
# File 'lib/slimer/database.rb', line 41 def resolve_missing_tables! return if migrated? create! end |