beast rev 2066
[beast-modified.git] / vendor / plugins / will_paginate / test / lib / activerecord_test_connector.rb
blobd30bc80d4708478c21eebdcb9aa44ce2029e45be
1 class ActiveRecordTestConnector
2   cattr_accessor :able_to_connect
3   cattr_accessor :connected
5   # Set our defaults
6   self.connected = false
7   self.able_to_connect = true
9   class << self
10     def setup
11       unless self.connected || !self.able_to_connect
12         setup_connection
13         load_schema
14         require_fixture_models
15         self.connected = true
16       end
17     rescue Exception => e  # errors from ActiveRecord setup
18       $stderr.puts "\nSkipping ActiveRecord assertion tests: #{e}"
19       #$stderr.puts "  #{e.backtrace.join("\n  ")}\n"
20       self.able_to_connect = false
21     end
23     private
25     def setup_connection
26       if Object.const_defined?(:ActiveRecord)
27         defaults = { :database => ':memory:' }
28         # ActiveRecord::Base.logger = Logger.new STDOUT
29         
30         begin
31           options = defaults.merge :adapter => 'sqlite3', :timeout => 500
32           ActiveRecord::Base.establish_connection(options)
33           ActiveRecord::Base.configurations = { 'sqlite3_ar_integration' => options }
34           ActiveRecord::Base.connection
35         rescue Exception  # errors from establishing a connection
36           $stderr.puts 'SQLite 3 unavailable; trying SQLite 2.'
37           options = defaults.merge :adapter => 'sqlite'
38           ActiveRecord::Base.establish_connection(options)
39           ActiveRecord::Base.configurations = { 'sqlite2_ar_integration' => options }
40           ActiveRecord::Base.connection
41         end
43         unless Object.const_defined?(:QUOTED_TYPE)
44           Object.send :const_set, :QUOTED_TYPE, ActiveRecord::Base.connection.quote_column_name('type')
45         end
46       else
47         raise "Can't setup connection since ActiveRecord isn't loaded."
48       end
49     end
51     # Load actionpack sqlite tables
52     def load_schema
53       ActiveRecord::Base.silence do
54         File.read(File.dirname(__FILE__) + "/../fixtures/schema.sql").split(';').each do |sql|
55           ActiveRecord::Base.connection.execute(sql) unless sql.blank?
56         end
57       end
58     end
60     def require_fixture_models
61       models = Dir.glob(File.dirname(__FILE__) + "/../fixtures/*.rb")
62       models = (models.grep(/user.rb/) + models).uniq
63       models.each {|f| require f}
64     end
65   end
66 end