add support for setting session variables for postgres connections (as you can in ActiveRecord 4.x)
This commit is contained in:
parent
9ec2ef7f56
commit
887a797ae6
30
lib/active_record_postgres_variables.rb
Normal file
30
lib/active_record_postgres_variables.rb
Normal file
|
@ -0,0 +1,30 @@
|
|||
# This backports support for the :variables option on postgres database details from ActiveRecord 4 to ActiveRecord 3.
|
||||
require 'active_record'
|
||||
|
||||
if ActiveRecord::VERSION::MAJOR < 4
|
||||
require 'active_record/connection_adapters/postgresql_adapter'
|
||||
|
||||
module ActiveRecordPostgresVariables
|
||||
def configure_connection
|
||||
result = super
|
||||
set_variables
|
||||
result
|
||||
end
|
||||
|
||||
def set_variables
|
||||
return unless variables = @config[:variables]
|
||||
|
||||
# copied from AR 4.2.1
|
||||
variables.map do |k, v|
|
||||
if v == ':default' || v == :default
|
||||
# Sets the value to the global or compile default
|
||||
execute("SET SESSION #{k} TO DEFAULT", 'SCHEMA')
|
||||
elsif !v.nil?
|
||||
execute("SET SESSION #{k} TO #{quote(v)}", 'SCHEMA')
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
ActiveRecord::ConnectionAdapters::PostgreSQLAdapter.prepend(ActiveRecordPostgresVariables)
|
||||
end
|
|
@ -1,4 +1,8 @@
|
|||
# these things need to go first
|
||||
require 'conditional_skylight'
|
||||
require 'active_record_postgres_variables'
|
||||
|
||||
# now actually load travis
|
||||
require 'travis'
|
||||
require 'travis/model'
|
||||
require 'travis/support/amqp'
|
||||
|
|
12
spec/active_record_postgres_variables_spec.rb
Normal file
12
spec/active_record_postgres_variables_spec.rb
Normal file
|
@ -0,0 +1,12 @@
|
|||
require 'spec_helper'
|
||||
|
||||
describe "ActiveRecordPostgresVariables" do
|
||||
let(:variables) {{ foo: 'bar' }}
|
||||
let(:database_options) { Travis.config.database.merge(variables: variables) }
|
||||
let(:base) { Class.new(ActiveRecord::Base) }
|
||||
|
||||
it "passes on variables to postgres connections" do
|
||||
base.establish_connection(database_options)
|
||||
expect { base.table_exists? }.to raise_error(ActiveRecord::StatementInvalid, /unrecognized configuration parameter "foo"/)
|
||||
end
|
||||
end
|
Loading…
Reference in New Issue
Block a user