Class: Inform::Persistence

Inherits:
Object show all
Includes:
DatabaseConnectionHelpers, SequelLoggers, SequelPlugins
Defined in:
lib/runtime/persistence.rb

Overview

The Persistence class

Constant Summary

Constants included from SequelLoggers

SequelLoggers::DatabaseLogging

Constants included from DatabaseConnectionHelpers

DatabaseConnectionHelpers::AmpersandString, DatabaseConnectionHelpers::ColonString, DatabaseConnectionHelpers::ConnectionAttempts, DatabaseConnectionHelpers::DatabaseOrRoleDoesNotExistPattern, DatabaseConnectionHelpers::DefaultConnectionOptions, DatabaseConnectionHelpers::DefaultConnectionPoolSize, DatabaseConnectionHelpers::DefaultConnectionValidationTimeoutSeconds, DatabaseConnectionHelpers::EmptyString, DatabaseConnectionHelpers::ForwardSlashString, DatabaseConnectionHelpers::JavaPattern, DatabaseConnectionHelpers::KeyValueTemplate, DatabaseConnectionHelpers::QuestionMarkString, DatabaseConnectionHelpers::URLTemplate

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from SequelPlugins

#enable_plugin, #enable_plugins

Methods included from SequelLoggers

#add_logger, #delete_logger, #disable_query_logging, #enable_query_logging, #set_log_level

Methods included from DatabaseConnectionHelpers

#assemble_url, #connect, #sanitize_url

Constructor Details

#initialize(env = nil) ⇒ Persistence

Returns a new instance of Persistence.



146
147
148
149
150
151
152
153
154
# File 'lib/runtime/persistence.rb', line 146

def initialize(env = nil)
  @environment = env || Inform::Game.environment
  log.debug "Initializing persistence layer for environment: #{@environment}"
  caller[0..4].each { |t| log.debug t }
  @config = database_config.fetch(@environment.to_s, {})
  establish_database_connection
  enable_plugins
  enable_query_logging if ENV['ENABLE_SQL_LOGGING']
end

Instance Attribute Details

#configObject (readonly)

Returns the value of attribute config.



128
129
130
# File 'lib/runtime/persistence.rb', line 128

def config
  @config
end

#environmentObject (readonly)

Returns the value of attribute environment.



128
129
130
# File 'lib/runtime/persistence.rb', line 128

def environment
  @environment
end

Class Method Details

.init(env = nil) ⇒ Object



130
131
132
# File 'lib/runtime/persistence.rb', line 130

def self.init(env = nil)
  Inform::Persistence.instance(env)
end

.instance(*args) ⇒ Object



136
137
138
139
140
141
142
# File 'lib/runtime/persistence.rb', line 136

def self.instance(*args)
  return @instance unless @instance.nil?
  @instance_mutex.synchronize do
    @instance ||= new(*args)
  end
  @instance
end

Instance Method Details

#database_configObject



164
165
166
# File 'lib/runtime/persistence.rb', line 164

def database_config
  @database_config ||= YAML.load_file(database_config_file_path)
end

#database_config_file_pathObject



168
169
170
171
172
# File 'lib/runtime/persistence.rb', line 168

def database_config_file_path
  @database_config_file_path ||= File.expand_path(
    File.join(Inform::Runtime.project_dir_path, 'config', 'database.yml')
  )
end

#establish_database_connectionObject



156
157
158
159
160
161
162
# File 'lib/runtime/persistence.rb', line 156

def establish_database_connection
  connect
rescue Sequel::DatabaseConnectionError
  log.warn "Database requires initialization"
  init_database
  retry if ConnectionAttempts.memo < 2
end

#init_databaseObject



174
175
176
177
178
179
180
181
# File 'lib/runtime/persistence.rb', line 174

def init_database
  @config = database_config.fetch('default')
  connect
  @database = Inform::Database.instance(Inform::Game.config[:database_name])
  @database.bootstrap.up
  @config = database_config.fetch(environment.to_s)
  connect
end