~ubuntu-branches/debian/sid/ruby-seamless-database-pool/sid

« back to all changes in this revision

Viewing changes to spec/test_adapter/active_record/connection_adapters/read_only_adapter.rb

  • Committer: Package Import Robot
  • Author(s): Balasankar C
  • Date: 2016-03-18 20:36:23 UTC
  • Revision ID: package-import@ubuntu.com-20160318203623-u3tifwqz4ns0kyn8
Tags: upstream-1.0.17
ImportĀ upstreamĀ versionĀ 1.0.17

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
module ActiveRecord
 
2
  class Base
 
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)
 
7
    end
 
8
  end
 
9
  
 
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)
 
17
            def result.read_only?
 
18
              true
 
19
            end
 
20
            result
 
21
          end
 
22
        EOS
 
23
        
 
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")
 
28
            end
 
29
          EOS
 
30
        end
 
31
      end
 
32
    
 
33
      def initialize(connection)
 
34
        @connection = connection
 
35
        @connected = true
 
36
        super
 
37
      end
 
38
      
 
39
      def test_select
 
40
        @connection.select_all('SELECT  "test_models".* FROM "test_models"  LIMIT 1')
 
41
      end
 
42
      
 
43
      def visitor
 
44
        @connection.visitor
 
45
      end
 
46
      
 
47
      def visitor=(v)
 
48
        @connection.visitor = v
 
49
      end
 
50
      
 
51
      def reconnect!
 
52
        @connected = true
 
53
      end
 
54
    
 
55
      def disconnect!
 
56
        @connected = false
 
57
      end
 
58
      
 
59
      def active?
 
60
        @connected
 
61
      end
 
62
    end
 
63
  end
 
64
end