class PgDice::Configuration

Configuration class which holds all configurable values

Attributes

approved_tables[W]
batch_size[W]
config_file[RW]
config_file_loader[W]
database_url[W]
dry_run[W]
logger[W]
logger_factory[W]
pg_connection[W]

Public Class Methods

new(existing_config = nil) click to toggle source
# File lib/pgdice/configuration.rb, line 33
def initialize(existing_config = nil)
  DEFAULT_VALUES.each do |key, value|
    initialize_value(key, value, existing_config)
  end
  @approved_tables = PgDice::ApprovedTables.new(existing_config&.approved_tables(eager_load: true)&.tables)
  initialize_objects
end

Public Instance Methods

approved_tables(eager_load: false) click to toggle source
# File lib/pgdice/configuration.rb, line 60
def approved_tables(eager_load: false)
  return @approved_tables if eager_load
  unless @approved_tables.respond_to?(:empty?)
    raise PgDice::InvalidConfigurationError, 'approved_tables must be an instance of PgDice::ApprovedTables!'
  end

  if !config_file_loader.file_loaded? && config_file.present?
    config_file_loader.load_file
    @approved_tables
  end

  @approved_tables
end
batch_size() click to toggle source
# File lib/pgdice/configuration.rb, line 82
def batch_size
  return @batch_size.to_i if @batch_size.to_i >= 0

  raise PgDice::InvalidConfigurationError, 'batch_size must be a non-negative Integer!'
end
config_file_loader() click to toggle source
# File lib/pgdice/configuration.rb, line 94
def config_file_loader
  @config_file_loader ||= ConfigurationFileLoader.new(self)
end
database_connection() click to toggle source
# File lib/pgdice/configuration.rb, line 114
def database_connection
  @database_connection_factory.call
end
database_url() click to toggle source
# File lib/pgdice/configuration.rb, line 54
def database_url
  return @database_url unless @database_url.nil?

  raise PgDice::InvalidConfigurationError, 'database_url must be present!'
end
deep_clone() click to toggle source
# File lib/pgdice/configuration.rb, line 118
def deep_clone
  PgDice::Configuration.new(self)
end
dry_run() click to toggle source
# File lib/pgdice/configuration.rb, line 88
def dry_run
  return @dry_run if [true, false].include?(@dry_run)

  raise PgDice::InvalidConfigurationError, 'dry_run must be either true or false!'
end
logger() click to toggle source
# File lib/pgdice/configuration.rb, line 98
def logger
  @logger ||= logger_factory.call
end
logger_factory() click to toggle source
# File lib/pgdice/configuration.rb, line 48
def logger_factory
  return @logger_factory if @logger_factory.respond_to?(:call)

  raise PgDice::InvalidConfigurationError, 'logger_factory must be present!'
end
partition_helper() click to toggle source
# File lib/pgdice/configuration.rb, line 106
def partition_helper
  @partition_helper_factory.call
end
partition_manager() click to toggle source
# File lib/pgdice/configuration.rb, line 102
def partition_manager
  @partition_manager_factory.call
end
pg_connection() click to toggle source

Lazily initialized

# File lib/pgdice/configuration.rb, line 75
def pg_connection
  @pg_connection ||= PG::Connection.new(database_url)
  return @pg_connection if @pg_connection.respond_to?(:exec)

  raise PgDice::InvalidConfigurationError, 'pg_connection must be present!'
end
validate!() click to toggle source
# File lib/pgdice/configuration.rb, line 41
def validate!
  logger_factory
  database_url
  batch_size
  approved_tables
end
validation() click to toggle source
# File lib/pgdice/configuration.rb, line 110
def validation
  @validation_factory.call
end

Private Instance Methods

initialize_objects() click to toggle source
# File lib/pgdice/configuration.rb, line 128
def initialize_objects
  @partition_manager_factory = PgDice::PartitionManagerFactory.new(self)
  @partition_helper_factory = PgDice::PartitionHelperFactory.new(self)
  @validation_factory = PgDice::ValidationFactory.new(self)
  @database_connection_factory = PgDice::DatabaseConnectionFactory.new(self)
end
initialize_value(variable_name, default_value, existing_configuration) click to toggle source
# File lib/pgdice/configuration.rb, line 124
def initialize_value(variable_name, default_value, existing_configuration)
  instance_variable_set("@#{variable_name}", existing_configuration&.send(variable_name)&.clone || default_value)
end