Module: Legion::Data::Connection

Defined in:
lib/legion/data/connection.rb

Constant Summary collapse

ADAPTERS =
%i[sqlite mysql2 postgres].freeze

Class Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

.sequelObject

Returns the value of attribute sequel.



11
12
13
# File 'lib/legion/data/connection.rb', line 11

def sequel
  @sequel
end

Class Method Details

.adapterObject



13
14
15
# File 'lib/legion/data/connection.rb', line 13

def adapter
  @adapter ||= Legion::Settings[:data][:adapter]&.to_sym || :sqlite
end

.creds_builder(final_creds = {}) ⇒ Object



44
45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/legion/data/connection.rb', line 44

def creds_builder(final_creds = {})
  final_creds.merge! Legion::Data::Settings.creds(adapter)
  final_creds.merge! Legion::Settings[:data][:creds] if Legion::Settings[:data][:creds].is_a? Hash

  return final_creds if Legion::Settings[:vault].nil?

  if Legion::Settings[:vault][:connected] && ::Vault.sys.mounts.key?(:database)
    temp_vault_creds = Legion::Crypt.read('database/creds/legion')
    final_creds[:user] = temp_vault_creds[:username]
    final_creds[:password] = temp_vault_creds[:password]
  end

  final_creds
end

.setupObject



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/legion/data/connection.rb', line 17

def setup
  @sequel = if adapter == :sqlite
              ::Sequel.sqlite(sqlite_path)
            else
              begin
                ::Sequel.connect(adapter: adapter, **creds_builder)
              rescue StandardError => e
                raise unless dev_fallback?

                if defined?(Legion::Logging)
                  Legion::Logging.warn(
                    "Shared DB unreachable (#{e.message}), dev_mode fallback to SQLite"
                  )
                end
                @adapter = :sqlite
                ::Sequel.sqlite(sqlite_path)
              end
            end
  Legion::Settings[:data][:connected] = true
  configure_logging
end

.shutdownObject



39
40
41
42
# File 'lib/legion/data/connection.rb', line 39

def shutdown
  @sequel&.disconnect
  Legion::Settings[:data][:connected] = false
end