class ServerSettings::DatabaseConfig

Public Class Methods

generate_database_config(db_role, with_slave:true) click to toggle source
# File lib/server_settings/database_config.rb, line 7
def self.generate_database_config(db_role, with_slave:true)
  configuration = {}
  return configuration unless ServerSettings.databases

  ServerSettings.databases.each do |db|
    next unless db.config(db_role)

    role_db_config = db.config(db_role)
    stringify_keys!(role_db_config) if defined? Rails

    if db.name == "default"
      if defined? Rails
        configuration[Rails.env] = role_db_config
      else
        configuration.merge!(role_db_config)
      end
    elsif db.group
      configuration[db.group] ||= {}
      configuration[db.group][db.name] = role_db_config
    else
      configuration[db.name] = role_db_config
    end

    if with_slave && db.has_slave?
      db.config(:slaves).each.with_index(1) do |config, idx|
        # スレーブのバックアップホストは、マスターのバックアップホストと同じにする
        config[:host] = db.backup if db_role == :backup
        stringify_keys!(config) if defined? Rails
        configuration[slave_name(db.name, idx)] = config
      end
    end
  end
  configuration
end
slave_name(name, idx) click to toggle source
# File lib/server_settings/database_config.rb, line 3
def self.slave_name(name, idx)
  name + "_slave#{idx}"
end
stringify_keys!(config) click to toggle source
# File lib/server_settings/database_config.rb, line 42
def self.stringify_keys!(config)
  config.keys.each { |key| config[key.to_s] = config.delete(key) }
end