Class: CloudSQLRubyConnector::Rails::CloudSQLPostgreSQLAdapter

Inherits:
ActiveRecord::ConnectionAdapters::PostgreSQLAdapter
  • Object
show all
Defined in:
lib/cloud_sql_ruby_connector/rails.rb

Overview

Custom adapter that uses CloudSQLRubyConnector for connections

Constant Summary collapse

ADAPTER_NAME =
"CloudSQL PostgreSQL"
ALLOWED_PG_OPTIONS =

PG connection options that can be passed through to PG.connect See: www.postgresql.org/docs/current/libpq-connect.html#LIBPQ-PARAMKEYWORDS

%i[
  application_name
  client_encoding
  connect_timeout
  options
  keepalives
  keepalives_idle
  keepalives_interval
  keepalives_count
  tcp_user_timeout
  target_session_attrs
].freeze

Class Method Summary collapse

Class Method Details

.new_client(conn_params) ⇒ Object

In Rails 7.1+, new_client receives processed conn_params (user, dbname) not the raw config (username, database)

Raises:



104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
# File 'lib/cloud_sql_ruby_connector/rails.rb', line 104

def new_client(conn_params)
  connector = CloudSQLRubyConnector::Rails.connector
  raise ConfigurationError, "CloudSQLRubyConnector::Rails.setup! not called" unless connector

  # conn_params already has :user and :dbname (processed by parent's initialize)
  cfg = if conn_params.respond_to?(:symbolize_keys)
          conn_params.symbolize_keys
        else
          conn_params.to_h.transform_keys(&:to_sym)
        end

  # Only pass through known PG connection options
  extra_options = cfg.slice(*ALLOWED_PG_OPTIONS)

  connector.connect(
    user: cfg[:user],
    password: cfg[:password],
    dbname: cfg[:dbname],
    **extra_options
  )
end