Sha256: a0a3c06230d6c0c7f2567f2088226d64eab701ffaeef3de3172630298e2ff609

Contents?: true

Size: 1.82 KB

Versions: 4

Compression:

Stored size: 1.82 KB

Contents

module Departure
  # Holds the parameters of the DB connection and formats them to string
  class ConnectionDetails

    # Constructor
    #
    # @param [Hash] connection parametes as used in #establish_conneciton
    def initialize(connection_data)
      @connection_data = connection_data
    end

    # Returns the details formatted as an string to be used with
    # pt-online-schema-change. It follows the mysql client's format.
    #
    # @return [String]
    def to_s
      @to_s ||= "-h #{host} -u #{user} #{password_argument}"
    end

    # TODO: Doesn't the abstract adapter already handle this somehow?
    # Returns the database name. If PERCONA_DB_NAME is passed its value will be
    # used instead
    #
    # Returns the database name
    #
    # @return [String]
    def database
      ENV.fetch('PERCONA_DB_NAME', connection_data[:database])
    end

    # Returns the password fragment of the details string if a password is passed
    #
    # @return [String]
    def password_argument
      if password.present?
        "-p #{password}"
      else
        ''
      end
    end

    private

    attr_reader :connection_data

    # Returns the database host name, defaulting to localhost. If PERCONA_DB_HOST
    # is passed its value will be used instead
    #
    # @return [String]
    def host
      ENV.fetch('PERCONA_DB_HOST', connection_data[:host]) || 'localhost'
    end

    # Returns the database user. If PERCONA_DB_USER is passed its value will be
    # used instead
    #
    # @return [String]
    def user
      ENV.fetch('PERCONA_DB_USER', connection_data[:username])
    end

    # Returns the database user's password. If PERCONA_DB_PASSWORD is passed its
    # value will be used instead
    #
    # @return [String]
    def password
      ENV.fetch('PERCONA_DB_PASSWORD', connection_data[:password])
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
departure-4.0.1 lib/departure/connection_details.rb
departure-4.0.0 lib/departure/connection_details.rb
departure-3.0.0 lib/departure/connection_details.rb
departure-2.0.0 lib/departure/connection_details.rb