3
def self.read_only_connection(config)
4
real_adapter = config.delete("real_adapter")
5
connection = send("#{real_adapter}_connection", config.merge("adapter" => real_adapter))
6
ConnectionAdapters::ReadOnlyAdapter.new(connection)
10
module ConnectionAdapters
11
class ReadOnlyAdapter < AbstractAdapter
12
%w(select select_rows execute tables columns).each do |read_method|
13
class_eval <<-EOS, __FILE__, __LINE__ + 1
14
def #{read_method} (*args, &block)
15
raise "Not Connected" unless @connected
16
result = @connection.send(:#{read_method}, *args, &block)
24
%w(update insert delete reload create_table drop_table add_index remove_index transaction).each do |write_method|
25
class_eval <<-EOS, __FILE__, __LINE__ + 1
26
def #{write_method} (*args, &block)
27
raise NotImplementedError.new("Master method '#{write_method}' called on read only connection")
33
def initialize(connection)
34
@connection = connection
40
@connection.select_all('SELECT "test_models".* FROM "test_models" LIMIT 1')
48
@connection.visitor = v